FORUM PTT -  Strona Główna
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
Instrukcja dodawania dźwięków hamowania do lokomotyw i EZT
Autor Wiadomość
Lukas Do'Urden
user



Wiek: 41
Dołączył: 15 Cze 2009
Posty: 92
Skąd: Częstochowa- Raków
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.

Szukamy fragmentu kodu:
Kod:
    // funkcja zamiany cisnienia
    public float GetPressureParam(string param)
    {
        float pressureMultiplier = 1.0 / (0.145 * 0.0000703);
        float pressureBase = 14.7 * 0.0000703;

        return pressureMultiplier * (loco.GetEngineParam(param) - pressureBase);
    }

    // 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;


Dodajemy następujący kod:
Kod:
float brakepress = GetPressureParam("brake-cylinder-pressure");
        float speedHam = Math.Fabs(loco.GetVelocity() / Train.KPH_TO_MPS);

        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.
 
 
UBE
super trainz
kamil86 id=367236


Pomógł: 5 razy
Wiek: 40
Dołączył: 28 Lut 2008
Posty: 455
Skąd: Nowogrodziec
Wysłany: 14-04-2012, 09:50   

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?
 
 
 
RBach 
Administrator
Toromistrz


Pomógł: 309 razy
Wiek: 50
Dołączył: 26 Lut 2008
Posty: 4522
Skąd: Gościcino Centralne
Wysłany: 14-04-2012, 12:22   

Lukas Do'Urden napisał/a:
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:

Kod:
void UstawDrzwi()
{
    for(a=0;a<wagoniki.size();a++)
    {
      dir=wagoniki[a].GetDirectionRelativeToTrain();
     {
        if(dir)
          wagoniki[a].SetMeshAnimationState("left-passenger-door",drzwiL);
          wagoniki[a].SetMeshAnimationState("right-passenger-door",drzwiP);
        else
          wagoniki[a].SetMeshAnimationState("right-passenger-door",drzwiL);
          wagoniki[a].SetMeshAnimationState("left-passenger-door",drzwiP);
      }
    }
}

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 :-)
_________________
Moje dodatki
Instrukcje kolejowe
KUID:263713
Aktualny release skryptów sygnalizacji:
v5.6:26.12.2025
Ostatnio zmieniony przez RBach 14-04-2012, 12:32, w całości zmieniany 3 razy  
 
 
Lukas Do'Urden
user



Wiek: 41
Dołączył: 15 Cze 2009
Posty: 92
Skąd: Częstochowa- Raków
Wysłany: 14-04-2012, 17:44   

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  
 
 
lvcas
nowy


Dołączył: 10 Lis 2008
Posty: 44
Skąd: Katowice
Wysłany: 15-04-2012, 11:09   

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:(
 
 
UBE
super trainz
kamil86 id=367236


Pomógł: 5 razy
Wiek: 40
Dołączył: 28 Lut 2008
Posty: 455
Skąd: Nowogrodziec
Wysłany: 15-04-2012, 12:32   

Cytat:
float brakepress = GetPressureParam("brake-cylinder-pressure");
float speedHam = Math.Fabs(loco.GetVelocity() / Train.KPH_TO_MPS);

if(speedHam > 10 and speedHam < 25 and brakepress > 7)
{
Sleep(World.PlaySound(GetAsset(),"hamulec.wav", 1000.0f, 20.0f, 1000.0f, loco, ""));
}

if(speedHam > 25 and speedHam < 50 and brakepress > 7)
{
Sleep(World.PlaySound(GetAsset(),"hamulec2.wav", 1000.0f, 20.0f, 1000.0f, loco, ""));
}


może to wyglądać w podobny sposób?
przetestuję różne możliwosći...
 
 
 
RBach 
Administrator
Toromistrz


Pomógł: 309 razy
Wiek: 50
Dołączył: 26 Lut 2008
Posty: 4522
Skąd: Gościcino Centralne
Wysłany: 15-04-2012, 15:24   

UBE napisał/a:

może to wyglądać w podobny sposób?


wręcz powinno :)
_________________
Moje dodatki
Instrukcje kolejowe
KUID:263713
Aktualny release skryptów sygnalizacji:
v5.6:26.12.2025
 
 
UBE
super trainz
kamil86 id=367236


Pomógł: 5 razy
Wiek: 40
Dołączył: 28 Lut 2008
Posty: 455
Skąd: Nowogrodziec
Wysłany: 15-04-2012, 15:30   

nie wiem jak dalej z tym , ale jest mały błąd, tak mi pokazuje cmp, a w maszyniscie kabina wariuje...

wygląda na to, że coś nie tak jest z wpisem w tym wierszu:

float speedHam = Math.Fabs(loco.GetVelocity() / Train.KPH_TO_MPS);

http://imageshack.us/phot...eztytuuocp.jpg/
http://imageshack.us/f/521/32401646.jpg/
 
 
 
UBE
super trainz
kamil86 id=367236


Pomógł: 5 razy
Wiek: 40
Dołączył: 28 Lut 2008
Posty: 455
Skąd: Nowogrodziec
Wysłany: 16-04-2012, 05:28   

już wszsystko jest ok, a wyszło to tak

http://www.youtube.com/watch?v=aAiDWoASwlw

kilka stopni hamowania
 
 
 
UBE
super trainz
kamil86 id=367236


Pomógł: 5 razy
Wiek: 40
Dołączył: 28 Lut 2008
Posty: 455
Skąd: Nowogrodziec
Wysłany: 07-05-2012, 20:39   

odnośnie skryptów mam jeszcze pytanie czy

Cytat:
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());

float animspd,vel1 = Math.Fabs(loco.GetVelocity() / Train.KPH_TO_MPS);
if(vel > 0.0)
{
StartMeshAnimationLoop("default");
if(vel1 <= 50) animspd = vel1/80.0;
else animspd = 1.0+((vel1-50.0)/130.0);
SetMeshAnimationSpeed("default",animspd);
}
else
{
StopMeshAnimation("default");
}


ten skrypt odpowiada za bujanie w kabinie?
Ostatnio zmieniony przez UBE 07-05-2012, 20:41, w całości zmieniany 1 raz  
 
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group