1
0
KF2-Dev-Scripts/GameFramework/Classes/SeqAct_GameCrowdPopulationManagerToggle.uc
2020-12-13 18:01:13 +03:00

162 lines
4.8 KiB
Ucode

/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*/
class SeqAct_GameCrowdPopulationManagerToggle extends SequenceAction
implements(GameCrowdSpawnerInterface)
native;
/** Percentage of max population to immediately spawn when the population manager is toggled on (without respecting visibility checks). Range is 0.0 to 1.0 */
var() float WarmupPopulationPct;
/** List of Archetypes of agents for pop manager to spawn when this is toggled on */
var() GameCrowd_ListOfAgents CrowdAgentList;
/** If true, clear old population manager archetype list rather than adding to it with this toggle action's CrowdAgentList. */
var() bool bClearOldArchetypes;
/** The maximum number of agents alive at one time. */
var() int MaxAgents;
/** How many agents per second will be spawned at the target actor(s). */
var() float SpawnRate;
/** Whether to enable the light environment on crowd members. */
var() bool bEnableCrowdLightEnvironment;
/** Whether agents from this spawner should cast shadows */
var() bool bCastShadows;
/** Lighting channels to put the agents in. */
var LightingChannelContainer AgentLightingChannel;
/** Max distance allowed for spawns */
var() float MaxSpawnDist;
/** Square of min distance allowed for in line of sight but out of view frustrum agent spawns */
var float MinBehindSpawnDist;
/** List of all GameCrowdDestinations that are PotentialSpawnPoints */
var array<GameCrowdDestination> PotentialSpawnPoints;
var bool bFillPotentialSpawnPoints;
/** Average time to "warm up" spawned agents before letting them sleep if not rendered */
var float AgentWarmupTime;
var() int NumAgentsToTickPerFrame;
/** If true, force obstacle checking for all agents from this spawner */
var() bool bForceObstacleChecking;
/** If true, force nav mesh navigation for all agents from this spawner */
var() bool bForceNavMeshPathing;
var bool bIndividualSpawner;
var array<GameCrowdAgent> LastSpawnedList;
cpptext
{
virtual void Activated();
UBOOL UpdateOp(FLOAT DeltaTime);
};
static event int GetObjClassVersion()
{
return Super.GetObjClassVersion() + 5;
}
event FillCrowdSpawnInfoItem( out CrowdSpawnInfoItem out_Item, GameCrowdPopulationManager PopMgr )
{
local int i;
// if wanted, clear out current list of agent archetypes
if( bClearOldArchetypes )
{
out_Item.AgentArchetypes.Length = 0;
}
if( CrowdAgentList != None )
{
// get new agent archetypes to use from kismet action
for( i = 0; i < CrowdAgentList.ListOfAgents.Length; i++ )
{
out_Item.AgentArchetypes[out_Item.AgentArchetypes.Length] = CrowdAgentList.ListOfAgents[i];
}
}
out_Item.MaxSpawnDist = MaxSpawnDist;
out_Item.MaxSpawnDistSq = out_Item.MaxSpawnDist * out_Item.MaxSpawnDist;
out_Item.MinBehindSpawnDist = FMin( MinBehindSpawnDist, out_Item.MaxSpawnDist * 0.0625 );
out_Item.MinBehindSpawnDistSq = out_Item.MinBehindSpawnDist * out_Item.MinBehindSpawnDist;
out_Item.AgentWarmupTime = AgentWarmupTime;
out_Item.bCastShadows = bCastShadows;
out_Item.bEnableCrowdLightEnvironment = bEnableCrowdLightEnvironment;
out_Item.SpawnRate = SpawnRate;
out_Item.SpawnNum = MaxAgents;
if( class'Engine'.static.IsSplitScreen() )
{
out_Item.SpawnNum = PopMgr.SplitScreenNumReduction * float(out_Item.SpawnNum);
}
out_Item.bForceObstacleChecking = bForceObstacleChecking;
out_Item.bForceNavMeshPathing = bForceNavMeshPathing;
out_Item.NumAgentsToTickPerFrame = NumAgentsToTickPerFrame;
out_Item.LastAgentTickedIndex = -1;
if( bFillPotentialSpawnPoints )
{
out_Item.PotentialSpawnPoints = PotentialSpawnPoints;
}
}
/**
* GameCrowdSpawnerInterface
*/
function float GetMaxSpawnDist()
{
return MaxSpawnDist;
}
function AgentDestroyed( GameCrowdAgent Agent )
{
local GameCrowdPopulationManager PopMgr;
PopMgr = GameCrowdPopulationManager(Agent.WorldInfo.PopulationManager);
if( PopMgr != None )
{
PopMgr.AgentDestroyed( Agent );
}
}
defaultproperties
{
bCallHandler=FALSE
bLatentExecution=TRUE
ObjName="Population Manager Toggle"
ObjCategory="Crowd"
InputLinks(0)=(LinkDesc="Start")
InputLinks(1)=(LinkDesc="Stop")
InputLinks(2)=(LinkDesc="Warmup")
InputLinks(3)=(LinkDesc="Kill Agents")
InputLinks(4)=(LinkDesc="Stop & Kill")
OutputLinks.Empty
OutputLinks(0)=(LinkDesc="Spawned")
VariableLinks.Empty
VariableLinks(0)=(LinkDesc="Spawned List",ExpectedType=class'SeqVar_ObjectList',bWriteable=TRUE,MaxVars=1,PropertyName=LastSpawnedList)
SpawnRate=50
MaxAgents=700
AgentWarmupTime=2.0
MaxSpawnDist=10000.0
MinBehindSpawnDist=5000.0
NumAgentsToTickPerFrame=10
bForceObstacleChecking=FALSE
bForceNavMeshPathing=TRUE
AgentLightingChannel=(Crowd=TRUE,bInitialized=TRUE)
}