I don't need to test my programs. I have an error-correcting modem.
Legacy:YawTeleporter
From Unreal Wiki, The Unreal Engine Documentation Site
A special Teleporter that makes the player always change yaw (after exit from YawTeleporter) to face the direction of the directional arrow of the YawTeleporter.
Contents |
Code
To use this actor, subclass Teleporter with the following code. This class has been tested offline only. See Create A Subclass and Embedding Code for how to use this script.
//=============================================================================
// YawTeleporter. By Wormbo http://www.koehler-homepage.de/wormbo/
// Additional changes by AX000
// Makes actors always face the direction of the directional teleporter upon exit
//=============================================================================
class YawTeleporter extends Teleporter;
var UTTeleEffect T;
simulated function Destroyed()
{
if ( T != None )
T.Destroy();
Super.Destroyed();
}
simulated function PostBeginPlay()
{
LoopAnim('Teleport', 2.0, 0.0);
T = spawn(class'UTTeleeffect');
T.lifespan = 0.0;
}
// Accept an actor that has teleported in.
simulated function bool Accept( actor Incoming, Actor Source )
{
local rotator newRot, oldRot;
local pawn P;
// Move the actor here.
Disable('Touch');
//log("Move Actor here "$tag);
newRot = Incoming.Rotation;
if ( bChangesYaw ) {
oldRot = Incoming.Rotation;
newRot.Yaw = Rotation.Yaw;
}
if ( Pawn(Incoming) != None ) {
//tell enemies about teleport
if ( Role == ROLE_Authority ) {
P = Level.PawnList;
While ( P != None ) {
if ( P.Enemy == Incoming )
P.LastSeenPos = Incoming.Location;
P = P.nextPawn;
}
}
Pawn(Incoming).SetLocation(Location);
if ( Role == ROLE_Authority || Level.TimeSeconds - LastFired > 0.5 ) {
Pawn(Incoming).SetRotation(newRot);
Pawn(Incoming).ViewRotation = newRot;
LastFired = Level.TimeSeconds;
}
Pawn(Incoming).MoveTimer = -1.0;
Pawn(Incoming).MoveTarget = self;
PlayTeleportEffect( Incoming, false);
}
else {
if ( !Incoming.SetLocation(Location) ) {
Enable('Touch');
return false;
}
if ( bChangesYaw )
Incoming.SetRotation(newRot);
}
Enable('Touch');
if ( bChangesVelocity )
Incoming.Velocity = TargetVelocity;
else {
if ( bChangesYaw ) {
if ( Incoming.Physics == PHYS_Walking )
OldRot.Pitch = 0;
Incoming.Velocity = Incoming.Velocity << OldRot;
Incoming.Velocity = Incoming.Velocity >> NewRot;
(Incoming.Rotation);
}
if ( bReversesX )
Incoming.Velocity.X *= -1.0;
if ( bReversesY )
Incoming.Velocity.Y *= -1.0;
if ( bReversesZ )
Incoming.Velocity.Z *= -1.0;
}
// Play teleport-in effect.
return true;
}
Credits
Made by Wormbo.
Visible texture effect added by AX000.
History / Discussion
AX000: I wanted a teleporter that made the player always face the direction of the direction arrow when the player exited the teleporter. I asked Wormbo to make this.
Wormbo: I only changed the Teleporter script. I didn't compile or even test it, but I've heard of problems in network games. Whoever can solve these gets a cookie. :)
Mychaeel: What kind of network problems? (By the way, Teleporter is bStatic, so the visible animation of YawTeleporter probably doesn't play. Set bStatic=False and bNoDelete=True.)
Wormbo: As far as I've heard it the player's rotation isn't set correctly, but only in network games. I don't know if this occurs only on the clients or also on the server. Like I mentioned before: I never ha a compiled version of this teleporter.
Dante: Uhm, as far as it seems,
simulated function bool Accept( actor Incoming, Actor Source ) {
return super.Accept( Incoming, None );
}
does the same, or did I miss some hidden stuff ;) ?
Wormbo: Sounds good. I'll have someone test it. :)
Wormbo: This was the last fix for this script. Have a look at DelayedTeleporter for a more flexible teleporter class.
Unfallzeuge Wormbo's script doesn't work with the newer build :( but the 2 lines code by Dante make a damn fine job if you need a teleporter with this characteristics
Fyfe: Dante's fix works for both UT and UT200*, it's the spawn effect part that only works in UT, UT200* already spawns an effect. The above code should refact to:
For UT:
//=============================================================================
// YawTeleporter. By Wormbo http://www.koehler-homepage.de/wormbo/
// Additional changes by AX000
// Makes actors always face the direction of the directional teleporter upon exit
//=============================================================================
class YawTeleporter extends Teleporter;
var UTTeleEffect T;
simulated function Destroyed()
{
if ( T != None )
T.Destroy();
Super.Destroyed();
}
simulated function PostBeginPlay()
{
LoopAnim('Teleport', 2.0, 0.0);
T = spawn(class'UTTeleeffect');
T.lifespan = 0.0;
}
// Accept an actor that has teleported in.
simulated function bool Accept( actor Incoming, Actor Source )
{
return Super.Accept( Incoming, None );
}
DefaultProperties
{
bStatic=False
bNoDelete=True
}
For UT200*:
//=============================================================================
// YawTeleporter. By Wormbo http://www.koehler-homepage.de/wormbo/
// Additional changes by AX000
// Makes actors always face the direction of the directional teleporter upon exit
//=============================================================================
class YawTeleporter extends Teleporter;
// Accept an actor that has teleported in.
simulated function bool Accept( actor Incoming, Actor Source )
{
return Super.Accept( Incoming, None );
}
DefaultProperties
{
bNoDelete=True
bStatic=False
}
Unless there are any objections, I'll drop this in place of the above. Unless someone sees the need for a seperate page for UT and UT200*
Category:Legacy Custom Class (UT)
Category:Legacy Class (UT)
Category:Legacy Refactor Me – possibly rename to YawTeleporter (UT) and use the Dante's tip to create YawTeleporter for UT2003
