Tak sobie zacząłem kombinować ze skryptami w kabinie i wykombinowałem już co nieco, ale mój problem w tym temacie tyczy się "świecenia się" siatki podświetlania.
Poskładałem sobie różne skrypty i przystosowałem je dla własnych potrzeb w wyniku czego zrobiłem chyba prosty skrypt na wywoływanie siatki przełącznikiem. Wszystko działa tzn. przełączam przełącznik i pojawia się siatka, przełączam drugi raz - siatka znika.
Wszystko byłoby ok, gdyby nie to, że mam też zamontowany skrypt na przyciemnianie światła w kabinie wraz z czasem. Niestety przyciemnia się też siatka podświetlania - czy jest jakiś (musi być) sposób na "świecenie się" siatki podświetlania pomimo tego przyciemnia. Sama siatka ma w configu wpis "kind "light"", ale to nic nie daje.
Pomógł: 31 razy Wiek: 42 Dołączył: 24 Mar 2008 Posty: 808 Skąd: Poznań/Kołobrzeg
Wysłany: 21-11-2009, 15:53
Sprobuj zmienic nazewnictwo siatek w configu i skrypcie tak by nie pokrywaly sie ze soba - to jest pierwsze co mi sie rzuca w oczy. Ogolnie jesli chcesz to moge Ci polecic bardzo prosty tutorial odnosnie skryptow kabin (po angielsku co prawda) - bo tak naprawde skryptowanie kabiny odnosi sie do korzystania z czterech funkcji (ktore sie rozwija w zaleznosci od potrzeb - i tu jest glowny problem skryptowania bo trzeba zarowno znac dzialanie tych potrzeb jak i ich przeniesienie na jezyk programowania, a co gorsza trzeba to jeszcze odniesc na srodowisko gry - przyklad z drzwiami w ezt: chcemy miec mozliwosc przelaczania zeby sie otworzyly drzwi - trzeba i nadac zmienne, zeby dane zostaly zapisane do pamieci, trzeba odpowiednio nazwac siatki czy wykorzystac funkcje ze srodowiska gry - stad tak niby prozaiczna pierdola wywoluje u mnie niezmiennie wstret do skryptowania kabin - nie czuje do tego blues'a po prostu).
Właśnie po Twoim poście przypadkowo szukając objaśnienia do któregoś z wpisów w skryptcie w google trafiłem na ten poradnik - przyda się.
Wracając do podświetlania: pozmieniałem nazwy siatek, aby się nie gryzły - nic to nie dało.
Spróbowałem więc dodać jakiś wpis w skrypcie pojawiania się siatki podświetlania: zasugerowałem się skryptem na przyciemnianie i wpisem:
Kod:
SetCabLightIntensity (1)
Skopiowałem go i przerobiłem na:
Kod:
SetMeshLightIntensity ("noc_light", true, 1);
Dodałem ten wpis do listy zdarzeń wynikających z przełączenia przełącznika od włączania oświetlenia:
Kod:
} else if (control == noc_switch_1) {
if (value > 0.9 and !light) {
light = true;
SetMeshVisible("noc_light", true, 0.1f);
SetMeshLightIntensity ("noc_light", true, 1);
} else if (light) {
light = false;
SetMeshVisible("noc_light", false, 0.1f);
}
Ale skończyło się to:
Męczę się z tym już dziewiąta godzinę chyba i już właściwie skończyły mi się wszystkie pomysły.
Najfajniejsze jest to, że w kabinie BR118 gdzie jest też przyciemnianie się światła w kabinie wraz z czasem siatka amperomierzy nie przyciemnia się w ogóle a jej wpis tak wygląda w configu:
Kod:
anzeigen {
mesh "Anzeigen.im"
auto-create 1
att "a.anzeigen"
}
Element "anzeigen" nie jest w ogóle też przypisany w skrypcie kabiny...
A tak wyglądają wpisy w moim configu:
Kod:
noc_light {
mesh "noc.im"
auto-create 0
att "a.noc"
}
noc_light1 {
mesh "noc1.im"
auto-create 0
att "a.noc1"
}
Pomógł: 31 razy Wiek: 42 Dołączył: 24 Mar 2008 Posty: 808 Skąd: Poznań/Kołobrzeg
Wysłany: 21-11-2009, 18:54
Wywala Ci blad bo funkcja CabLightIntenisty jest funkcja natywna w srodowisku (czyli dostepna od razu z marszu i jest funkcja wewnetrzna), a zmiana jej nazwy przez Ciebie stworzylo odwolanie do nieistniejacej funkcji - warto sie zapoznac z API (jak znajde link to podam) lub jesli chcesz od razu to wlaz do katalogu scripts i szukaj tam defaultlocomotivecabin.gs i cabin.gs - mozesz je przejrzec i tam sa wlasnie wszystkie funkcje natywne zdeklarowane (oczywiscie modyfikowania tych plikow nie polecam bo sie skonczy zle) i w wiekszosci opisane do czego sluza. Ostatecznie wklej tu skrypt jaki masz i wtedy sprobuje pomoc.
Na dziś wymiękłem. Tak zacząłem przeglądać i kombinować, że w końcu lista błędów zrobiła się ciut za duża : D Próbowałem podczepić części skryptu z kabiny lokomotywy DD40 - nie wyszło.
Mój skrypt wygląda w wersji działającej (wycieraczki, wskazówka pozycji i pojawianie się siatek podświetlania) tak:
Mam jeszcze dosyć niezrozumiały przeze mnie problem: przy pierwszym przełączeniu przełącznika od wycieraczki animacja odtwarza się tylko raz - trzeba jeszcze raz zrobić tę samą czynność, żeby animacja po włączeniu powtarzała się. Podobnie (ale tu nie ma animacji) jest z podświetlaniem - trzeba dwa razy przełączać przełącznik za pierwszym użyciem, aby zadziałało wszystko dobrze.
Pomógł: 31 razy Wiek: 42 Dołączył: 24 Mar 2008 Posty: 808 Skąd: Poznań/Kołobrzeg
Wysłany: 21-11-2009, 21:12
Zasiegnalem do zrodla (API) - funkcja SetCabLightIntensity wplywa na oswietlenie kabiny i zachowuje sie jako typowe swiatlo silnika gry, a nie bazuje na rzeczywistej fizyce, wiec po prostu przygasa wszystko w kabinie. Ewentualnie siatka amperomierza w BR118 jest wyeksportowana z gmaxa z zastosowaniem selfillumination, wiec to nie musi byc sterowalne w zaden sposob, po prostu sie caly czas swieci jak psu jaja.
Na filmiku widać co działa, ale też widać problem, z którym się borykam (widać to np. przy pierwszym włączaniu wycieraczek): przełączniki wykonują swoje zadanie wywoływania tego, co mają podane w skypcie dopiero za drugim przełączeniem (potem jest już wszystko ok, czasem za pierwszym razem załapie). Tak samo z animacja wycieraczek: za pierwszym razem odtwarza się pojedyncza animacja, a dopiero za drugim animacja się zapętla (w skrypcie ma wyraźnie podane, że ma się zapętlać od początku [chyba ; )]).
Za bardzo nie wiem co może być tego przyczyną.
Inne skrypty mają jakieś wpisy dotyczące danych kabiny (tak to rozumiem), ale za choinkę nie jestem w stanie tego zrozumieć.
Kod:
// reset the controls from saved values
DD40CabinData ddcd = cast<DD40CabinData>cd;
float value = 0.0;
I jeszcze jedno pytanie: do czego służy wpis "x.yf"? Przykład (tu: 0.1f):
Kod:
} else if (control == noc_switch_1) {
if (value > 0.9 and !light) {
light = true;
SetMeshVisible("noc_light", true, 0.1f);
} else if (light) {
light = false;
SetMeshVisible("noc_light", false, 0.1f);
}
Pomógł: 31 razy Wiek: 42 Dołączył: 24 Mar 2008 Posty: 808 Skąd: Poznań/Kołobrzeg
Wysłany: 24-11-2009, 16:39
Marcin, ten pierwszy cytat dotyczy odwolania do CabinControl (statyczna czesc skryptu dotyczaca przechowywania wartosci przelacznikow itp. w pamieci), pobierz sobie ED72 i tam w kabinie winien byc moj skrypt odnosnie sterowania drzwiami z wykorzystaniem wlasnie tego, popatrz jak to wyglada - akurat na drzwiach to idzie latwo zrozumiec. Natomiast ten zapis 0.1f rownie dobrze moze byc zapisany jako 0.1 (dotyczy to zmiennej typu float - stad f na koncu, nawyk autora z ktoregos z jezykow), a w tej funkcji podajesz ta wartoscia czas znikania/pokazywania siatki (true - pokaz false - ukryj) wartosc 0.0 powoduje natychmiastowe znikniecie, swego czasu wartosci inne niz 0.0 powodowaly wylot TRS2004 do pulpitu, od 2006 to przeszlo, ogolnie efekt jest niezly (podobny zrobilem w testach JDS-ow ostatnio na swiatlach bialych siatka).
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