Capture current mission, AI, map and administration development

Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
2026-10-13 22:52:53 +02:00
parent a951a96edc
commit 6a667d8deb
8104 changed files with 2124945 additions and 2061 deletions
+22 -3
View File
@@ -16,9 +16,10 @@ def trans(s):
s=s.replace(c+'.',c+'::')
for c in ['known','report','source','history','unit','route']:
s=re.sub(r'\b'+c+r'\.',c+'->',s)
s=s.replace('m_Sound.', 'm_Sound->').replace('m_Visual[i].','m_Visual[i]->')
s=s.replace('m_Alarm.', 'm_Alarm->').replace('m_Sound.', 'm_Sound->').replace('m_Visual[i].','m_Visual[i]->')
s=s.replace('unit->LocalAwareness.','unit->LocalAwareness->').replace('unit->SentObservations.','unit->SentObservations->')
s=s.replace('m_Mode.Settings().Runtime','m_Mode.Settings().Runtime')
s=s.replace('ERR_HQReport* m_Alarm;', 'ERR_HQReport* m_Alarm=nullptr;').replace('float m_NextAlarm;', 'float m_NextAlarm=0;')
s=s.replace('ERR_HQReport* m_Sound;', 'ERR_HQReport* m_Sound=nullptr;').replace('float m_NextSound;', 'float m_NextSound=0;')
return s.replace('unit->Task.', 'unit->Task->')
run(r'''
@@ -43,14 +44,14 @@ struct ERR_HQReport{IEntity Target=nullptr;SCR_AIGroup* Source=nullptr;vector Po
'''+trans(h)+trans(s)+r'''
struct ERR_HQRoute{int MessageId=0;string Payload;};
struct Task{float ArrivedAt=0;};
struct ERR_HQUnit{SCR_AIGroup* Group=nullptr;IEntity Radio=nullptr;ERR_HQLocalAwareness own;
struct ERR_HQUnit{bool ExecutionTurn=true;SCR_AIGroup* Group=nullptr;IEntity Radio=nullptr;ERR_HQLocalAwareness own;
ERR_HQLocalAwareness* LocalAwareness=&own;ERR_HQObservationHistory hist;ERR_HQObservationHistory* SentObservations=&hist;
ERR_HQRoute* Uplink=nullptr;ERR_HQReport* PendingReport=nullptr;struct Task* Task=nullptr;
float NextContact=0,NextReport=0,NextStatus=0;bool status=false;};
struct Settings{int Runtime(string){return 10;}};
struct Mode{struct Settings Settings(){return {};}};
struct Journal{int id=0;int Message(){return ++id;}void Write(string,string,int){}};
struct HQ{Mode m_Mode;Journal m_Journal;bool network=true,occupied=false;
struct HQ{bool m_Coordinated=false;void QueueExecution(ERR_HQUnit*,float){}Mode m_Mode;Journal m_Journal;bool network=true,occupied=false;
ERR_HQRoute* ObservationRoute(ERR_HQUnit*){return network?new ERR_HQRoute:nullptr;}
bool OriginOccupied(IEntity,ERR_HQUnit*){return occupied;}
void StatusReport(ERR_HQUnit* u,float now){if(!u->Uplink&&now>=u->NextStatus){u->Uplink=new ERR_HQRoute;u->status=true;u->NextStatus=now+180000;}}
@@ -72,6 +73,24 @@ int main(){
cache.Queued(sound,34000);cache.Hear(&group,Vector(800,0,0),35000,35000);
assert(!cache.Peek(63999,&history)&&cache.Peek(64000,&history));
cache.Clear();assert(!cache.Peek(64000,&history));
// Alarm retains its own slot and timestamp; it cannot replace gunfire/visual
// evidence or use multiple squad members to replay an already queued event.
cache.HearAlarm(&group,Vector(4,7,9),65000,65001);
auto alarm=cache.Peek(65001,&history);assert(alarm&&!alarm->Target&&alarm->TravelMode=="heard vehicle alarm");
assert(alarm->Position[0]==75&&alarm->Position[2]==75&&alarm->ObservedAt==65000);
cache.HearAlarm(&group,Vector(900,0,900),64000,65001);assert(cache.Peek(65001,&history)->Position[0]==75);
cache.Hear(&group,Vector(250,0,250),65001,65001);assert(cache.Peek(65001,&history)->TravelMode=="heard gunfire");
r.ObservedAt=65002;cache.Remember(&r,65002);assert(cache.Peek(65002,&history)->Target==&enemy);
auto visual=cache.Peek(65002,&history);cache.Queued(visual,65002);
auto gunfire=cache.Peek(65002,&history);assert(gunfire->TravelMode=="heard gunfire");cache.Queued(gunfire,65002);
assert(cache.Peek(65002,&history)->TravelMode=="heard vehicle alarm");cache.Queued(alarm,65002);
cache.HearAlarm(&group,Vector(4,7,9),65000,65003);assert(!cache.m_Alarm); // duplicate native receiver
cache.HearAlarm(&group,Vector(4,7,9),66000,66000);assert(!cache.Peek(95001,&history));
assert(cache.Peek(95002,&history)->ObservedAt==66000);
assert(!cache.Peek(96001,&history)); // receipt never renews observation age
cache.Clear();cache.HearAlarm(nullptr,Vector(0,0,0),1,1);cache.HearAlarm(&group,Vector(0,0,0),2,1);
cache.HearAlarm(&group,Vector(NAN,0,0),1,1);assert(!cache.Peek(1,&history));
cache.HearAlarm(&group,Vector(4,7,9),1,1);assert(cache.Peek(1,&history));cache.Clear();
Actor targets[40];for(int i=0;i<40;i++){r.Target=&targets[i];r.ObservedAt=70000+i;cache.Remember(&r,70000+i);}
assert(cache.m_Visual.Count()==16);cache.Clear();
HQ h;ERR_HQUnit u;u.Group=&group;r.Target=&enemy;r.ObservedAt=1000;