Initial commit (1/2)
This commit is contained in:
commit
3411c5796d
66 changed files with 2261 additions and 0 deletions
60
scripts/MSEngine.gd
Normal file
60
scripts/MSEngine.gd
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue