User:Higor: Difference between revisions
No edit summary |
No edit summary |
||
Line 120: | Line 120: | ||
</uscript> | </uscript> | ||
CTF-OutworldHold using it | CTF-OutworldHold using it. | ||
The map limits aren't where they seem to be, can you guess where? | |||
[[File:Construction28.JPG]] | [[File:Construction28.JPG]] |
Latest revision as of 13:07, 4 November 2012
Posting some stuff I may turn into pages...
Moving SkyZoneinfo
Ready to embed code.
It's a normal SkyZone actor, but it alters it's location in runtime to generate a huge map effect. Depending on the ScaleDown value, the size of the actualy skybox may vary, but expect having to build a huge skybox. With it, endless terrain maps's boundaries won't be as noticeable.
The SkyZoneInfo actor. <uscript>//============================================================================= // MovableSkyZone. // Embed this actor into a map to make things easier //============================================================================= class MovableSkyZone expands SkyZoneInfo;
var() float ScaleDown; //Scale down movement compared to play zone (division) var() vector PlayZoneOrigin; var vector MyOrigin; //Automatically set as this actor's initial location var() name ForceOnZone; //Force this specific skyzone on this specific zoneinfo var PlayerPawn LocalPlayer; var MovableSkyDummy Dummy;
replication { reliable if( Role==ROLE_Authority ) MyOrigin, PlayZoneOrigin, ScaleDown, ForceOnZone; }
simulated function LinkToSkybox() { }
simulated function PreBeginPlay() { Super.PreBeginPlay(); MyOrigin = Location; if ( Level.NetMode == NM_DedicatedServer ) Disable('Tick'); }
simulated event Tick( float DeltaTime) { local PlayerPawn P; local ZoneInfo aZ;
if ( LocalPlayer == none ) { ForEach AllActors ( class'PlayerPawn', P) { if ( ViewPort(P.Player) != none ) { LocalPlayer = P; Dummy = Spawn( class'MovableSkyDummy', P); Dummy.MyZone = self; Dummy.POwner = P;
if ( (ForceOnZone != ) && (ForceOnZone != 'None') ) ForEach AllActors ( class'ZoneInfo', aZ, ForceOnZone) { aZ.SkyZone = self; }
return;
}
}
}
else
Disable('Tick');
}
simulated function UpdateLocation()
{
local vector newVec;
local actor ignoreme;
local rotator ignoreme2;
LocalPlayer.PlayerCalcView( ignoreme, newVec, ignoreme2);
newVec = (newVec - PlayZoneOrigin) / ScaleDown; SetLocation( MyOrigin + newVec); }
defaultproperties {
bStatic=False bAlwaysTick=True
} </uscript>
And a client dummy.
<uscript>//=============================================================================
// MovableSkyDummy.
//=============================================================================
class MovableSkyDummy expands Actor;
var MovableSkyZone MyZone; var PlayerPawn POwner;
event Tick( float Delta) { //Sanity checks, the MovableSkyZone isn't a static actor if ( MyZone == none ) return;
MyZone.UpdateLocation(); }
defaultproperties {
bHidden=True bAlwaysTick=True RemoteRole=ROLE_None
} </uscript>
CTF-OutworldHold using it.
The map limits aren't where they seem to be, can you guess where?