111 lines
2.7 KiB
GDScript
111 lines
2.7 KiB
GDScript
extends CharacterBody2D
|
|
|
|
@export var interface : Control
|
|
|
|
const move_speed = 400
|
|
const acceleration = 0.25
|
|
const max_boost_speed = 800
|
|
|
|
var previous_direction = Vector2.ZERO
|
|
var boost_speed = 0
|
|
|
|
var flute = null
|
|
var tambour = null
|
|
var lyre = null
|
|
|
|
var flute_timer = 0.0
|
|
var tambour_timer = 0.0
|
|
var lyre_timer = 0.0
|
|
|
|
var flute_cooldown = 0.5
|
|
var tambour_cooldown = 3.0
|
|
var lyre_cooldown = 1
|
|
|
|
var instrument_list = [
|
|
"",
|
|
""
|
|
]
|
|
|
|
var vie = 10
|
|
|
|
func _ready() -> void:
|
|
flute = load("res://scripts/Instrument/Flute.gd").new()
|
|
flute.set_scene_parent(get_tree().get_root())
|
|
|
|
tambour = load("res://scripts/Instrument/Tambour.gd").new()
|
|
tambour.set_scene_parent(get_tree().get_root())
|
|
|
|
lyre = load("res://scripts/Instrument/Lyre.gd").new()
|
|
lyre.set_scene_parent(get_tree().get_root())
|
|
|
|
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
move_and_slide()
|
|
|
|
func _process(delta: float) -> void:
|
|
var direction : Vector2 = Vector2.ZERO
|
|
direction.x = Input.get_action_raw_strength("BOUGER_DROITE") - Input.get_action_raw_strength("BOUGER_GAUCHE")
|
|
direction.y = Input.get_action_raw_strength("BOUGER_BAS") - Input.get_action_raw_strength("BOUGER_HAUT")
|
|
|
|
if direction != Vector2.ZERO:
|
|
if direction == previous_direction:
|
|
if direction.x != 0 and direction.y != 0:
|
|
boost_speed = min(boost_speed + acceleration / 16, (max_boost_speed - move_speed) / 8)
|
|
else:
|
|
boost_speed = min(boost_speed + acceleration, max_boost_speed - move_speed)
|
|
else:
|
|
boost_speed = 0
|
|
|
|
previous_direction = direction
|
|
velocity = direction * (move_speed + boost_speed)
|
|
else:
|
|
velocity = Vector2.ZERO
|
|
|
|
var direction_balle = Vector2.ZERO
|
|
var angle = 0
|
|
var angle_lyre = 0
|
|
if Input.is_action_pressed("JOUER_MUSIQUE_HAUT"):
|
|
direction_balle = Vector2(0, -1)
|
|
angle = 180
|
|
angle_lyre = 270
|
|
|
|
elif Input.is_action_pressed("JOUER_MUSIQUE_BAS"):
|
|
direction_balle = Vector2(0, 1)
|
|
angle_lyre = 90
|
|
|
|
elif Input.is_action_pressed("JOUER_MUSIQUE_DROITE"):
|
|
direction_balle = Vector2(1, 0)
|
|
angle = 270
|
|
|
|
elif Input.is_action_pressed("JOUER_MUSIQUE_GAUCHE"):
|
|
direction_balle = Vector2(-1, 0)
|
|
angle = 90
|
|
angle_lyre = 180
|
|
|
|
if flute_timer > 0:
|
|
flute_timer -= delta
|
|
|
|
if tambour_timer > 0:
|
|
tambour_timer -= delta
|
|
|
|
if lyre_timer > 0:
|
|
lyre_timer -= delta
|
|
|
|
if flute and flute_timer <= 0.0 and direction_balle != Vector2.ZERO:
|
|
flute.jouer_melodie(position, direction_balle, angle)
|
|
flute_timer = flute_cooldown
|
|
|
|
if tambour and tambour_timer <= 0.0 and direction_balle != Vector2.ZERO:
|
|
tambour.jouer_melodie(position)
|
|
tambour_timer = tambour_cooldown
|
|
|
|
if lyre and lyre_timer <= 0.0 and direction_balle != Vector2.ZERO:
|
|
lyre.jouer_melodie(position, direction_balle, angle_lyre)
|
|
lyre_timer = lyre_cooldown
|
|
|
|
|
|
func take_damage(dmg : int) :
|
|
vie -= dmg
|
|
interface.set_life(vie)
|