#105 (#97g): garrison vessels patrol and defend their outpost
A garrisoned vessel circles its post, engages what comes into range, and goes back to circling. It steers by writing move_target and lets Ship's own steering fly it, so it accelerates, banks and brakes exactly like a vessel in the formation. It is not in Fleet.ships. It does not follow the formation, does not count against max_fleet_size(), and does not move when the player flies away - which is the whole point of stationing it. A garrison that ate a fleet slot would mean stationing a vessel cost the player a place in their own wedge. The leash is the load-bearing part. Enemies are judged from the POST rather than from the vessel, so a garrison that has drifted out to its leash cannot see further still and be walked away from its outpost one enemy at a time, and an engagement is clamped to a circle around the post rather than to a straight line, so it still manoeuvres while pinned. The orbit starts from where the vessel actually is rather than a random bearing. A random one makes the first move_target a point on the far side of the circle, and the vessel flies straight across the middle - through the outpost it is guarding. EnemyTargets.nearest_ship now searches the player_ships GROUP instead of Fleet.ships: an enemy that ignored the guns shooting at it, because they were not in the player's formation, would let a garrison hold a position without ever being fought back. The laser vessel is deliberately not garrisonable. Firing the laser lives in LaserController, a fleet ability driven by the laser button, rather than in VesselLaserComponent - so a garrisoned laser would hold its position and never shoot, and offering a vessel that cannot fight is worse than a short list. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
8122e280b7
commit
bd0cc842ff
5 changed files with 444 additions and 6 deletions
|
|
@ -22,6 +22,7 @@
|
|||
[ext_resource type="Script" path="res://ui/SkillTreeView.gd" id="21"]
|
||||
[ext_resource type="Script" path="res://ui/WaveAlert.gd" id="32"]
|
||||
[ext_resource type="Script" path="res://ui/GarrisonPanel.gd" id="33"]
|
||||
[ext_resource type="Script" path="res://vessels/GarrisonField.gd" id="34"]
|
||||
[ext_resource type="Script" path="res://logistics/TransporterField.gd" id="23"]
|
||||
[ext_resource type="Script" path="res://ui/ResourceBar.gd" id="24"]
|
||||
[ext_resource type="Script" path="res://logistics/VesselDeliveryField.gd" id="26"]
|
||||
|
|
@ -90,6 +91,9 @@ script = ExtResource("11")
|
|||
[node name="BuildingField" type="Node2D" parent="."]
|
||||
script = ExtResource("14")
|
||||
|
||||
[node name="GarrisonField" type="Node2D" parent="."]
|
||||
script = ExtResource("34")
|
||||
|
||||
[node name="TransporterField" type="Node2D" parent="."]
|
||||
script = ExtResource("23")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue