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:
@@ -0,0 +1,55 @@
|
||||
modded class ERR_CivilianTraffic
|
||||
{
|
||||
protected ref array<ref ERR_CivilianCar> m_ProbeCars = {};
|
||||
void ProbeSpawn()
|
||||
{
|
||||
for (int index = 0; index < 3; index++)
|
||||
{
|
||||
ERR_CivilianCar traffic = new ERR_CivilianCar(); traffic.Number = index;
|
||||
vector position, angles;
|
||||
if (!ERR_SupplyConvoySystem.ApproachDirected(Vector(6500 + index * 400, 0, 3600), position, angles, 500)) { Print("ERR CIVILIAN NATIVE: no road"); continue; }
|
||||
traffic.Car = Vehicle.Cast(ERR_Actors.Spawn(CarPrefab(index), position, angles));
|
||||
traffic.Group = SCR_AIGroup.Cast(ERR_Actors.Spawn(ERR_ConvoyResources.GroupPrefab(), position));
|
||||
Faction civilian = GetGame().GetFactionManager().GetFactionByKey("CIV");
|
||||
traffic.Group.SetFaction(civilian); traffic.Group.SetDeleteWhenEmpty(false); ERR_Actors.SetFaction(traffic.Car, civilian);
|
||||
array<BaseCompartmentSlot> seats = {}; ERR_ConvoyRules.CollectSeats(traffic.Car, seats);
|
||||
foreach (BaseCompartmentSlot seat : seats) if (seat.GetType() == ECompartmentType.PILOT) { traffic.Seat = seat; break; }
|
||||
traffic.Group.SetPermanentLOD(AIAgent.GetMaxLOD()); traffic.Group.DeactivateAI();
|
||||
AIGroup group = traffic.Group;
|
||||
if (index == 0) traffic.Driver = traffic.Seat.SpawnCharacterInCompartment(DriverPrefab(), group, ERR_ConvoyResources.GroupPrefab());
|
||||
else { traffic.Driver = ERR_Actors.Spawn(DriverPrefab(), position + "2 0 0"); traffic.Group.AddAIEntityToGroup(traffic.Driver); }
|
||||
ERR_Actors.SetFaction(traffic.Driver, civilian);
|
||||
AIControlComponent control = AIControlComponent.Cast(traffic.Driver.FindComponent(AIControlComponent));
|
||||
AIAgent agent = control.GetControlAIAgent(); agent.SetPermanentLOD(AIAgent.GetMaxLOD()); agent.DeactivateAI();
|
||||
vector middle, destination, unused;
|
||||
ERR_SupplyConvoySystem.ApproachDirected(position + "250 0 250", middle, unused, 500);
|
||||
ERR_SupplyConvoySystem.ApproachDirected(position + "500 0 500", destination, unused, 500);
|
||||
traffic.Route = {position, middle, destination};
|
||||
m_ProbeCars.Insert(traffic);
|
||||
}
|
||||
GetGame().GetCallqueue().CallLater(ProbePrepare, 5000, true);
|
||||
}
|
||||
void ProbePrepare()
|
||||
{
|
||||
foreach (ERR_CivilianCar traffic : m_ProbeCars)
|
||||
{
|
||||
bool ready = traffic.Ready; if (!ready) ready = Prepare(traffic);
|
||||
PrintFormat("ERR CIVILIAN NATIVE: car=%1 ready=%2 fit=%3 seated=%4 agents=%5 own=%6 position=%7", traffic.Number, ready, ERR_Actors.CanFight(traffic.Driver), traffic.Seat.GetOccupant() == traffic.Driver, traffic.Group.GetAgentsCount(), ERR_Actors.Group(traffic.Driver) == traffic.Group, traffic.Car.GetOrigin());
|
||||
}
|
||||
}
|
||||
}
|
||||
modded class ArmaReforgerScripted
|
||||
{
|
||||
protected ref ERR_CivilianTraffic m_ERRCivProbe;
|
||||
protected float m_ERRCivProbeAge;
|
||||
protected bool m_ERRCivProbeDone;
|
||||
override void OnUpdate(BaseWorld world, float timeslice)
|
||||
{
|
||||
super.OnUpdate(world, timeslice);
|
||||
if (!ERR_GameMode.Get() || !ERR_GameMode.Get().EnemyFaction()) return;
|
||||
m_ERRCivProbeAge += timeslice;
|
||||
if (m_ERRCivProbeAge > 60 && !m_ERRCivProbeDone) { m_ERRCivProbeDone = true; Print("ERR CIVILIAN COMPLETE"); }
|
||||
if (m_ERRCivProbe || m_ERRCivProbeAge < 4) return;
|
||||
m_ERRCivProbe = new ERR_CivilianTraffic(ERR_GameMode.Get()); m_ERRCivProbe.ProbeSpawn();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user