Integrate finite infantry resupply with delivered low-ammunition reports
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
"""Actual Intel/HQ methods and readiness handoff; native expansion is an adapter."""
|
||||
import re
|
||||
import re,os
|
||||
from pathlib import Path
|
||||
from policy_harness import ROOT, body, run
|
||||
intel=ROOT/'addons/intel/Scripts/Game/ERR/ERR_IntelService.c'
|
||||
hq=ROOT/'addons/ai/Scripts/Game/ERR/ERR_HQ.c'
|
||||
hq=Path(os.environ.get('ERR_HQ_SOURCE',ROOT/'addons/ai/Scripts/Game/ERR/ERR_HQ.c'))
|
||||
ready=ROOT/'addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c'
|
||||
system=ROOT/'addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c'
|
||||
def adapt(s):
|
||||
@@ -82,7 +83,8 @@ struct GroupService{int registrations=0;Set<SCR_AIGroup> seen;Array<int> ids;Arr
|
||||
void RegisterGroup(SCR_AIGroup g,int radioId=0,bool fitRadios=true){ids.Insert(radioId);fits.Insert(fitRadios);if(!seen.Contains(g)){seen.Insert(g);registrations++;}}};
|
||||
struct Mortars{SCR_AIGroup owned=nullptr;bool FindGroup(SCR_AIGroup group){return group&&group==owned;}};
|
||||
struct BodyService:GroupService{void RegisterGroup(SCR_AIGroup g,Sampler& s){assert(s.Bound()&&s.group==g);GroupService::RegisterGroup(g);}};
|
||||
struct Unit{string HomeId,ForceSourceId;bool HomeGuard=false;float NextStatus=0;Sampler StatusSampler;int Id=0;SCR_AIGroup Group=nullptr;struct Utility* Utility=nullptr;float NextReport=0;};using ERR_HQUnit=Unit*;
|
||||
struct Reporting{int initializations=0;void Initialize(int id,float now){assert(id>0&&now==10);initializations++;}};
|
||||
struct Unit{Reporting AmmoReporting;string HomeId,ForceSourceId;bool HomeGuard=false;float NextStatus=0;Sampler StatusSampler;int Id=0;SCR_AIGroup Group=nullptr;struct Utility* Utility=nullptr;float NextReport=0;};using ERR_HQUnit=Unit*;
|
||||
struct HQ{Mode* m_Mode;GroupService m_Equipment;BodyService m_Bodies;int m_NextId=0;Array<ERR_HQUnit> m_Units;Mortars* m_Mortars=nullptr;
|
||||
'''+hqbind+hqregister+r'''
|
||||
};
|
||||
@@ -112,6 +114,7 @@ int main(){
|
||||
for(int n=0;n<5;n++){assert(ready.Finish(&mode,&group)==1);intel.RegisterGroup(&group);hq.RegisterGroup(&group);}
|
||||
assert(mode.publications==1&&Math::rolls==4&&hq.m_Units.Count()==1);
|
||||
assert(hq.m_Units[0]->StatusSampler.bindings==1&&hq.m_Equipment.registrations==1&&hq.m_Bodies.registrations==1);
|
||||
assert(hq.m_Units[0]->AmmoReporting.initializations==1);
|
||||
assert(hq.m_Equipment.ids.Count()==1&&hq.m_Equipment.ids[0]==1&&!hq.m_Equipment.fits[0]);
|
||||
intel.Tick(1);for(Actor& a:actors)assert(a.inventory.requests==1);
|
||||
for(int n=0;n<5;n++){intel.Tick(2+n);}for(Actor& a:actors)assert(a.inventory.requests==1); // accepted asynchronous spawn never reissued
|
||||
|
||||
Reference in New Issue
Block a user