initial commit
This commit is contained in:
commit
35bb9bb38f
46 changed files with 1243 additions and 0 deletions
100
Player.gd
Normal file
100
Player.gd
Normal file
|
@ -0,0 +1,100 @@
|
|||
extends KinematicBody2D
|
||||
class_name Player
|
||||
var Bullet = preload("res://Bullet.tscn")
|
||||
|
||||
signal ammo_changed(ammo)
|
||||
signal hp_changed(hp)
|
||||
signal player_dead
|
||||
signal player_hurt
|
||||
signal shot_fired
|
||||
|
||||
func is_player() -> bool:
|
||||
return true
|
||||
|
||||
var input_vec = Vector2.ZERO
|
||||
var last_dir = Vector2.ZERO
|
||||
var ammo : int = 0
|
||||
var max_hp : int = 5
|
||||
var hp : int = 5
|
||||
|
||||
const SHOOT_COOLDOWN = 1
|
||||
var shoot_cooldown_remaining : float = 0.0
|
||||
|
||||
onready var sprite = $AnimatedSprite
|
||||
|
||||
func _ready():
|
||||
pass
|
||||
|
||||
func is_type(type):
|
||||
return type == "Player" or .is_type(type)
|
||||
|
||||
func heal(amount : int):
|
||||
hp += amount
|
||||
if hp > max_hp:
|
||||
hp = max_hp
|
||||
emit_signal("hp_changed", hp)
|
||||
|
||||
func take_damage(dmg : int):
|
||||
hp -= dmg
|
||||
if hp <= 0:
|
||||
hp = 0
|
||||
emit_signal("player_dead")
|
||||
emit_signal("hp_changed", hp)
|
||||
emit_signal("player_hurt")
|
||||
|
||||
func get_type():
|
||||
return "Player"
|
||||
|
||||
func pick_up(p_ammo):
|
||||
ammo += p_ammo
|
||||
emit_signal("ammo_changed", ammo)
|
||||
|
||||
func fire():
|
||||
var bullet = Bullet.instance()
|
||||
bullet.global_position = self.global_position
|
||||
bullet.init(last_dir)
|
||||
get_parent().add_child(bullet)
|
||||
ammo -= 1
|
||||
emit_signal("ammo_changed", ammo)
|
||||
shoot_cooldown_remaining = SHOOT_COOLDOWN
|
||||
emit_signal("shot_fired")
|
||||
|
||||
func _process(delta):
|
||||
if !is_alive():
|
||||
return
|
||||
shoot_cooldown_remaining -= delta
|
||||
if shoot_cooldown_remaining < 0.0:
|
||||
shoot_cooldown_remaining = 0.0
|
||||
input_vec = Vector2.ZERO
|
||||
if Input.is_action_pressed("ui_down"):
|
||||
input_vec.y = 1
|
||||
if Input.is_action_pressed("ui_up"):
|
||||
input_vec.y = -1
|
||||
if Input.is_action_pressed("ui_right"):
|
||||
input_vec.x = 1
|
||||
if Input.is_action_pressed("ui_left"):
|
||||
input_vec.x = -1
|
||||
if input_vec != Vector2.ZERO:
|
||||
last_dir = input_vec.normalized()
|
||||
|
||||
if Input.is_action_just_pressed("ui_accept"):
|
||||
if shoot_cooldown_remaining <= 0.0 and ammo > 0:
|
||||
fire()
|
||||
|
||||
if input_vec.x < 0:
|
||||
sprite.animation = "side"
|
||||
sprite.flip_h = true
|
||||
elif input_vec.x > 0:
|
||||
sprite.animation = "side"
|
||||
sprite.flip_h = false
|
||||
|
||||
if input_vec.y < 0:
|
||||
sprite.animation = "up"
|
||||
elif input_vec.y > 0:
|
||||
sprite.animation = "down"
|
||||
|
||||
func _physics_process(delta):
|
||||
move_and_slide(input_vec.normalized() * 100, Vector2.UP)
|
||||
|
||||
func is_alive() -> bool:
|
||||
return hp > 0
|
Loading…
Add table
Add a link
Reference in a new issue