Winda z GUI

Jak stworzyć windę sterowaną GUI ("graficznym interfejsem użytkownika")? Dowiecie się z poniższego artykułu.


Zaczynamy od wstawienia na mapę func_elevator. Jeśli chcemy żeby gracz miał możliwość nie tylko przywołania windy z panelu umieszczonego poza nią, ale także mógł sterować windą przy użyciu GUI umieszczonego w jej środku musimy wybrać odpowiedni model, na przykład "models/mapobjects/com/platguistand/platguistand.lwo". Bezpośrednio po wyborze model może być niewidoczny (niedoróba d3Radianta :P). Żeby zobaczyć naszą windę zapisujemy mapkę i zwyczajnie otwieramy ją ponownie.


Ustawiamy nasz model w odpowiedniej pozycji i zapamiętujemy jego origin (pojawi się we właściwościach obiektu, najlepiej "zapamiętać" przy pomocy "ctrl+c" :]). Będą to dane potrzebne do ustalenia miejsca, w którym winda się zatrzyma (bądź rozpocznie swój ruch). We właściwościach modelu wpisujemy klucz floorPos_1 i nadajemy mu wartość skopiowaną z origin - w ten sposób stworzyliśmy pierwszy punkt kontrolny. Jego wartość to odpowiednie współrzędne x, y i z - wedle naszych potrzeb możemy je sobie dowolnie zmieniać. Musimy pamiętać, że po odpaleniu mapki nasza winda wykona ruch z miejsca, w którym ją "postawiliśmy" do pierwszego punktu kontrolnego – może to wyglądać conajmniej "głupio".


Gdy mamy ustawiony pierwszy punkt trzeba ustalić położenie kolejnego. Dodajemy klucz floorPos_2 i wpisujemy do niego odpowiednio zmienione wartości z pierwszego punktu kontrolnego. Tu posłuże się przykładem: jeśli punkt pierwszy ma wartość "32 32 -0" to aby nasza winda pojechała w górę wystarczy wpisać 32 32 68 - spowoduje to zmianę pozycji obiektu o 68 jednostek względem osi Z.


Winda ma już dwa punkty kontrolne. Teraz musimy "powiadomić" program, że będzie miała nasza winda ma tylko te dwa miejsca docelowe. Dopisujemy do func_elevator klucz floor o wartości 2. Teraz należy wybrać odpowiedni GUI - przy jego pomocy gracz będzie kierował ruchem windy pomiędzy dwoma punktami. Naciskamy na przycisk GUI i z listy wybieramy panel odpowiedni do naszych potrzeb, może to być np. "guis/doors/liftmovewide.gui".

Teraz pora na określenie czasu w jakim winda ma dotrzeć z punktu 1 do punktu 2. W tym celu dodajemy do func_elevator kolejne klucze.

Klucz: move_time Wartość: x.x (czas w sekundach chyba :P)

Klucz: accel_time Wartość: x.x (czas, w którym winda będzie się rozpędzać, np. 0.4)

Klucz: decel_time Wartość: x.x (czas hamowania windy)



Gdy już nasz func_elevator ma wszystkie te dane, pozostaje nam go nazwać i przypisać do niego panele, które pokierują windą z zewnątrz, oraz dołączyć do niego platformę, którą będziemy podróżować (na razie "winda" to tylko model panelu sterującego).


Nazwijmy sobie ten nasz func_elevator "winda": wpisujemy w kluczu name wartość winda. Teraz tworzymy brush, który posłuży za platformę dla gracza. Gotowy brush (albo nawet ich większą ilość) zmieniamy na func_mover. Następnie w jego właściwościach wpisujemy klucz bind o wartości winda - w ten sposób połączyliśmy platformę z modelem panelu sterującego.

Przyszedł czas, żeby dodać pozostałe panele. W tym celu tworzymy func_static i wybieramy mu odpowiedni model (na przykład "models/mapobjects/guiobjects/techdrpanel1/techdrpanel1.lwo") oraz odpowiedni plik GUI (na przykład "guis/doors/liftcall.gui"). Następnie do func_static dodajemy klucz gui_parm1, a jako jego wartość podajemy numer punktu kontrolnego, do którego winda ma zostać przywołana. Teraz trzeba jeszcze tylko dodać klucz target o wartości winda. Potem wystarczy powtórzyć ostatnie kilka kroków, żeby stworzyć panel dla drugiego z punktów konrolnych i gotowe.


Całość powinna wyglądać "mniej więcej" tak:


Podpowiedź: Jeśli zupełnie nie wiesz "o co chodzi" przeczytaj ten poradnik: Podstawy tworzenia map do Dooma 3