add energy mechanic to sg2083
This commit is contained in:
parent
fd10cfca8c
commit
e0e56d3ffa
5 changed files with 53 additions and 5 deletions
Binary file not shown.
|
@ -3,6 +3,7 @@ extends KinematicBody2D
|
|||
|
||||
signal died()
|
||||
signal health_changed(amount)
|
||||
signal energy_changed(amount)
|
||||
|
||||
|
||||
enum State {DEAD, STAND, FORWARD, BACK, DUCK, BEAM, INACTIVE}
|
||||
|
@ -12,17 +13,23 @@ const SmallExplosion = preload("res://objects/enemy/boss/2600_small_explosion.ts
|
|||
|
||||
|
||||
export var hp: float = 100.0
|
||||
export var max_energy: float = 100.0
|
||||
export var energy_recovery: float = 5.0
|
||||
export var shot_speed: float = 50.0
|
||||
export var move_speed: float = 30.0
|
||||
export var safe_from_breath: bool = false
|
||||
export var make_explosions: bool = false
|
||||
export var bullet_damage: float = 1.0
|
||||
export var bullet_energy: float = 5.0
|
||||
export var beam_energy: float = 50.0
|
||||
export var duck_energy: float = 10.0
|
||||
export var explosion_rect: Rect2
|
||||
export var famira_path: NodePath
|
||||
|
||||
|
||||
var state: int = State.STAND
|
||||
var knockback: float = 0.0
|
||||
var energy: float = max_energy
|
||||
|
||||
|
||||
onready var bullet_positions = $"%BulletPositions"
|
||||
|
@ -35,7 +42,8 @@ func _physics_process(delta: float) -> void:
|
|||
State.DEAD:
|
||||
return
|
||||
State.STAND:
|
||||
if Input.is_action_pressed("move_down"):
|
||||
if Input.is_action_pressed("move_down") and energy >= duck_energy:
|
||||
set_energy(energy - duck_energy)
|
||||
state = State.DUCK
|
||||
anims.play("Duck")
|
||||
elif Input.is_action_pressed("move_right"):
|
||||
|
@ -53,18 +61,25 @@ func _physics_process(delta: float) -> void:
|
|||
move_and_slide(Vector2(-move_speed, 0.0))
|
||||
move_and_slide(Vector2(-knockback, 0.0))
|
||||
knockback *= pow(0.1, delta)
|
||||
set_energy(energy + energy_recovery * delta)
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if state == State.DEAD:
|
||||
return
|
||||
if event.is_action_pressed("shoot") and (state == State.STAND or state == State.FORWARD or state == State.BACK):
|
||||
if event.is_action_pressed("shoot") and (state == State.STAND or state == State.FORWARD or state == State.BACK) and energy >= bullet_energy:
|
||||
shoot()
|
||||
if event.is_action_pressed("jump") and state == State.STAND:
|
||||
if event.is_action_pressed("jump") and state == State.STAND and energy >= beam_energy:
|
||||
beam()
|
||||
|
||||
|
||||
func set_energy(value: float) -> void:
|
||||
energy = clamp(value, 0.0, max_energy)
|
||||
emit_signal("energy_changed", energy)
|
||||
|
||||
|
||||
func shoot() -> void:
|
||||
set_energy(energy - bullet_energy)
|
||||
Audio.play_sound(Audio.a_bullet_barrage,Audio.ac_collectible)
|
||||
for pos in bullet_positions.get_children():
|
||||
var bullet = Bullet.instance()
|
||||
|
@ -77,6 +92,8 @@ func shoot() -> void:
|
|||
|
||||
func beam() -> void:
|
||||
state = State.BEAM
|
||||
var tween = create_tween()
|
||||
tween.tween_method(self, "set_energy", energy, energy - beam_energy, 0.9)
|
||||
anims.play("Beam")
|
||||
|
||||
|
||||
|
|
|
@ -1607,7 +1607,7 @@ update_scale = false
|
|||
|
||||
[node name="KneeBack" type="Sprite" parent="Axle"]
|
||||
modulate = Color( 0.74902, 0.74902, 0.74902, 1 )
|
||||
position = Vector2( 6.25089, 28.1233 )
|
||||
position = Vector2( 6.25088, 28.1233 )
|
||||
scale = Vector2( 1, -1 )
|
||||
z_index = -1
|
||||
texture = ExtResource( 8 )
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue