class_name BaseJet extends Node var CONFLICT_SIDE = Globals.Faction.NEUTRAL var HEALTH: int = 100 var YAW_SPEED: int = 50 var ROLL_SPEED: int = 100 var MIN_SPEED: int = 200 var MAX_SPEED: int = 2000 var ACCELERATION: int = 15 var speed: float = float(MIN_SPEED) func do_action( action: Globals.ControllerCommand, delta: float, jet: Jet ) -> void: var change_rate: float = deg_to_rad(1) * delta match action: Globals.ControllerCommand.PITCH_UP: pitch_up(change_rate, jet) Globals.ControllerCommand.PITCH_DOWN: pitch_down(change_rate, jet) Globals.ControllerCommand.YAW_LEFT: yaw_left(change_rate, jet) Globals.ControllerCommand.YAW_RIGHT: yaw_right(change_rate, jet) Globals.ControllerCommand.ROLL_LEFT: roll_left(change_rate, jet) Globals.ControllerCommand.ROLL_RIGHT: roll_right(change_rate, jet) Globals.ControllerCommand.THROTTLE_UP: throttle_up(delta) Globals.ControllerCommand.THROTTLE_DOWN: throttle_down(delta) _: pass func pitch_up(change_rate: float, jet: Jet) -> void: jet.rotate_object_local(Vector3.RIGHT, change_rate * MIN_SPEED) func pitch_down(change_rate: float, jet: Jet) -> void: jet.rotate_object_local(Vector3.LEFT, change_rate * MIN_SPEED) func yaw_left(change_rate: float, jet: Jet) -> void: jet.rotate_object_local(Vector3.UP, change_rate * YAW_SPEED) func yaw_right(change_rate: float, jet: Jet) -> void: jet.rotate_object_local(Vector3.DOWN, change_rate * YAW_SPEED) func roll_left(change_rate: float, jet: Jet) -> void: jet.rotate_object_local(Vector3.BACK, change_rate * ROLL_SPEED) func roll_right(change_rate: float, jet: Jet) -> void: jet.rotate_object_local(Vector3.FORWARD, change_rate * ROLL_SPEED) func throttle_up(delta: float) -> void: speed = move_toward(speed, MAX_SPEED, ACCELERATION * delta) func throttle_down(delta: float) -> void: speed = move_toward(speed, MIN_SPEED, ACCELERATION * delta) #func cpu_fly_at(change_rate: float, jet: Jet): # jet.rotate_toward(...) # NOTE: example to consider # runner_visual.angle = rotate_toward(runner_visual.angle, direction.orthogonal().angle(), 8.0 * delta)