User Tag List

Ergebnis 1 bis 2 von 2

Thema: Counter

  1. #1
    Spender Avatar von Jacky
    Registriert seit
    19.06.2010
    Ort
    Graz
    Alter
    33
    Beiträge
    924
    Renommee-Modifikator
    8

    Counter

    Hi,

    Ich will euch heute mal ein schön aufwendiges Tutorial schreiben! Wie der Thread schon sagt handelt es sich um einen Counter!
    Um genau zu sein einen Counter der bei ablauf der Zeit ein Ereigniss auslösen soll! In meinem Fall einen trigger_hurt!
    Ich zeige euch 2 verschiedene Varianten. Zuerst einen einfachen Counter, für den nicht allzuviele Mapping Vorkenntnisse benötigt werden, und einen 2. Digitalen Counter, der schon recht kompliziert ist. Ich versuche jedoch Jeden Schritt so genau als möglich zu erklären.

    Analoger Counter
    Bei diesem Counter ist zwar nicht so genau zu erkennen wie viel Zeit noch ist aber ich denke er erfüllt seinen Zweck!


    Was machen wir genau?

    Wir machen eine Säule um die ein Ring ist der jede Sekunde um ein Stückchen nach unten gleitet bis er ganz unten ist und dann ein Ereigniss auslöst!


    Was benötigen wir?

    1x func_movelinear (Der Ring)
    1x math_counter
    1x logic_timer
    2x func_button (1x zum Einschalten und 1x zum resetten)


    Wie funktioniert das jetzt?

    Wir beginnen wie beim anderen Counter mit dem Brushwork. Ihr könnt ihn natürlich Designen wie ihr wollt, aber ich habe jetzt mal einfach eine Säule gemacht und den einen Ring rundherum welchen ich so positioniere, das er 200 Units(wieso 200 erkläre ich später) über dem Boden ist!
    Den Ring machen wir zu einem func_movelinear und geben ihm gleich einen Namen wie zB. "counter_move".
    Jetzt müssen wir noch die 2 Buttons bauen! Natürlich funktioniert es auch mit triggern!
    Soweit sind wir mit dem Brushwork fertig!

    Nun setzen wir noch irgenwohin einen logic_timer und einen math_counter! Auch diesen geben wir gleich einen Namen wie zB. "timer" und "counter"




    Gut beginnen wir mit den Einstellungen und Outputs!


    Fangen wir an mit dem counter_move:
    Folgende Einstellungen müssen wir wie folgt verändern.

    Moving Direction: 90 0 0 (gerade hinunter)
    Speed: 800 (kann auch einen anderen Wert haben, ich habe einfach mal 800 genommen)
    Moving Distance: 200

    Nun seht ihr warum ich den Ring 200 Units über den Boden gesetzt habe. Nun ist der Ring am Ende genau über dem Boden!

    Wenn ihr euch nun den Eintrag "Start Position" mal genauer anschaut, seht ihr das ihr den Ring auf jede nur denkliche Weise im Bereich in dem er sich bewegt setzen könnt. 0.0 wäre der anfang, sprich dort wo der Brush ist, 0.5 wäre genau in der Mitte, und 1.0 ist am Ende am Boden unten!
    Wofür ich euch das sage, werdet ihr dann beim math_counter sehen.

    Nun sind wir mit dem counter_move auch schon fertig!

    Weiter gehts mit dem timer:

    Folgende Einstellungen und Outputs sind vorzunehmen:

    Refire Interval: 1 (in welchen Abständen in Sekunden der Output gefeuert wird)
    Start Disable: Yes (kann auch No sein wenn man den Counter nicht manuell sondern zum Rundenbeginn starten will)

    OnTimer | counter | Add | 0.05

    Er fügt nun dem Counter jede Sekunde einen Wert von 0.05 hinzu. Sprich in 20 Sekunden haben wir einen Wert von 1!





    Weiter gehts mit dem counter:

    Folgende Einstellungen und Outputs sind vorzunehmen:

    Initial value: 0 (das ist die Zahl mit der er beginnt)
    Minimum legal Value: 0 (niedrigster Wert)
    Maximum legal Value: 1 (höchster Wert)

    OnValue | counter_move | SetPosition
    OnHitMax | hurt | Enable




    Nun erkläre ich euch warum ich euch auf die Startposition aufmerksam gemacht habe!

    OnValue
    bedeutet soviel wie "Den Wert den ich insgesamt vom timer schon bekommen habe gebe ich an den counter_move weiter"! Das geschiet jedesmal wenn sich der Wert verändert.
    Sprich wenn nach 10 Sekunden insgesamt ein Wert von 0.5 vom timer an den counter gegeben wurde, gibt dieser einen wert von 0.5 an den counter_move weiter zu der Einstellung Start Position und steht somit in der Mitte!
    OnHitMax bedeutet das er diesen Output gefeuert wird sobald die Maximum legal Value erreicht wurde! In unserem Fall also nach 20 Sekunden der Wert 1!


    Nun kommen wir noch zu unseren Buttons:


    1. Button zum Einschalten:

    Ein Output wird benötigt

    OnPressed | timer | Enable


    Ich denke das braucht keine weiteren Erklärungen!


    2. Button zum Reseten:

    Ebenfalls nur 1 Output

    OnPressed | counter | SetValue | 0

    Somit setzten wir den Wert beim counter wieder auf 0 und alle bisher empfangenen Werte sind gelöscht. Ebenfalls wird der counter_move wieder auf die Start Position 0 gesetzt!





    Das wars dann auch schon. Ich denke dieser Counter ist für Mapper die noch nicht soviel erfahrung im Umgang mit logic_case oder relay haben eine gute Alternative zum folgenden digitalen Counter!

    Die Beispielmap gibt es hier: countereinfach.rar


    EDIT:

    Ooops... hab am Anfang vergessen zu erwähnen das ich in meinem Beispiel einen trigger_hurt über Die Map gezogen habe und ihm dem Namen "hurt" gegeben habe



    Digitaler Counter

    Dieser Counter zeigt nun genau an wieviel Zeit noch übrig ist.

    Was benötigen wir?

    1x logic_auto
    1x logic_relay
    1x logic_timer
    2x logic_case
    3x math_counter
    1x func_button
    Xx func_brush (welche die Zahlen angeben)
    1x trigger_hurt

    So gehts!

    Namen können natürlich verwendet werden wie jeder meint!
    Als erster beginnen wir den Counter selbst zu brushen! Dazu machen wir einfach ein paar Quadratische Brushs die wir mit der nodraw textur belegen und auf die Vorderseite des Brushs legen wir jetzt die Zahlen, das geht mit den texturen decals/decalindustrialnumber. Jetzt müssen wir noch jeden brush einzeln benennen! Am besten so wie ich, das ist am wenigsten verwirrend mit einer_0 bis einer_9 und zehner_0 bis zehner_x (x steht für die zahl der höchsten Zehnerstelle). Jetzt noch alle einer und alle zehner Brushs jeweils übereinander legen und fertig ist der Counter... ihr könnt natürlich auch noch einen Rahmen ziehen!
    Dann noch den Trigger_hurt über den gewünschten Breich legen und den Namen hurt geben und "Start Disabled" auf "Yes" setzen.
    Einmal müssen wir noch brushen dann haben wir das erledigt. Nur noch einen func_button irgendwo hinsetzen wo ihr ihn gerne hättet!



    Gut, eine blöde Arbeit erledigt

    Nun setzen wir mal, um den überblick zu bewahren, vor die Einerstellen 1x math_counter und 1x logic_case, vor den Zehnerstellen das selbe und zwischen oder vor ihnen, wie jeder möchte, den 3. math_counter, den logic_timer und das logic_relay! Soweit so gut.
    Nun benennen wir jedes einzelne Entity. Ich habe für die Counter genommen: counter_einer, counter_zehner und counter_end. Für die logic_case habe ich genommen: case_einer und case_zehner. Das Relay hab ich einfach relay getauft und den logic_timer einfach timer!
    Jetzt beginnen wir mit den Einstellungen.
    Ab jetzt muss sehr genau gearbeitet werden, da bei den Einstellungen am meisten Fehler passieren können!

    Beginnen wir mit dem counter_einer. Bei "Initial Value" geben wir "10" ein, bei "Minimum legal Value" geben wir "0" ein und bei "Maximum legal Value" geben wir "10" ein.

    Nun zu den Outputs. Hier benötigen wir 3 Stück.
    1. OnHitMin | counter_einer | SetValue | 10
    2. OnHitMin | counter_zehner | Substract | 1 | 1 (die 2. 1 ist kein druckfehler sondern gehört bei After a Delay of Second eingetragen)
    3. OutValue | case_einer | InValue
    Das war alles bei diesem counter.



    Nun geht es weiter zum case_einer zu den Einstellungen. Bei "OnCase01" gebt ihr "1" ein bei "OnCase02" gebt ihr "2" ein......."OnCase10" gebt ihr "0" ein!
    Die Outputs werden jetzt schon schwieriger. Wir beginnen am besten Rückwärts, da er ja Rückwärts zählen soll!
    OnCase10 | einer_0 | Enable
    OnCase10 | einer_1 | Disable
    OnCase09 | einer_9 | Enable
    OnCase09 | einer_0 | Disable
    OnCase08 | einer_8 | Enable
    OnCase08 | einer_9 | Disable
    .
    .
    . Immer
    . so
    . weiter
    .
    .
    OnCase01 | einer_01 | Enable
    OnCase01 | einer_02 | Disable



    Soo einen großen Teil haben wir geschafft!
    Jetzt gehen wir auf die Zehner Seite und beginnen wieder beim math_counter mit den Einstellungen.

    In meinem Beispiel habe ich bei den Zehnern nur "0" und 10
    Das heist bei "Initial Value" gehört "1" hinein und bei "Minimal legal Value" "0" und bei "Maximal legal Value" "1"

    Bei den Outputs haben wir diesmal nur einen:
    OutValue | case_zehner | InValue



    Weiter zum case_zehner. Die Einstellungen machen wir "OnCase01" "1" und "OnCase02" "0".
    Die Outputs!
    OnCase02 | zehner_0 | Enable
    OnCase02 | zehner_1 | Disable



    OnCase01 wird hier ja nicht benötigt, da wir ja nur von 1 auf 0 umschalten wollen!

    Jetzt gehen wir in die Mitte! beginnen wir beim logic_relay.
    Der ist dafür gut das beim RundenSpawn nicht alle Zahlen angezeigt werden sondern nur in unserem Fall die 1 und die 9!
    Einstellungen sind keine notwendig also können wir gleich zu den Outputs übergehen!
    OnTrigger | einer_9 | Enable
    OnTrigger | zehner_1 | Enable
    OnTrigger | zehner_0 | Disable
    OnTrigger | einer_8 | Disable
    .
    .
    . Alle
    . anderen
    . ebanfalls
    . auf Disable
    . setzen
    .
    .
    OnTrigger | einer_0 | Disable



    Sooo nächstes Entity wäre der counter_end
    Die Einstellungen:
    "Initial Value" "0"
    "Minimum legal Value" "0"
    "Maximum legal Value" "20"
    (bzw. wenn ihr mehr habt dann die höchste Zahl)

    Outputs werden nur 2 benötigt.
    OnHitMax | trigger_hurt | Enable
    OnHitMax | timer | Disable



    So weiter gehts beim timer.
    Bei den Einstellungen braucht ihr nur "Refire Interval" auf "1" setzten.
    Bei den Outputs folgendes eingeben:
    OnTimer | counter_end | Add | 1
    OnTimer | counter_einer | Substract | 1



    Jetzt kommen wir noch zu unserem logic_auto.
    Die Outputs:
    OnMapSpawn | timer | Disable
    OnMapSpawn | relay | trigger



    Zu guter letzt noch der func_button!
    Bei dem müsst ihr nur noch den folgenden Output setzen.
    OnPressed | timer | Enable




    Das wars auch "SCHON"

    Man könnte jetzt auch noch wenn man möchte einen einen button machen bei dem man die Zeit wieder resetten kann. Dazu bräuchten wir diese 4 Outputs:
    OnPressed | relay | trigger
    OnPressed | counter_end | SetValue | 0
    OnPressed | counter_einer | SetValue | 10 | 0.5
    OnPressed | counter_zehner | SetValue| 1 | 0.5

    Ich habe auch eine Beispielmap gemacht und hoffe euch hat mein Tutorial zugesagt!

    Die Beispielmap gibt es hier: counter.rar

    Viel Spass noch!
    MfG Tom

    PS: Falls ihr meinen Counter aus dem Beispielmap rauskopiert und in eure Map gebt, würde ich mich über einen kleinen Eintrag in eurer Map freuen, da dieser Counter doch eine Heiden Arbeit ist wie ihr ja gerade bemerkt habt!
    Geändert von Jacky (19.06.2010 um 18:52:00 Uhr)

  2. #2
    Neues Mitglied
    Registriert seit
    01.08.2010
    Ort
    Berlin
    Alter
    23
    Beiträge
    19
    Renommee-Modifikator
    0
    sehr schönes Tut, gute Arbeit und sehr präzise und genause Erklärungen!
    Weiter so!

    EDIT: Bei deiner Beispielmap fehlt bei jedem Durchlauf die 1 vom einer
    außerdem ist der Start verbugged, d.h. die 10 wird nicht angezeigt richtig
    Geändert von Deivil (20.09.2012 um 15:11:25 Uhr)
    Deivil

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
[email protected]