Resolve pending gameplay tickets
This commit is contained in:
parent
ec20778215
commit
c2ebbfaa2d
28 changed files with 618 additions and 188 deletions
|
|
@ -33,6 +33,11 @@ var fleet_target: Vector2 = Vector2.ZERO
|
|||
# travelling along. Zero heading means the fleet is not being steered.
|
||||
var anchor: Vector2 = Vector2.ZERO
|
||||
var steer_direction: Vector2 = Vector2.ZERO
|
||||
# An aimed Propulser burst translates the complete formation as one body.
|
||||
var dash_direction: Vector2 = Vector2.ZERO
|
||||
var dash_remaining: float = 0.0
|
||||
|
||||
const DASH_SPEED: float = 1400.0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
|
|
@ -227,12 +232,29 @@ func move_in_direction(direction: Vector2) -> void:
|
|||
steer_direction = direction.normalized()
|
||||
|
||||
|
||||
func dash(direction: Vector2, distance: float) -> bool:
|
||||
if direction.length() < 0.001 or distance <= 0.0 or ships.is_empty():
|
||||
return false
|
||||
if dash_remaining <= 0.0:
|
||||
anchor = get_formation_origin()
|
||||
dash_direction = direction.normalized()
|
||||
dash_remaining = distance
|
||||
return true
|
||||
|
||||
|
||||
func is_dashing() -> bool:
|
||||
return dash_remaining > 0.0
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
# #158: a building may pay a local cost out of the hold when the fleet is
|
||||
# actually standing at it, and the autoload has no other way to know
|
||||
# where that is. Written before the early return below - a parked fleet
|
||||
# is exactly the case that matters.
|
||||
GameState.fleet_position = get_centroid()
|
||||
if is_dashing():
|
||||
_advance_dash(delta)
|
||||
return
|
||||
if steer_direction == Vector2.ZERO:
|
||||
return
|
||||
# The anchor - the fleet's formation centre - travels at cruise_speed.
|
||||
|
|
@ -244,6 +266,29 @@ func _process(delta: float) -> void:
|
|||
_assign_slot_targets()
|
||||
|
||||
|
||||
func _advance_dash(delta: float) -> void:
|
||||
var step: float = minf(DASH_SPEED * delta, dash_remaining)
|
||||
var displacement: Vector2 = dash_direction * step
|
||||
dash_remaining -= step
|
||||
anchor += displacement
|
||||
fleet_target += displacement
|
||||
for ship in ships:
|
||||
if not is_instance_valid(ship):
|
||||
continue
|
||||
# Move the hull and its destination together. That preserves every
|
||||
# formation offset and prevents normal steering from trying to "repair"
|
||||
# the burst by pulling ships back toward their pre-dash targets.
|
||||
ship.position += displacement
|
||||
ship.move_target += displacement
|
||||
ship.velocity = Vector2.ZERO
|
||||
ship.fleet_velocity = Vector2.ZERO
|
||||
ship.rotation = dash_direction.angle() + PI / 2.0
|
||||
if dash_remaining <= 0.001:
|
||||
dash_remaining = 0.0
|
||||
if steer_direction != Vector2.ZERO:
|
||||
_assign_slot_targets()
|
||||
|
||||
|
||||
func _effective_cruise_speed() -> float:
|
||||
return cruise_speed * GameState.fleet_speed_multiplier
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue