home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Game Level Design
/
GLDesign.bin
/
Software
/
UnrealEngine2Runtime
/
UE2Runtime-22262001_Demo.exe
/
Gameplay
/
Classes
/
ScriptedSequence.uc
< prev
next >
Wrap
Text File
|
2003-12-11
|
3KB
|
115 lines
//=============================================================================
// ScriptedSequence
// used for setting up scripted sequences for pawns.
// A ScriptedController is spawned to carry out the scripted sequence.
//=============================================================================
class ScriptedSequence extends AIScript;
var(AIScript) export editinline Array<ScriptedAction> Actions;
var class<ScriptedController> ScriptControllerClass;
/* SpawnController()
Spawn and initialize an AI Controller (called by a non-player controlled Pawn at level startup)
*/
function SpawnControllerFor(Pawn P)
{
Super.SpawnControllerFor(P);
TakeOver(P);
}
/* TakeOver()
Spawn a scripted controller, which temporarily takes over the actions of the pawn,
unless pawn is currently controlled by a scripted controller - then just change its script
*/
function TakeOver(Pawn P)
{
local ScriptedController S;
if ( ScriptedController(P.Controller) != None )
S = ScriptedController(P.Controller);
else
{
S = spawn(ScriptControllerClass);
S.PendingController = P.Controller;
if ( S.PendingController != None )
S.PendingController.PendingStasis();
}
S.MyScript = self;
S.TakeControlOf(P);
S.SetNewScript(self);
}
//*****************************************************************************************
// Script Changes
function bool ValidAction(Int N)
{
return true;
}
function SetActions(ScriptedController C)
{
local ScriptedSequence NewScript;
local bool bDone;
if ( C.CurrentAnimation != None )
C.CurrentAnimation.SetCurrentAnimationFor(C);
while ( !bDone )
{
if ( C.ActionNum < Actions.Length )
{
if ( ValidAction(C.ActionNum) )
NewScript = Actions[C.ActionNum].GetScript(self);
else
{
NewScript = None;
warn(GetItemName(string(self))$" action "$C.ActionNum@Actions[C.ActionNum].GetActionString()$" NOT VALID!!!");
}
}
else
NewScript = None;
if ( NewScript == None )
{
C.CurrentAction = None;
return;
}
if ( NewScript != self )
{
C.SetNewScript(NewScript);
return;
}
if ( Actions[C.ActionNum] == None )
{
Warn(self$" no action "$C.ActionNum$"!!!");
C.CurrentAction = None;
return;
}
bDone = Actions[C.ActionNum].InitActionFor(C);
if ( bLoggingEnabled )
log(GetItemName(string(C.Pawn))$" script "$GetItemName(string(tag))$" action "$C.ActionNum@Actions[C.ActionNum].GetActionString());
if ( !bDone )
{
if ( Actions[C.ActionNum] == None )
{
Warn(self$" has no action "$C.ActionNum$"!!!");
C.CurrentAction = None;
return;
}
Actions[C.ActionNum].ProceedToNextAction(C);
}
}
}
defaultproperties
{
bStatic=true
ScriptControllerClass=class'Gameplay.ScriptedController'
bCollideWhenPlacing=true
CollisionRadius=+00050.000000
CollisionHeight=+00100.000000
bDirectional=true
bNavigate=true
bLoggingEnabled=false
}