I don't need to test my programs. I have an error-correcting modem.
Legacy:SabbathCat/Trampoline
From Unreal Wiki, The Unreal Engine Documentation Site
(Package: Custom - WIP)
This is a UT actor.
//=============================================================================
// Trampoline
// Bots hitting this will bounce 3* the Z falling speed upwards.
//=============================================================================
class Trampoline extends Trigger;
var vector KickVelocity;
var() bool bShowMe;
var float KickZMultiply;
var() name KickedClasses;
var() sound KickMeSound;
var() bool bMakeNoise;
var() bool bRestrictVelocity;
var() float MaxVelocity;
var() float ExtraKick;
function PostBeginPlay()
{
Super.PostBeginPlay();
if (!bShowMe )
{
DrawType = DT_None;
bHidden = True;
}
}
simulated function Touch( actor Other )
{
local Actor A;
if ( !Other.IsA(KickedClasses) )
return;
PendingTouch = Other.PendingTouch;
Other.PendingTouch = self;
if( Event != '' )
foreach AllActors( class 'Actor', A, Event )
A.Trigger( Other, Other.Instigator );
}
simulated function PostTouch( actor Other )
{
local bool bWasFalling;
local vector Push;
local float PitchMeBounce;
local actor a;
local float GravityThird;
local vector MyOldGravity;
bWasFalling = ( Other.Physics == PHYS_Falling );
if ( Other.IsA('Bot') )
{
if ( bWasFalling )
{
Bot(Other).bJumpOffPawn = True;
Bot(Other).bTacticalDir = True;
Bot(Other).bJumpy = True;
Bot(Other).SetFall();
}
}
Other.SetPhysics(PHYS_Falling);
GravityThird = Abs(Region.Zone.ZoneGravity.Z/3);
If ( bRestrictVelocity)
{
Log(" ");
Log("*********>> EXTRA KICK = TRUE ******<<");
Log(" ");
Push.Z = ((Abs(Other.Velocity.Z))*2)+ExtraKick;
}
Else If ( !bRestrictVelocity)
{
Log(" ");
Log("*********>> EXTRA KICK = FALSE ******<<");
Log(" ");
Push.Z = ((Abs(Other.Velocity.Z))*2.25)+10;
}
If ( Push.Z <= 0 )
{
Push.Z = -Push.Z;
Log(" Push.Z = -Push.Z");
}
Else if ( Push.Z <= (GravityThird+ExtraKick) )
{
Push.Z = (GravityThird+ExtraKick)+128;
Log(" Push.Z = (GravityThird+ExtraKick)+128");
}
MyOldGravity=Other.Velocity;
MyOldGravity+= Push;
If ( MyOldGravity.Z <0 )
{
MyOldGravity.Z = -MyOldGravity.Z;
}
If ( bRestrictVelocity && MyOldGravity.Z > MaxVelocity )
{
MyOldGravity.Z=MaxVelocity;
Log(" ");
Log("MaxVelocity : "$MaxVelocity);
Log("MyOldGravity : "$MyOldGravity);
Log(" ");
}
Other.Velocity = MyOldGravity;
Log(" MyOldGravity "$MyOldGravity$" << ");
PlaySound (KickMeSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25);
MakeNoise(238);
}
defaultproperties
{
KickedClasses=Pawn
RemoteRole=ROLE_SimulatedProxy
bDirectional=True
KickMeSound=Sound'AmbModern.OneShot.cscanE2'
bMakeNoise=True
bHidden=False
DrawScale=1.500000
DrawType=DT_Mesh
Mesh=LodMesh'Botpack.FastSprocket'
bCollideWhenPlacing=True
CollisionRadius=64.00000
CollisionHeight=16.00000
MultiSkins(0)=Texture'Botpack.Skins.Jlightcone11'
MultiSkins(1)=Texture'Botpack.Skins.Jlightcone11'
MultiSkins(2)=Texture'Botpack.Skins.Jlightcone11'
bShowMe=True
bEdShouldSnap=True
bStatic=False
bNoDelete=False
bRestrictVelocity=False
MaxVelocity=2500
ExtraKick=256
}
The Trampoline will increase the players Z velocity each time it is hit, up until the point where the bot/player achives the speed determined by the MaxVelocity default property.
Using the Trampoline
Place somewhere with plenty of headroom, perhaps at the botom of a well, with a useful pick-up. Who knows? :)
- Pathing Kickers has more on using kickers
Properties
These are the properties and their default values:
- KickMeSound = Sound
- Is the Sound made when the Trampoline is triggered.
