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:
@@ -8,10 +8,11 @@ s=s.replace('SCR_AIVehicleUsageComponent.Cast(unit.Entity.FindComponent(SCR_AIVe
|
||||
s=s.replace('array<AIAgent>','Array<AIAgent*>')
|
||||
for cls in ['ERR_ConvoyTask','ERR_ConvoyVehicle','AIAgent','SCR_AIGroupUtilityComponent','SCR_AIVehicleUsageComponent','ERR_ForceRecord','ERR_HQ']:
|
||||
s=re.sub(r'\b'+cls+r' ([A-Za-z_]\w*)',cls+r'* \1',s)
|
||||
for obj in ['task','unit','agent','utility','m_Mode','m_Pool','record','hq','active']:
|
||||
for obj in ['task','unit','agent','utility','m_Mode','m_Pool','record','hq','active','observed']:
|
||||
s=re.sub(r'\b'+obj+r'\.',obj+'->',s)
|
||||
s=s.replace('unit->Index.ToString()','std::to_string(unit->Index)').replace('Group.','Group->').replace('Entity.','Entity->').replace('Receipt.','Receipt->').replace('m_VehicleMgr.','m_VehicleMgr->').replace('Forces().','Forces()->')
|
||||
s=s.replace('null','nullptr')
|
||||
s=s.replace('ERR_HQ.Event','ERR_HQ::Event')
|
||||
s=s.replace('ERR_Actors.','ERR_Actors::').replace('ERR_ForceKind.','ERR_ForceKind::').replace('foreach (','for (')
|
||||
run(r'''
|
||||
#include <cassert>
|
||||
@@ -33,7 +34,7 @@ struct ERR_ConvoyTask{ERR_ConvoyReceipt* Receipt;Array<ERR_ConvoyVehicle*>Vehicl
|
||||
enum class ERR_ForceKind{CONVOY};
|
||||
struct ERR_ForceRecord{bool Pinned=false;};
|
||||
struct Ledger{int calls=0;bool fail=false;Array<Group*>registered;ERR_ForceRecord record;ERR_ForceRecord* Register(string,ERR_ForceKind,int,int,void*,Group* group,float){calls++;if(fail)return nullptr;registered.Insert(group);return &record;}};
|
||||
struct ERR_HQ{int reservations=0;void ReserveGroup(Group*){reservations++;}};
|
||||
struct ERR_HQ{int reservations=0,vehicleBinds=0;bool bindOK=true;void ReserveGroup(Group*){reservations++;}bool BindVehicle(Group*,Vehicle*){vehicleBinds++;return bindOK;}static void Event(string,string){}};
|
||||
struct Mode{Ledger ledger;ERR_HQ hq;int published=0;Ledger* Forces(){return &ledger;}ERR_HQ* Command(){return &hq;}void RegisterGroup(Group*group){assert(ledger.registered.Contains(group));published++;}};
|
||||
struct Pool{int binds=0;bool fail=false;bool BindRecord(ERR_ConvoyReceipt*,int,ERR_ForceRecord*){binds++;return !fail;}};
|
||||
namespace ERR_Actors{bool CanFight(IEntity*a){return a&&a->alive;}}
|
||||
@@ -44,9 +45,9 @@ int main(){
|
||||
Mode mode;Pool pool;Service service{&mode,&pool};ERR_ConvoyReceipt receipt;ERR_ConvoyTask task;task.Receipt=&receipt;
|
||||
ERR_ConvoyVehicle units[6];Group groups[6];Vehicle vehicles[6];IEntity bodies[6];AIAgent agents[6];
|
||||
for(int i=0;i<6;i++){units[i].Index=i;units[i].Group=&groups[i];units[i].Entity=&vehicles[i];units[i].Members.Insert(&bodies[i]);agents[i].actor=&bodies[i];groups[i].agents.Insert(&agents[i]);task.Vehicles.Insert(&units[i]);}
|
||||
units[2].valid=false;assert(!service.Admit(&task,100));assert(mode.published==2&&pool.binds==2&&mode.ledger.calls==2&&service.inspections==6);
|
||||
units[2].valid=true;assert(service.Admit(&task,200));assert(mode.published==6&&pool.binds==6&&mode.ledger.calls==6&&mode.hq.reservations==6);
|
||||
assert(service.Admit(&task,300));assert(mode.published==6&&pool.binds==6&&mode.ledger.calls==6);for(auto&g:groups){assert(g.manager.calls==2&&g.utility.additions==1);}
|
||||
units[3].valid=false;assert(!service.Admit(&task,100));assert(mode.published==2&&pool.binds==2&&mode.ledger.calls==2&&service.inspections==5);
|
||||
mode.hq.bindOK=false;units[3].valid=true;assert(service.Admit(&task,200));assert(mode.published==5&&pool.binds==5&&mode.ledger.calls==5&&mode.hq.reservations==5&&mode.hq.vehicleBinds==5);
|
||||
assert(service.Admit(&task,300));assert(mode.hq.vehicleBinds==5);assert(mode.published==5&&pool.binds==5&&mode.ledger.calls==5);assert(!units[2].Registered);for(int i=0;i<6;i++){assert(groups[i].manager.calls==(i==2?0:2)&&groups[i].utility.additions==(i==2?0:1));}
|
||||
Mode duplicate;Pool other;Service check{&duplicate,&other};ERR_ConvoyTask invalid;invalid.Receipt=&receipt;ERR_ConvoyVehicle wrong=units[0];wrong.Registered=false;wrong.Group=&groups[0];IEntity stranger;AIAgent extra{&stranger};groups[0].agents[0]=&extra;invalid.Vehicles.Insert(&wrong);assert(!check.Admit(&invalid,400)&&duplicate.ledger.calls==0);
|
||||
groups[0].agents[0]=&agents[0];other.fail=true;assert(!check.Admit(&invalid,400)&&invalid.stopped&&!wrong.Registered&&duplicate.published==0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user