Wysłany: 13-04-2012, 21:16 Instrukcja dodawania dźwięków hamowania do lokomotyw i EZT
Sporo dostałem pytań na ten temat wiec opiszę to tutaj:
Cała rzecz jest dość prosta. Wszystko umieszczamy i dodajemy w kabinie (interior) danego loka. Niech to będzie En-57. Szukamy kabiny w Menadżerze zawartości. W tym przypadku będzie to kabina EN57-794Interior (autor joxar). Klikamy prawym, wybieramy Edycja -> Edytuj w Eksploratorze. Otwiera nam się okno z zawartością plików kabiny. Pierwsze co musimy zrobić to do plików dodać plik z dźwiękiem hamulca. Do katalogu głównego (można do sounds ale trzeba wtedy odpowiednio zmodyfikować ścieżkę w skrypcie). Plik, który ja znalazłem jest tutaj i nazywa się hamulec.wav. Kopiujemy ten plik do otwartego okna z plikami. Teraz czas na modyfikację skryptu loka. Otwieramy w tym celu plik gs, w tym wypadku będzie to en57kabina.gs. Wystarczy do tego notatnik chociaż lepszy będzie program do edycji plików programów, który pokaże nam numery linii.
// moje do odswiezania stanu przelacznikow czyli na bierzaco ustawia przelaczniki i igly
public void Update(void)
Ważna jest ta funkcja GetPressureParam. Tutaj już jest ona w pliku jednak w innych lokomotywach może jej nie być więc wtedy dodajemy. Teraz czas na właściwą poprawkę. W funkcji Update za tym fragmentem:
Kod:
public void Update(void)
{
float value;
float panto; // zmienna dla pantografu 0,1,2,3
float speed; // zmienna predkosci dla haslera by pokazywal ruch w tyl
float lastspeed; // zmienna ostatniej predkosci do wlaczenia lampki oporow rozruchowych
int sterowanie; // zmienna do sprawdzenia kto steruje pociagiem czlowiek czy ai
Train train = loco.GetMyTrain(); // zmienna pociagu
sterowanie = train.GetAutopilotMode(); // sprawdzenie kto steruje
float nastawnik; // pozycja nastawnika do obliczania pradu na silnikach
float prad; // prad na silnikach trakcyjnych
float predkosc;
if(speedHam > 10 and speedHam < 25 and brakepress > 7)
{
Sleep(World.PlaySound(GetAsset(),"hamulec.wav", 1000.0f, 20.0f, 1000.0f, loco, ""));
}
I to wszystko. Plik zapisujemy , klikamy prawym na dodatek, dajemy Wprowadź i gotowe.
Kilka słów o samym skrypcie. W pierwszej linijce definiujemy zmienną w której będziemy przetrzymywać wartość ciśnienia w cylindrze hamulców. GetPressureParam("brake-cylinder-pressure"); pobiera nam właśnie to ciśnienie. Następna linijka to zmienna przetrzymująca aktualną prędkość lokomotywy. Teraz robimy sprawdzanie.
Jeśli (if( ) prędkość lokomotywy jest większa niż 10 (km/h) i mniejsza niż 25 oraz hamulce są włączone (ciśnienie w cylindrze większe niż 7) to generuj dźwięk hamulec.wav. Po nazwie pliku z dźwiękiem mamy wartości określające siłę dźwięku oraz siłę tego dźwięku w miarę oddalania od źródła. Źródło dźwięku określiłem jako loco (czyli nasza lokomotywa) dzięki czemu gdy oddalimy kamerę dźwięk przycichnie.
Wartości prędkości i hamulca wyliczyłem na podstawie eksperymentów. górna granica jest akceptowalna bo pisk nie męczy za długo. Dolna powinna być 0 ale dźwięk trochę trwa i musi być odegrałby do końca co skutkowało tym ze było go słychać jeszcze chwilę po zatrzymaniu. Przy prędkości 10 minimalnej , dźwięk urywa się prawie równo z zatrzymaniem. Co do wartości ciśnienia w hamulcach to powinno ono wynosić powyżej 0 ale po zwolnieniu hamulców często w cylindrze zostaje jakieś 5-6 więc warto dodać bufor aby pociąg nie piszczał przy ruszaniu.
Bardzo ciekawy artykuł, tego kiedyś szukałem, mam pytanie odnośnie tego czy można zdefiniować kilka dźwięków hamulca, a nie jeden, dla wyższych prędkości?
a pudłem z kabiny sterować już nie można (jeśli ktoś zna rozwiązanie to proszę o pomoc).
Żeby nie śmiecić Jamalowi, piszę tu.
Obsługę "drzwiuf" z kabiny spróbuj zrobić tak:
Na początku deklarujesz:
zmienne typu Locomotive i Train:
Kod:
Train ciapong;
Locomotive mylok;
i zmienną tabelaryczną typu vehicle:
Kod:
Vehicle[] wagoniki;
metodą GetParentObject(); uzyskujesz obiekt, który "posiada" naszą kabinę:
Kod:
mylok = GetParentObject();
potem ustalasz pocąg, w którym jest nasz lok:
Kod:
ciapong = mylok.GetMyTrain;
Następnie do tabelki wrzucasz wagony z pociągu:
Kod:
wagoniki = ciapong.GetVehicles;
To wszystko np. w Init() kabiny.
A przy pstryknięciu przełącznika badamy jego stan (czy jest 0 czy 1)
(powiedzmy że są to zmienne bool drzwiL i drzwiP) i nadajemy im odpowiednie wartości.
i do wszystkich pojazdów wysyłamy zależnie od stanu pstryczka:
Wywołanie powyższej metody wstaw tam, gdzie w skrypcie jest obsługa pstryczka lewego i prawego do drzwi, po ustaleniu wartości zmiennych drzwiL i drzwiP.
Ewentualnie wstawić to wszystko do skryptu kibla - ale wtedy trzeba trochę zmienić zasadę:
Nie potrzeba wywoływać GetParentObject() a stan pstryczków badać przez GetCabinData.
Wtedy wszystkie pojazdy z prawidłowo zaimplementowaną animacją drzwi (chodzi o nazwy animacji w configu, nie nazwy plików .kin) będą otwierać/zamykać drzwi - nawet jak do kibla podepniesz 111A
Wielkie dzięki :) Jak tylko będę miał trochę czasu w tygodniu to się tym pobawię ;)
Dźwięki dla różnych prędkości można wystarczy dodać taką samą pętlę ale z innymi ramami prędkości. Ale trzeba to dobrze zgrać żeby nie nachodziły na siebie (krótki dźwięk by był potrzebny.
Ostatnio zmieniony przez Lukas Do'Urden 14-04-2012, 17:45, w całości zmieniany 2 razy
Super będzie, jeśli się uda uruchomić drzwi w tym modelu:) A czy jest możliwość przy okazji dodania oświetlenia nocnego Z tego co wiem to większość modeli wagonów nie posiada takiej funkcji:(
Train train = loco.GetMyTrain(); //wstawiamy by zwracal do pociagu np my wlaczamy przycisk patyka a on podnosi patyk w pociagu i to my ustawiamy przelaczniki
float vel = Math.Fabs(train.GetVelocity());
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach