extends Node2D class_name ShipEngine @export var MaxSpeed : float = 200 #максимальная скорость без турбо режима @export var MaxTurboSpeed : float = 300 #максимальная скорость в турбо режиме @export var SpeedAcceleration : float = 50 #ускорение @export var TurboFuelConsumption : float = 100 #потребление топлива в турбо режиме за секунду @export var RotationSpeed : int = 90 #максимальная скорость поворота @onready var Ship = get_parent() var Speed = 0 #текущая скорость var MinSpeed = MaxSpeed / -4 #минимальная скорость var TurboEnabled = false var AlternativeMovement = false var DestinationAngle : float var DestinationDifference : float @onready var Hull = $"../Hull" func _physics_process(delta): if DestinationAngle - Ship.rotation_degrees == clamp(DestinationAngle - Ship.rotation_degrees, -180, 180): DestinationDifference = DestinationAngle - Ship.rotation_degrees else: DestinationDifference = Ship.rotation_degrees - DestinationAngle if DestinationDifference != clamp(DestinationDifference, -1, 1): Ship.rotation_degrees += sign(DestinationDifference) * RotationSpeed * delta else: Ship.rotation_degrees = DestinationAngle if !AlternativeMovement: if Ship is MainShip: DestinationAngle = rad_to_deg(Ship.global_position.angle_to_point(get_global_mouse_position())) else: var RotationInput = Input.get_axis("rotateleft","rotateright") DestinationAngle += RotationInput * RotationSpeed * delta if DestinationAngle > 180: DestinationAngle = -180 if DestinationAngle < -180: DestinationAngle = 180 if Vector2.ZERO.distance_to(global_position) >= 5800: DestinationAngle = rad_to_deg(global_position.angle_to_point(Vector2.ZERO)) TurboEnabled = clamp(Input.get_action_raw_strength("turbo") * Hull.Fuel, 0, 1) if Ship is MainShip else (Ship.State == "runaway" and Hull.Fuel > 0) var AccelerationInput = Input.get_axis("deccelerate", "accelerate") if Ship is MainShip else 1.0 if !TurboEnabled: Speed = clamp(Speed + AccelerationInput * SpeedAcceleration * delta, MinSpeed, max(MaxSpeed, Speed)) if Speed > MaxSpeed: Speed -= SpeedAcceleration * delta if AccelerationInput != -1 else 0 else: if Hull.Fuel > 0: Speed = clamp(Speed + SpeedAcceleration * delta, MinSpeed, MaxTurboSpeed) if Speed > MaxSpeed: Hull.Fuel -= TurboFuelConsumption * delta if Hull.Fuel < 0: Hull.Fuel = 0 Ship.velocity = Vector2.from_angle(Ship.rotation) * Speed Ship.move_and_slide() if Input.is_action_just_released("alternatemovement") and Ship is MainShip: AlternativeMovement = !AlternativeMovement