Mostly Harmless

Legacy:Tamearia Real Time Clock

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

This is a real time clock that I created. With some minor changes it can probably be used in a normal UT2004 map, although I haven't tested it online.

First up is the clock itself:

class Clock extends Actor
    placeable;
 
var ClockHand HourHand, MinuteHand, SecondHand;
var() vector HourHandScale, MinuteHandScale, SecondHandScale;        // Since the hands are spawned by the clock,
var() texture HourHandTexture, MinuteHandTexture, SecondHandTexture; // need a way for the mapper to customize the hands.
var rotator Hour, Minute, Second;
 
simulated function PostBeginPlay()
{
    local vector NewDrawScale3D, MyDrawScale;
 
    super.PostBeginPlay();
 
    HourHand = spawn(class'ClockHand', self,,Location,Rotation);
    MinuteHand = spawn(class'ClockHand', self,,Location,Rotation);
    SecondHand = spawn(class'ClockHand', self,,Location,Rotation);
 
    MyDrawScale.X = DrawScale * DrawScale3D.X;
    MyDrawScale.Y = DrawScale * DrawScale3D.Y;
    MyDrawScale.Z = DrawScale * DrawScale3D.Z;
 
    NewDrawScale3D = HourHandScale*MyDrawScale;  // Scale the hands according to my scale.
    HourHand.SetDrawScale3D(NewDrawScale3D);
    NewDrawScale3D = MinuteHandScale*MyDrawScale;
    MinuteHand.SetDrawScale3D(NewDrawScale3D);
    NewDrawScale3D = SecondHandScale*MyDrawScale;
    SecondHand.SetDrawScale3D(NewDrawScale3D);
 
    HourHand.Skins[0] = HourHandTexture;
    MinuteHand.Skins[0] = MinuteHandTexture;
    SecondHand.Skins[0] = SecondHandTexture;
 
    Hour.Yaw = Rotation.Yaw;  // If I'm rotated, turn the hands to my rotation.
    Minute.Yaw = Rotation.Yaw;
    Second.Yaw = Rotation.Yaw;
 
    Hour.Pitch = -5461.333333 * Level.Hour;  // Set the hands to their starting point (current time).
    Minute.Pitch = -1092.266667 * Level.Minute;
    Second.Pitch = -1092.266667 * Level.Second;
 
    HourHand.SetRotation(Hour);
    MinuteHand.SetRotation(Minute);
    SecondHand.SetRotation(Second);
 
    SetTimer(0.1,true);  // Setting it to one second makes the hands act screwy, so set it to less than a second.
}
 
function Timer()
{
    local rotator Hour, Minute, Second;
 
    Hour.Pitch = -5461.333333 * (Level.Hour + (Level.Minute/60));  // Smooth rotation for the hour hand
    Minute.Pitch = -1092.266667 * Level.Minute;
    Second.Pitch = -1092.266667 * int(Level.Second + 0.1);
 
    HourHand.SetRotation(Hour);
    MinuteHand.SetRotation(Minute);
    SecondHand.SetRotation(Second);
}
 
defaultproperties
{
    HourHandScale=(X=0.60,Y=1.00,Z=0.60),
    MinuteHandScale=(X=1.00,Y=1.00,Z=1.00),
    SecondHandScale=(X=0.40,Y=1.00,Z=1.00),
    HourHandTexture=Texture'UCGeneric.SolidColours.Black'
    MinuteHandTexture=Texture'UCGeneric.SolidColours.Black'
    SecondHandTexture=Texture'UCGeneric.SolidColours.Black'
    DrawType=DT_StaticMesh
    StaticMesh=StaticMesh'TameariaMeshes.TheClock'
    bShadowCast=True
    bEdShouldSnap=True
}

The actual clock hands just have default properties.

class ClockHand extends Actor;
 
defaultproperties
{
    DrawType=DT_StaticMesh
    StaticMesh=StaticMesh'TameariaMeshes.TheClockHand'
}

The clock mesh has the center of the clock at (0,0,0), and the clock hands are pointing straight up from (0,0,0) to make the code easier.

[[Image:Legacy_AngelMapperClock.jpeg|]]