Core.Object | +--Engine.Actor | +--RuneI.Accelerator | +--RuneI.Confinement
name
ConfinerTag[4]
Actor
Confiner[4]
float
MaxVelocityPickup
void
Bump(Actor Other)
ConfinementTick(float DeltaSeconds)
PreBeginPlay()
Tick(float DeltaTime)
00001 //============================================================================= 00002 // Confinement. 00003 //============================================================================= 00004 class Confinement extends Accelerator 00005 native; 00006 00007 // Confinement actors try to stay in the geometric center of a specified group 00008 // of actors. 00009 00010 var() float MaxVelocityPickup; // Maximum velocity transfer allowed from collision 00011 var() name ConfinerTag[4]; 00012 var actor Confiner[4]; 00013 00014 const MaxConfiners = 4; 00015 00016 native(651) final function ConfinementTick(float DeltaSeconds); 00017 00018 function PreBeginPlay() 00019 { 00020 local actor A; 00021 local int i; 00022 00023 for (i=0; i<MaxConfiners; i++) 00024 { 00025 if (ConfinerTag[i] != '') 00026 foreach AllActors(class'actor', A, ConfinerTag[i]) 00027 Confiner[i] = A; 00028 } 00029 } 00030 00031 function Bump(actor Other) 00032 { 00033 // local vector transfer; 00034 local int i; 00035 00036 if (Other.IsA('Pawn')) 00037 { // Propogate velocity on to my confiners 00038 /* 00039 transfer = Normal(Other.Velocity) * Min(VSize(Other.Velocity), MaxVelocityPickup); 00040 for (i=0; i<MaxConfiners; i++) 00041 if (Confiner[i] != None) 00042 Confiner[i].Velocity += transfer; 00043 */ 00044 for (i=0; i<MaxConfiners; i++) 00045 if (Confiner[i] != None) 00046 Confiner[i].Touch(Other); 00047 } 00048 } 00049 00050 00051 function Tick(float DeltaTime) 00052 { 00053 /* 00054 local vector accum; 00055 local int i,numConfiners; 00056 00057 // Move to average location of confiners 00058 accum = vect(0,0,0); 00059 numConfiners = 0; 00060 for (i=0; i<MaxConfiners; i++) 00061 { 00062 if (Confiner[i] != None) 00063 { 00064 accum += Confiner[i].Location; 00065 numConfiners++; 00066 } 00067 } 00068 Move((accum / numConfiners) - Location); 00069 00070 // Calculate Rotation (if necessary) 00071 */ 00072 ConfinementTick(DeltaTime); 00073 } 00074 00075 defaultproperties 00076 { 00077 MaxVelocityPickup=100.000000 00078 Physics=PHYS_Projectile 00079 DrawType=DT_Mesh 00080 CollisionRadius=20.000000 00081 CollisionHeight=5.000000 00082 bBlockActors=True 00083 bBlockPlayers=True 00084 }