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:
@@ -7,6 +7,8 @@ MODE=ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_GameMode.c'
|
||||
ACTORS=ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_Actors.c'
|
||||
|
||||
def cpp(s):
|
||||
# Test mission scheduling inside the existing performance wrapper.
|
||||
s=s.replace('ServerTickMeasured(', 'ServerTick(').replace('System.', 'System::').replace('ERR_PerfMetric.', 'ERR_PerfMetric::').replace('int perfStamp;', 'int perfStamp=0;')
|
||||
s=s.replace('ERR_HQ.Event','ERR_HQ::Event').replace('protected ','').replace('Replication.IsServer()','server').replace('Replication.BumpMe()','Bump()')
|
||||
s=s.replace('ERR_Phase.DEFEAT','5').replace('ERR_Phase.PRISON','1').replace('ERR_Phase.RADIO_SEARCH','2').replace('ERR_MissionRules.Terminal(m_Phase)','(m_Phase>=5)')
|
||||
s=s.replace('array<int> connected = {};','std::vector<int> connected;').replace('foreach (int id : connected)','for (int id : connected)')
|
||||
@@ -14,7 +16,7 @@ def cpp(s):
|
||||
s=s.replace('foreach (IEntity entity : m_OwnedEntities)','for (Entity* entity : m_OwnedEntities)')
|
||||
s=s.replace('SCR_AIGroup.Cast(entity)','(entity && entity->group)').replace('ERR_Actors.DeleteSpawned(entity)','Delete(entity)')
|
||||
s=s.replace('ERR_ObserverReason.NONE','0')
|
||||
for var in ('m_Extraction','m_RadioDefence','m_Recovery','m_Command','m_Roster','controller','GetWorld()','GetGame()','GetPlayerManager()','GetCallqueue()'):
|
||||
for var in ('m_Performance','m_Extraction','m_RadioDefence','m_Recovery','m_Command','m_CivilianTraffic','m_Roster','controller','GetWorld()','GetGame()','GetPlayerManager()','GetCallqueue()'):
|
||||
s=s.replace(var+'.',var+'->')
|
||||
for name in ('StartScenario','ServerTick','BindLocalObserver'):s=s.replace('Remove('+name+')','Remove("'+name+'")')
|
||||
return s
|
||||
@@ -24,6 +26,7 @@ run(r'''
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
template<class... T>void PrintFormat(std::string,T...){}
|
||||
bool server=true;int bumps=0;void Bump(){bumps++;}
|
||||
std::vector<std::string> events;
|
||||
struct World {float now=1234;float GetWorldTime(){return now;}}world;
|
||||
@@ -50,19 +53,24 @@ struct Retained : Command {
|
||||
void Stop() override {stops++;pending=false;events.push_back("stop");}
|
||||
};
|
||||
struct ForceBoundary {int clears=0;void Clear(){clears++;}};
|
||||
namespace System {int GetTickCount(){return 0;}}
|
||||
namespace ERR_PerfMetric {enum {MAINTENANCE,CIVILIANS,FORCES,OBSERVERS,HQ_TICK,LISTENERS};}
|
||||
struct Performance {int Mark(int,int stamp){return stamp;}void Stop(int){}};
|
||||
struct Mode {
|
||||
Performance* m_Performance=nullptr;
|
||||
int viewStops=0;void StopLocalViewDistance(){viewStops++;}
|
||||
ForceBoundary m_Forces,m_ForceAgents;
|
||||
int forceTicks=0;void TickForces(float){forceTicks++;}
|
||||
bool m_Stopped=false,m_NativeEndHandled=false,m_StartedPlayers=false;int m_Phase=2;
|
||||
float m_NoSurvivorsSince=-1;std::string m_EndReason;
|
||||
Work extraction{0,"extraction",{}},radio{0,"radio",{}},recovery{0,"recovery",{}};
|
||||
Work* m_Extraction=&extraction;Work* m_RadioDefence=&radio;Work* m_Recovery=&recovery;
|
||||
Command* m_Command=nullptr;Roster* m_Roster=&roster;
|
||||
Command* m_Command=nullptr;Work* m_CivilianTraffic=nullptr;Roster* m_Roster=&roster;
|
||||
Hook m_OnTick{0,{},"event"},m_OnStop{0,{},"onstop"};std::vector<Entity*> m_OwnedEntities;
|
||||
bool InitialAdmissionsExhausted(){return false;}
|
||||
World* GetWorld(){return &world;}bool RefreshRadioFeedback(){return false;}
|
||||
void Transition(int phase){m_Phase=phase;StopServices();}
|
||||
'''+cpp(body(MODE,'bool Active('))+cpp(body(MODE,'protected void ServerTick('))+cpp(body(MODE,'protected void StopServices('))+r'''
|
||||
'''+cpp(body(MODE,'bool Active('))+cpp(body(MODE,'protected void ServerTickMeasured('))+cpp(body(MODE,'protected void StopServices('))+r'''
|
||||
};
|
||||
void reset(){server=true;events.clear();world.now=1234;players.count=0;players.controller=Controller();queue.removed.clear();roster.survivor=true;deleted=0;}
|
||||
int main(){
|
||||
@@ -103,7 +111,7 @@ int main(){
|
||||
// Stop removes the existing callback before the command receives terminal Stop;
|
||||
// no maintenance drain loop or new scheduling has been introduced in Core.
|
||||
{reset();Mode m;Retained c;m.m_Command=&c;Entity group{true},other{false};m.m_OwnedEntities={&group,&other};
|
||||
m.StopServices();m.StopServices();m.ServerTick();assert(c.stops==1&&c.maintenance==0&&!c.pending&&deleted==1&&m.m_Forces.clears==1&&m.m_ForceAgents.clears==1&&m.forceTicks==0);
|
||||
m.StopServices();m.StopServices();m.ServerTick();assert(m.viewStops==1&&c.stops==1&&c.maintenance==0&&!c.pending&&deleted==1&&m.m_Forces.clears==1&&m.m_ForceAgents.clears==1&&m.forceTicks==0);
|
||||
assert((queue.removed==std::vector<std::string>{"StartScenario","ServerTick","BindLocalObserver"}));
|
||||
assert((events==std::vector<std::string>{"stop","onstop"}));}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user