Improve AI garrisons, player recovery and mission administration
This commit is contained in:
@@ -35,7 +35,7 @@ namespace Replication{bool server=true;bool IsServer(){return server;}}
|
||||
namespace SCR_Global{bool edit=false;bool IsEditMode(){return edit;}}
|
||||
struct SCR_AIGroupUtilityComponent{bool military=true;bool IsMilitary(){return military;}};
|
||||
struct SCR_AIGroup{SCR_AIGroupUtilityComponent utility;int players=0,faction=1;auto GetGroupUtilityComponent(){return &utility;}int GetPlayerCount(bool){return players;}int GetFaction(){return faction;}};
|
||||
struct IEntity{virtual ~IEntity(){}bool alive=true,player=false;SCR_AIGroup* group=nullptr;IEntity* vehicle=nullptr;};
|
||||
struct IEntity{virtual ~IEntity(){}bool alive=true,player=false,unconscious=false;SCR_AIGroup* group=nullptr;IEntity* vehicle=nullptr;};
|
||||
using Vehicle=IEntity;
|
||||
struct BaseCompartmentSlot{virtual ~BaseCompartmentSlot(){}IEntity* occupant=nullptr;IEntity* vehicle=nullptr;ECompartmentType type=ECompartmentType::TURRET;auto GetType(){return type;}auto GetOccupant(){return occupant;}auto GetVehicle(){return vehicle;}};
|
||||
struct TurretCompartmentSlot:BaseCompartmentSlot{};
|
||||
@@ -46,7 +46,7 @@ struct ERR_ConvoyVehicle{SCR_AIGroup* Group=nullptr;Vehicle* Entity=nullptr;bool
|
||||
struct ERR_ConvoyTask{bool Ready=true,Stopped=false;ERR_ConvoyReceipt* Receipt=nullptr;Array<ERR_ConvoyVehicle*> Vehicles;};
|
||||
struct ERR_HQ{ERR_ConvoyTask* task=nullptr;ERR_ConvoyTask* extra=nullptr;auto Convoys(){return this;}int Count(){return extra?2:1;}auto At(int index){return index==0?task:extra;}auto ConvoyTask(){return task;}};
|
||||
struct ERR_GameMode{static inline ERR_GameMode* current=nullptr;bool active=true;ERR_HQ* hq=nullptr;Ledger* ledger=nullptr;static auto Get(){return current;}bool Active(){return active;}int EnemyFaction(){return 1;}bool IsMissionEnemy(int f){return f==1;}auto Command(){return hq;}auto Forces(){return ledger;}};
|
||||
namespace ERR_Actors{bool CanFight(IEntity* a){return a->alive;}bool Alive(IEntity* a){return a->alive;}bool Player(IEntity* a){return a->player;}auto Group(IEntity* a){return a->group;}}
|
||||
namespace ERR_Actors{bool CanFight(IEntity* a){return a->alive&&!a->unconscious;}bool Alive(IEntity* a){return a->alive;}bool Player(IEntity* a){return a->player;}auto Group(IEntity* a){return a->group;}}
|
||||
namespace ERR_ConvoyRules{bool capture=false;bool Captured(Vehicle*,SCR_AIGroup* group){return capture||group->players>0;}bool PartOf(IEntity* a,IEntity* b){return a==b;}}
|
||||
namespace CompartmentAccessComponent{auto GetVehicleIn(IEntity* actor){return actor->vehicle;}}
|
||||
struct ERR_EnemyGunnerSkill{static ERR_ConvoyTask* TaskForGroup(ERR_HQ*,SCR_AIGroup*);static bool CapturedGroup(ERR_GameMode*,SCR_AIGroup*);static bool OriginalGunner(ERR_GameMode*,SCR_AIGroup*,IEntity*);static EAISkill Profile(EAISkill,bool);};
|
||||
@@ -60,6 +60,9 @@ int main(){
|
||||
ERR_ForceRecord record;Ledger ledger;ledger.record=&record;mode.ledger=&ledger;
|
||||
assert(ERR_EnemyGunnerSkill::OriginalGunner(&mode,&group,&actor));
|
||||
ERR_ConvoyTask empty;hq.task=∅hq.extra=&task;assert(ERR_EnemyGunnerSkill::OriginalGunner(&mode,&group,&actor));hq.task=&task;hq.extra=nullptr;
|
||||
actor.unconscious=true;
|
||||
assert(ERR_EnemyEquipmentRules::Owned(&mode,&group,&actor)&&!ERR_EnemyEquipmentRules::Eligible(&mode,&group,&actor));
|
||||
actor.unconscious=false;
|
||||
// Every native/canonical ownership fact independently matters.
|
||||
for(int i=0;i<25;i++){
|
||||
auto savedActor=actor;auto savedVehicle=vehicle;auto savedGroup=group;auto savedUnit=unit;auto savedTask=task;auto savedReceipt=receipt;auto savedRecord=record;auto savedSlot=slot;
|
||||
|
||||
Reference in New Issue
Block a user