48 lines
1.4 KiB
GDScript
48 lines
1.4 KiB
GDScript
@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 _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.time_left > 0 :
|
|
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.time_left > 0 :
|
|
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())
|