@abstract class_name Machine extends Node @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 var states : Array var add_on_slots : int var machine_upgrades : Dictionary var ability_timer : Timer var action_timer : Timer var self_body : CharacterBody2D 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 func interact() -> void : pass func _physics_process(delta: float) -> void: _movement(delta) _ability_process(delta) _action_process(delta) self_body.move_and_slide() func _movement(delta: float) -> void : var input_direction = Input.get_vector("move_left", "move_right", "move_up", "move_down") self.velocity = input_direction * movement_speed func _action_process(delta:float) -> void : if !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.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())