Always snap to grid
Difference between revisions of "Legacy:VitalOverdose/RandomRelocator"
From Unreal Wiki, The Unreal Engine Documentation Site
(→Download and Embed) |
|||
Line 80: | Line 80: | ||
} | } | ||
</uscript> | </uscript> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Related Topics== | ==Related Topics== |
Latest revision as of 05:26, 14 September 2011
by VitalOverdose;
Contents
Overview[edit]
- Unlike the normal teleporter system the RandomRelocator only needs one teleporter actor to work.
- The player [Pawn | pawn] can be teleported to the position of any pathnode(usually but you can use any actor as a teleport exit point as long as it has a tag name matching a name specified in the random relocator properties in this class by the mapper.
- If more than one pathnode has the same tag name 'TelPointName' the RandomRelocator will pick one at random. This can really help to make very linear flowing maps to be less predictable.
- The Pathnodes are scanned at the start of gameplay to get their locations but they also get re-scanned every 'ScanRate' seconds. If any actor with a matching tag name moves then the new location will be recored. This way you can have moving teleport exit points as teleport points don't have to be pathnodes, any actor will do.
Note:[edit]
This actor is invisible during gametime so depending on how you want to use this actor it might be a good idea to have some sort of emitter or Static mesh as an indicator to let people know where it is.
TheScript[edit]
//============================================================================= // RandomRelocator By vitaloverdose, Feb 2006, http://www.Vitaloverdose.com // Full class list http://wiki.beyondunreal.com/wiki/Vital's_Pro_Mapping_Tools //============================================================================= class RandomRelocator Extends triggers Placeable; Var Array <Actor> TpAct; // a dynamic array to hold the vector locations of all the possible teleport exit points. Var () Bool BPlaySpawnEffect; Var () Float ScanRate; Var () name TelPointName; Function PostBeginPlay() { If ((ScanRate<0.1) && (ScanRate>0)) // enforces min and max defaults for the scanrate { Destroy(); log("reScanTime must be > 0.1 not "$ScanRate); } ScanTpAct(); // scans for pathnodes with tags that match TelPointName; SetTimer(ReScanTime,True); // Super.PostBeginPlay() } Function Timer() { ScanTpAct(); } simulated Function Touch( Actor Other ) { local int pickedTport; if (tpact.length > 1) pickedTport = rand(tpact.length-1)+1; // picks a random number based on the amount of tp locationes being stored in the dynamic array if ((other.isa('Pawn')) && (!other.isa('vehicle'))) TPort( tpact[pickedTport], pawn(other)); // qualifies the actor touching us Super.Touch(other); // adds any code from the parent function of the same name at this point } Simulated Function ScanTpAct() // scans for pathnodes that have tag names the same as TelPointName { // and stores thier vector locations in a dynamic array. Local Actor FoundTelPoint; If ( TpAct.Length > 0 ) TpAct.Remove( 0,TpAct.Length ); foreach AllActors( Class'Actor' , FoundTelPoint, TelPointName ) // an iterator looks though all { // actor classes in the map to find matching tag names TpAct.Insert( 0,1 ); TpAct[0] = FoundTelPoint; } } Simulated Function TPort( Actor TelPoint,Pawn TPPawn) // this function teleports the vehicle { TPPawn.SetLocation( TelPoint.Location); TPPawn.SetRotation( TelPoint.Rotation ); TPPawn.OldRotYaw = TPPawn.Rotation.Yaw; }