//=============================================================================
// NPortalSpawn.
//=============================================================================
class NPortalSpawn expands NActors;
var() class<actor> SpawnClass;
var() EPhysics SpawnPhysics;
var() rotator SpawnRotation, SpawnDir;
var() vector SpawnVelocity;
var() name SpawnTag, PortalTag, SpawnEvent;
var() bool bSetPhysics, bSetVelocity, bSetVariables, bMultiplePortals;
var() string Variables[16], Values[16];
function Trigger(actor Other, pawn EventInstigator)
{
local NPortal NP;
local actor A;
local float Value;
foreach AllActors(class'NPortal', NP)
{
if(NP!=None && NP.bEnabled && NP.ThisPortalTag==PortalTag)
{
NP.Disable('Touch');
Value=abs(SpawnDir.Pitch/16384);
Value=Value*(NP.CollisionHeight+SpawnClass.Default.CollisionHeight)+(1-Value)*(NP.CollisionRadius+SpawnClass.Default.CollisionRadius);
A=Spawn(SpawnClass,,, NP.Location+vector(SpawnDir)*Value, SpawnRotation);
if(A!=None)
{
A.Tag=SpawnTag;
A.Event=SpawnEvent;
if(bSetVariables)
{
SetVariables(A);
}
NP.SetTimer(0.02, True);
if(bSetPhysics)
{
a.SetPhysics(SpawnPhysics);
}
if(bSetVelocity)
{
a.Velocity=SpawnVelocity;
}
}
NP.Enable('Touch');
if(!bMultiplePortals)
{
return;
}
}
}
}
function SetVariables(actor A)
{
local int i;
for(i=0; i<16; i++)
{
if(Variables[i]!="")
{
A.SetPropertyText(Variables[i], Values[i]);
}
}
}