Benötigt: Hammer und ein bisschen Grundwissen
und lest mal dieses Super Tutorial von JimWest

 
Für alle die es brauchen - hier wird noch mal path_track erklärt


Einleitung:

Wir erstellen hier einen Kran, den Man frei in den Achsen X und Y bewegen kann. Mit dem setparent Output kann man noch Objekte an den Kran anhängen. (Das Objekt, was man steuern will, muss kein Model sein; es muss nur eine Parentfunktion besitzen)
Man kann diese Steuerung auch für einen steuerbaren Scheinwerfer oder Plattformen, die man an den richtigen Platz bewegen muss, um weiterzukommen, gebrauchen.

Hier mal ein Bild damit ihr versteht was ich meine. Man steuert mit den Pfeiltasten. So lange man drückt fährt der Kran in eine richtung.



Allerdings gibt es bei dem Beispiel mit dem Kran 3 Haken:
1. Man kann das Objekt immer anhängen, auch wenn der Kran meterweit weg ist.
Das System aus HL2 kann man in CSS nicht benutzen.
2. Wenn man das Objekt wieder freisetzt, fällt es nicht runter, da die Parentfunktion nur für dynamic Models ist und nicht für Physik Models. (func_physbox hat eine Parentfunktion; damit müsste es gehen)
3. Der Kran hängt auch nicht Physikalisch korrekt an einem Seil, da kein phys_* Entity eine Parent Funktion hat.

Leider habe ich es nicht geschafft, noch die Z Achse mit einzubinden. (X und Z Achsen wären aber möglich…. es hängt nur an der 3. Achse) Nach 2 Tagen hab ich es jetzt aufgegeben. Vielleicht geht es auch gar nicht.

Tutorial:

Baut euch einen func_button, der ein game_ui auslöst. Mein game_ui trägt den Namen „steuerung“.



Setzt 2 logic_compare daneben und gebt ihnen Namen. (logic;logic2)

Nun wählt ihr das game_ui wieder an und gebt folgende Outputs ein.

Zitat:
My Output named: X Axis
Target Entitys named: logic
Via this Input: SetValueCompare

My Output named: Y Axis
Target Entitys named: logic2
Via this Input: SetValueCompare

(Das Add Parent wird später noch erklärt)

Jetzt machen wir einen kleinen Sprung und platzieren erstmal unser Kransystem. Also setzt ihr erstmal euer Entity, dass ihr bewegen wollt. (func_brush, prop_dynamic;point_spotlight)

Nun zieht ihr einen Brush drum und macht ihn zu einem func_tracktrain.
(1 Seite trigger und die anderen nodraw - sonst ist er sichtbar)
(Name: track)
Jetzt 3 path_tracks. Das 1. sollte auf dem 0 Punkt des zu bewegenden Entitys sitzen und den Namen move_y_2 tragen. Jetzt noch jeweils 1 zu beiden Richtungen in die sich das Entity später mal bewegen soll. Wenn ihr die Path_tracks nach oben gehen lasst, wird auch das Entity nach oben fahren. Meine gehen vom Player aus nach rechts und links vom 1. Path_track weg. (move_y_1;move_y_3)

Jetzt diese 3 verbinden mit next_key_frame und immer die nächst größer Zahl. Also 1 hat den nächsten Punkt auf 2 und 2 auf 3.
Die 3 path_tracks bekommen den Parent: track2

Einstellungen des func_tracktrain.
Zitat:
Name: track
First Stop Target: move_y_2
Parent: track2 (erstellen wir gleich)
Jetzt den gleichen Prozess noch einmal für die x Achse. (Noch ein func_tracktrain, 3 path_tracks mit den Namen move_x_1,2,3)

Einstellungen des 2. func_tracktrain
Zitat:
Name:track2
First Stop Target: move_x_2

Jetzt selektiert ihr noch mal das (oder mehrere) Objekt , dass ihr bewegen wollt und gebt ihm das Parent “track”

Das war jetzt wirklich kompliziert - wenn es unverständlich ist kann ich auch noch mal nachbessern.

Kleiner Sprung zurück zu den logic_compare…

Output von logic

Zitat:
My Output named: On_Equal_to
Target Entitys: track
Via this Input: SetSpeedDir
With a parameter override of: 0

My Output named: On_less_than
Target Entitys: track
Via this Input: SetSpeedDir
With a parameter override of: -25

My Output named: On_Greater_than
Target Entitys: track
Via this Input: SetSpeedDir
With a paramete override of:25
Das Gleich mit logic2. Bei Target Entitys muss man track2 angeben.



Wenn ihr jetzt kompiliert und auf den oben erstellen Button drückt, könnt ihr euch nicht mehr bewegen. Aber ihr könnt mit den Richtungstasten den Kran bewegen.

Objekte an den Kran hängen


Einfach ein prop_dynamic einfügen und im gameui folgende Einstellungen vornehmen:

Zitat:
My Output Named: Pressed Attack
Target Entitys: name des Models
Via this Input: Set Parent
With a parameter override of: name des greifers oder track

Und noch einen zum loslassen mit Pressed Attack2 und nicht Set Parent sondern einfach Clear Parent. Das System sollte jedem nun klar sein.