Legacy:YawTeleporter - Unreal Wiki

# Legacy:YawTeleporter

### From Unreal Wiki, The Unreal Engine Documentation Site

UT :: Actor (UT) >> NavigationPoint (UT) >> Teleporter >> YawTeleporter (Custom)

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.

## 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

Categories: Legacy Custom Class (UT) | Legacy Class (UT) | Legacy Refactor Me

##### Views

- Legacy
- Discussion
- Current revision

##### Search