fuzzyworld

godot-shooter / meteor / files / Player.gd

Branch meteor · default branch · all branches

Player.gd

Blame: the commit that last changed each line · file · history

b856550a 2023-10-30 Pavel Safronov1extends KinematicBody2D
f398dcb9 2023-11-02 Pavel Safronov2class_name Player
b856550a 2023-10-30 Pavel Safronov3
748f09d4 2023-11-02 Pavel Safronov4export var move_speed = 35
f398dcb9 2023-11-02 Pavel Safronov5export var health = 10
b856550a 2023-10-30 Pavel Safronov6export var max_health = 10
4872f90d 2023-11-02 Pavel Safronov7export var shot_period_seconds = .5
b856550a 2023-10-30 Pavel Safronov8export var bullet: PackedScene
d99ccd2a 2023-11-04 Pavel Safronov9export var is_invincible = false
b856550a 2023-10-30 Pavel Safronov10
f1a0def4 2023-10-31 Pavel Safronov11var PopupControl = preload("res://Popup.tscn")
b856550a 2023-10-30 Pavel Safronov12
13var dead = false
14var velocity = Vector2.ZERO
15var can_fire = true
f398dcb9 2023-11-02 Pavel Safronov16var destination: Vector2
17var is_destination_set = false
b856550a 2023-10-30 Pavel Safronov18
236d1677 2023-11-01 Pavel Safronov19func _process(_delta: float) -> void:
b856550a 2023-10-30 Pavel Safronov20 if dead:
21 return
c7a34446 2023-10-31 Pavel Safronov22 $Graphics/Alive/Control/HealthLabel.text = "%s / %s" % [health, max_health]
23 $Graphics/Alive/Control.global_rotation = 0
b856550a 2023-10-30 Pavel Safronov24
8c2ffd3f 2023-11-02 Pavel Safronov25func _physics_process(_delta: float) -> void:
b856550a 2023-10-30 Pavel Safronov26 if dead:
27 return
8c2ffd3f 2023-11-02 Pavel Safronov28 global_rotation = global_position.direction_to(get_global_mouse_position()).angle() + PI/2.0
b856550a 2023-10-30 Pavel Safronov29 velocity = move_and_slide(velocity)
30
31func restart():
236d1677 2023-11-01 Pavel Safronov32 var _error = get_tree().reload_current_scene()
b856550a 2023-10-30 Pavel Safronov33
34func kill():
d99ccd2a 2023-11-04 Pavel Safronov35 if dead or is_invincible:
b856550a 2023-10-30 Pavel Safronov36 return
37 dead = true
38 $Graphics/Dead.show()
39 $Graphics/Alive.hide()
f398dcb9 2023-11-02 Pavel Safronov40 $CanvasLayer/CenterContainer/DeathScreen.show()
b856550a 2023-10-30 Pavel Safronov41 z_index = -1
42
f398dcb9 2023-11-02 Pavel Safronov43func hurt(damage_amount: int = 1):
d99ccd2a 2023-11-04 Pavel Safronov44 if dead or is_invincible:
b856550a 2023-10-30 Pavel Safronov45 return
a261d90c 2023-11-02 Pavel Safronov46 health -= damage_amount
b856550a 2023-10-30 Pavel Safronov47 if health <= 0:
48 kill()
49
50func shoot():
51 if !can_fire:
52 return
53 can_fire = false
54 $ShotTimer.wait_time = shot_period_seconds
55 $ShotTimer.start()
56 var b = bullet.instance()
57 owner.add_child(b)
58 b.transform = $Barrel.global_transform
59
f398dcb9 2023-11-02 Pavel Safronov60func shoot_at(pos: Vector2):
61 if !can_fire:
62 return
63 can_fire = false
64 $ShotTimer.wait_time = shot_period_seconds
65 $ShotTimer.start()
66 var b = bullet.instance() as Bullet
67 owner.add_child(b)
68 b.global_position = global_position
69 b.global_rotation = global_position.angle_to_point(pos) + PI / 2.0
70
b856550a 2023-10-30 Pavel Safronov71func allow_fire():
72 can_fire = true
f398dcb9 2023-11-02 Pavel Safronov73
74func _on_Button_pressed() -> void:
75 restart()