Fix shared flight trail replacement and safe follower rejoining
Publish replacement landing targets, bound orphaned trail waits, and plan safe connections from the follower position. Support shared-route regroup landings and preserve catch-up flights after the leader lands. Add geometry, lifecycle and group travel regressions.
This commit is contained in:
1 parent
768810a82d
commit
65e4abb0b9
11 files changed
+423
-24
No files matched your search
@@ -46,7 +46,7 @@ struct Record {
|
||||
struct {bool FollowingPlayer=false;ClientlessFlightState State=ClientlessFlightState::Flying;uint32 MapId=0;Position Landing{800,0,0},Target{800,0,0};float Travelled=0;uint32 Segments=0,Avoidances=0;std::string Detail;} Status;
|
||||
Position LastPosition,Start,Segment{25,0,60};Settings Settings;
|
||||
std::shared_ptr<int> Following;uint32 FormationDelay=0,TargetUpdated=0,Elapsed=0,SegmentElapsed=0,CheckTimer=0;
|
||||
bool Moving=true,Returning=false,ApproachingDeparture=false,ActionOwned=false,SegmentUnderOverhang=false;uint32 DetachedRecoveryCount=0;Position Departure;Memory Memory;std::shared_ptr<SharedTrail> Published;std::vector<Position> Breadcrumbs;
|
||||
bool Moving=true,Returning=false,ApproachingDeparture=false,ActionOwned=false,SegmentUnderOverhang=false;uint32 DetachedRecoveryCount=0;Position Departure;Memory Memory;std::shared_ptr<SharedTrail> Published=std::make_shared<SharedTrail>();std::vector<Position> Breadcrumbs;
|
||||
};
|
||||
enum class ClientlessTravelState {Moving,Arrived,Stuck};
|
||||
struct Travel {struct{ClientlessTravelState State=ClientlessTravelState::Moving;}status;auto GetStatus(uint32){return &status;}}travel;
|
||||
@@ -96,6 +96,14 @@ int main(){
|
||||
r.Elapsed=0;r.Departure=player;travel.status.State=ClientlessTravelState::Moving;
|
||||
mgr.Update(50);assert(mgr.begins==0&&mgr.failures==1);
|
||||
travel.status.State=ClientlessTravelState::Arrived;mgr.Update(50);assert(mgr.begins==1);
|
||||
// A new airborne generation must publish its verified landing immediately
|
||||
// and leave a replacement link for followers already holding the old trail.
|
||||
r.ApproachingDeparture=false;r.Status.State=ClientlessFlightState::Flying;
|
||||
r.Returning=false;r.Status.Segments=12;r.Status.Avoidances=12;r.DetachedRecoveryCount=0;
|
||||
player.fly=true;auto old=r.Published;r.Status.Landing={800,0,0};
|
||||
mgr.Update(50);assert(old->Aborted&&old->Replacement==r.Published);
|
||||
assert(r.Published->LandingReady&&r.Published->Landing.X==800);
|
||||
r.ApproachingDeparture=true;r.Status.State=ClientlessFlightState::Mounting;
|
||||
// A stale Arrived flag cannot permit mounting away from the selected spot.
|
||||
r.Departure.x=player.x+10;mgr.Update(50);assert(mgr.failures==2&&mgr.begins==1);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user