====== Eine selbst schaltende Ampel ======

Habt ihr euch auch gefragt wie eine selbst schaltende Ampel àla ''cs_assault'' funktioniert? Hier soll nun erklärt werden wie es geht.

===== Ampelmast =====

Als erstes setzen wir die 2 Ampelmasten per [[source:entities:prop_static]]. Als Model nehmen wir: ''props/cs_assault/stoplight.mdl''

===== Lampen =====

Der Lichteffekt der Ampel wird per [[source:entities:env_sprite]] gemacht. 3 Sprites pro Ampel für Rot, Gelb und Grün, die jeweils passend vor den Ampelmasten positioniert werden.

Die [[source:entities:env_sprite|env_sprites]] bekommen folgende Einstellungen, dabei enden die Namen der Sprites der einen Ampel auf **1** und die der anderen auf **2**. Die Einstellugen aller 6 Sprites unterscheiden sich nur in **Name** und **FX Color**, allen gemeinsam sind diese Werte:

  * **Render mode**: World Space Glow
  * **FX Amount**: 255
  * **Framerate**: 10.0
  * **Spritname**: materials/sprites/glow04.vmt
  * **Scale**: 0.9
  * **Size of Glow Proxy Geometry**: 2.0
\\
Hier die Werte, die für jedes Sprite anders sind:

==== Ampel 1 ====

=== Rot ===
  * **Name**: sprite_red1
  * **FX Color**: 255 0 0 200

=== Gelb ===
  * **Name**: sprite_yellow1
  * **FX Color**: 255 255 0 200

=== Grün ===
  * **Name**: sprite_green1
  * **FX Color**: 0 128 0 200

==== Ampel 2 ====

=== Rot ===
  * **Name**: sprite_red2
  * **FX Color**: 255 0 0 200

=== Gelb ===
  * **Name**: sprite_yellow2
  * **FX Color**: 255 255 0 200

=== Grün ===
  * **Name**: sprite_green2
  * **FX Color**: 0 128 0 200

===== Steuerung =====

==== Lampen ====
 
Für die Ansteuerung der einzelnen Ampelphasen wird als erstes für jedes [[source:entities:env_sprite]] ein [[source:entities:logic_relay]] gebraucht, das jeweils ein Sprite einschaltet und die anderen beiden aus. Am besten plaziert man die [[source:entities:logic_relay|logic_relays]] jeweils neben das dazugehörige [[source:entities:env_sprite|env_sprites]].

=== Ampel 1 ===

== Rot ==
  * **Name**: set_red1

^ Output ^ Target Entity ^ Target Input ^
| OnTrigger | sprite_red1 | ShowSprite|
| OnTrigger | sprite_yellow1 | HideSprite |
| OnTrigger | sprite_green1 | HideSprite|
\\

== Gelb ==
  * **Name**: set_yellow1

^ Output ^ Target Entity ^ Target Input ^
| OnTrigger | sprite_red1 | HideSprite|
| OnTrigger | sprite_yellow1 | ShowSprite |
| OnTrigger | sprite_green1 | HideSprite|
\\

== Grün ==
  * **Name**: set_green1

^ Output ^ Target Entity ^ Target Input ^
| OnTrigger | sprite_red1 | HideSprite|
| OnTrigger | sprite_yellow1 | HideSprite |
| OnTrigger | sprite_green1 | ShowSprite|
\\

=== Ampel 2 ===

== Rot ==
  * **Name**: set_red2

^ Output ^ Target Entity ^ Target Input ^
| OnTrigger | sprite_red2 | ShowSprite|
| OnTrigger | sprite_yellow2 | HideSprite |
| OnTrigger | sprite_green2 | HideSprite|
\\

== Gelb ==
  * **Name**: set_yellow2

^ Output ^ Target Entity ^ Target Input ^
| OnTrigger | sprite_red2 | HideSprite|
| OnTrigger | sprite_yellow2 | ShowSprite |
| OnTrigger | sprite_green2 | HideSprite|
\\

== Grün ==
  * **Name**: set_green2

^ Output ^ Target Entity ^ Target Input ^
| OnTrigger | sprite_red2 | HideSprite|
| OnTrigger | sprite_yellow2 | HideSprite |
| OnTrigger | sprite_green2 | ShowSprite|
\\

==== Phasen ====

Als nächstes setzen wir 3 [[source:entities:logic_relay|logic_relays]], die die miteinander gekoppelten Phasen der beiden Ampeln schalten, also z.B. //Ampel 1: Grün// und //Ampel 2: Rot// usw.

=== Ampel 1: Grün - Ampel 2: Rot ===
  * **Name**: set_green1_and_red2

^ Output ^ Target Entity ^ Target Input ^
| OnTrigger | set_green1 | Trigger|
| OnTrigger | set_red2 | Trigger|
\\

=== Ampel 1: Rot - Ampel 2: Grün ===
  * **Name**: set_red1_and_green2

^ Output ^ Target Entity ^ Target Input ^
| OnTrigger | set_red1 | Trigger|
| OnTrigger | set_green2 | Trigger|
\\

=== Ampel 1: Gelb - Ampel 2: Gelb ===
  * **Name**: set_yellow1_and_yellow2

^ Output ^ Target Entity ^ Target Input ^
| OnTrigger | set_yellow1 | Trigger|
| OnTrigger | set_yellow2 | Trigger|
\\

==== Ablauf ====

Um den Ablauf der einzelne Ampelphasen zu steueren brauchen wir ein weiteres [[source:entities:logic_relay]]:

  * **Name**: synch

^ Output ^ Target Entity ^ Target Input ^ Delay^
| OnTrigger | set_green1_and_red2 | Trigger| 0|
| OnTrigger | set_yellow1_and_yellow2 | Trigger| 35|
| OnTrigger | set_red1_and_green2| Trigger| 40|
| OnTrigger | set_yellow1_and_yellow2| Trigger| 75|
\\

Damit die einzelne Phasen nicht nur einmal durchlaufen brauchen wir noch einen [[source:entities:logic_timer]].

  * **Name**: timer
  * **Refire Interval**: 80
  * **Use random time**: No
^ Output ^ Target Entity ^ Target Input ^
| OnTimer | synch| Trigger|
\\


Zu guter letzt kommt noch ein [[source:entities:logic_auto]], damit das Ganze auch initial getriggert wird.

  * **Global State to Read**: None

^ Output ^ Target Entity ^ Target Input ^ Delay ^
| OnMapSpawn | timer| FireTimer| 1|
\\

==== Erklärung ====
Beim Mapspawn wird das [[source:entities:logic_auto]] aktiviert und dann eine Ampeln rot und die andere grün. Nach 35sec werden beide gelb. Nach weiteren 5sec ist dann eine Ampeln rot und die andere grün, aber anderes herum als beim ersten mal. Als letztes werden beide wieder für 5sec gelb beschaltet und der Zyklus beginnt von vorne.

Diese Version der Ansteuerung fehlt noch die Rot-Gelb-Phase.