Files
R.A.M/rougelikeaboutmechs/Machines/Resources/Abstracts/machine_abstract.gd

77 lines
2.6 KiB
GDScript

@abstract
class_name Machine
extends CharacterBody2D
@export var model_name : StringName
@export var carry_capacity : float
@export var hit_points : float
@export var fuel_tank_capacity : float
@export var movement_speed : float
signal change_animation(anim_to_change_to)
var animation_state_machine : MachineGlobals.regular_states
var look_dir : MachineGlobals.look_direction
var effects : Array
var add_on_slots : int
var machine_upgrades : Dictionary
var ability_timer : Timer
var action_timer : Timer
var current_fuel_in_tank : float
@abstract func primary_action() -> float
@abstract func secondary_action() -> float
@abstract func model_ability() -> float
@abstract func class_ability() -> float
@abstract func listen_to_animation_signals(next_anim_state : MachineGlobals.regular_states) -> void
func _ready() -> void:
connect("change_animation",listen_to_animation_signals)
func interact() -> void :
pass
func _physics_process(delta: float) -> void:
_movement(delta)
_ability_process(delta)
_action_process(delta)
move_and_slide()
func _movement(delta: float) -> void :
DebugGlobal.set_debug_info("Velocity", self.velocity )
var input_direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
self.velocity = input_direction * movement_speed
if self.velocity != Vector2.ZERO && animation_state_machine in [MachineGlobals.regular_states.IDLING,MachineGlobals.regular_states.INTERACTING] :
animation_state_machine = MachineGlobals.regular_states.WALKING
if self.velocity.y < 0 :
look_dir = MachineGlobals.look_direction.UP
elif self.velocity.y > 0 :
look_dir = MachineGlobals.look_direction.DOWN
elif self.velocity.x > 0 :
look_dir = MachineGlobals.look_direction.RIGHT
elif self.velocity.x < 0 :
look_dir = MachineGlobals.look_direction.LEFT
else :
animation_state_machine = MachineGlobals.regular_states.IDLING
func _action_process(delta:float) -> void :
if action_timer != null && action_timer.is_stopped():
if Input.is_action_just_pressed("primary_action") :
action_timer.start(primary_action())
elif Input.is_action_just_pressed("secondary_action") :
action_timer.start(secondary_action())
func _ability_process(delta:float) -> void :
if ability_timer != null && ability_timer.is_stopped() :
if Input.is_action_just_pressed("class_ability") :
ability_timer.start(class_ability())
elif Input.is_action_just_pressed("model_ability") :
ability_timer.start(model_ability())
func _get_body_parts() -> Array :
var clist : Array
for a in self.get_children() :
if a is AnimatedSprite2D :
clist.append(a)
return clist