Add space-time distorder vessel and fleet speed fader (#59)
GameState.fleet_speed_multiplier (1.0-3.0) is applied at the point of
use - Fleet's cruise anchor and Ship's own max_speed/acceleration -
rather than baked into stored stats, so a stat upgrade researched
mid-boost can't corrupt the base value and the fader takes effect
immediately with no re-apply step.
Ship.arrive_radius is scaled by the same multiplier: at higher speeds
each physics tick covers a proportionally larger step, and once that
step outgrows a fixed arrive_radius the ship can overshoot its
snap-to-target zone every tick while chasing a target that's now also
receding faster - visible as the fleet stretching apart under boost.
Scaling it preserves the same "snaps onto its slot" tightness at any
boost level that 1.0x already has.
SpeedFader.gd is a self-contained vertical drag control (TouchJoystick's
raw-touch idiom, not _gui_input) that writes straight to the autoload
rather than reporting a value for something else to apply. It also
resets the multiplier to 1.0 the instant fleet.has_capability("distorder")
goes false, so a fleet can never be left permanently boosted by a vessel
it no longer has.
VesselDistorderComponent carries no per-shot behaviour (energy drain
while boosted is #62) - its presence is what matters. Registered in
VesselDefinitions, wired into the crafter/hangar/ship-lab menus per
#57's note (5/5/6 -> 6/6/7 columns).
This commit is contained in:
parent
ed46cd77e6
commit
116e0f97d3
14 changed files with 675 additions and 86 deletions
13
Fleet.gd
13
Fleet.gd
|
|
@ -200,18 +200,25 @@ func _process(delta: float) -> void:
|
|||
if steer_direction == Vector2.ZERO:
|
||||
return
|
||||
# The anchor - the fleet's formation centre - travels at cruise_speed.
|
||||
# Ships may exceed it individually to reach their slots.
|
||||
anchor += steer_direction * cruise_speed * delta
|
||||
# Ships may exceed it individually to reach their slots. #59: multiplied
|
||||
# at the point of use, not baked into cruise_speed itself, so the base
|
||||
# value stays stable regardless of the current boost.
|
||||
anchor += steer_direction * _effective_cruise_speed() * delta
|
||||
fleet_target = anchor
|
||||
_assign_slot_targets()
|
||||
|
||||
|
||||
func _effective_cruise_speed() -> float:
|
||||
return cruise_speed * GameState.fleet_speed_multiplier
|
||||
|
||||
|
||||
func _assign_slot_targets() -> void:
|
||||
var effective_cruise_speed: float = _effective_cruise_speed()
|
||||
for i in range(ships.size()):
|
||||
ships[i].set_move_target(fleet_target + formation_offsets[i])
|
||||
# Context, not a command: the ship adds this to its own velocity to
|
||||
# work out how it is really moving. See Ship.fleet_velocity.
|
||||
ships[i].fleet_velocity = steer_direction * cruise_speed
|
||||
ships[i].fleet_velocity = steer_direction * effective_cruise_speed
|
||||
|
||||
|
||||
func stop() -> void:
|
||||
|
|
|
|||
Loading…
Reference in a new issue