add energy mechanic to sg2083

This commit is contained in:
Haze Weathers 2024-02-27 22:12:30 -05:00
parent fd10cfca8c
commit e0e56d3ffa
5 changed files with 53 additions and 5 deletions

View file

@ -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")

View file

@ -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 )