Uhren kann man unter Source entweder für realistische Atmosphäre oder zum Messen von Zeit nutzen. Es gibt zwei Arten von Uhren - die analoge und die digitale - doch welche man benutzt, hängt vom Setting ab. Es sei aber gesagt, dass man in eine Digitale Uhr mehr Arbeit stecken muss.
Das Erstellen einer Analogen Uhr ist ziemlich einfach, wenn man Mathe kann.
Zuerst brauchen wir ein Ziffernblatt: Dazu kann man z.B. ein Photo mit 360g (oder einem anderem Programm/Verfahren) zu einer Textur konvertieren, ein bereits existierendes Model verwenden, ein neues selber machen, und,und,und…
Ich hab mir selbst eine dev-Textur gemacht:
Jetzt noch ein paar Zeiger, die wir zu func_rotatings machen:
So…und nun die
Da wir ja wissen das sich der Sekundenzeiger mit einer Geschwindigkeit von 6°/sec dreht (=360°/60sec) -und der Minutenzeiger logischerweise 60 mal langsamer ist (0.1°/sec)(der Stundenzeiger dann 0.008333…°/sec, da 12 Stunden), haben wir jetz die Werte (°/sec):
Die tragen wir jetzt bei Max Rotation Speed bei den jeweiligen Zeigern ein, da wir ja ebenfalls wissen, dass der Wert die Umdrehung in °/sec angibt. Das wars.
(Dieses Tutorial kann übrigens auch auf HL1 angewandt werden)
Der Bau einer Digitalen Uhr zu beinhaltet ebenfalls ein wenig Rechenaufwand, lässt sich aber leicht umsetzen, wenn man erst einmal das Prinzip verstanden hat.
Die Idee hinter der folgenden Konstruktion ist, dass ein logic_timer konstant Sekunden hochzählt und bei jeder Sekunde unsere Sekundenanzeige um 1 erhöht. Hat er das zehnmal gemacht, erhöht sich die zweite Zahl um eins (dazu wird hier ein math_counter benutzt); hat die zweite Zahl sich wiederum sechsmal erhöht, erhöht sich Zahl drei dito. Diese Abhängigkeit voneinander ist übrigens notwendig; würde man einfach drei logic_timer die Zahlen erhöhen lassen, käme es zu Verschiebungen. Um die Texturen möglichst einfach handhaben zu können, erstellen wir die Zahlen als Togglebare materials.
Gemäß Togglebare Texturen erstellen wir mit Paint.net oder einem vergleichbaren Programm eine Textur, die sich von 0-9 und eine, die sich von 0-5 durchschalten lässt.
Nun müssen nur noch die Entities eingestellt werden.
Zahlen:
Jeweils ein func_wall, links und rechts mit der von 0-9 zählende Textur, in der Mitte mit der von 0-5 zählenden texturiert. Über jeder Zahl befindet sich ein env_texturetoggle, das als „Target Brush“ das jeweilige func_wall eingetragen hat.
Schaltung:
logic_timer:
Start Disabled: Yes
Refire interval: 1
„OnTimer: math_counter01 : add : 1“
„OnTimer: textoggle01 : incrementtextureindex“
math_counter#1:
Name: Math_Counter01
Maximum Legal Value: 10
„OnHitMax : !self : SetValue : 0“
„OnHitMax : math_counter02 : Add : 1“
„OnHitMax : texttoggle02: incrementtextureindex“
math_counter#2:
Name: Math_Counter02
Maximum Legal Value: 6
„OnHitMax : !self : SetValue : 0“
„OnHitMax : texttoggle03: incrementtextureindex“
Dazu kommt ein beliebiges auslösendes Entity, zB ein func_button. Die Schaltung wird gestartet, wenn der logic_timer Enabled wird und gestoppt, sobald er Disabled wird. Neu gestartet werden kann sie, indem die env_texturetoggle per SetTextureIndex ihre Textur auf 0 und die math_counter per SetValue ihren Wert auf 0 gesetzt bekommen.