Strefa OMSI

Pełna wersja: Zmienna czcionka na wyświetlaczu wewnętrznym
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam.:)

Tworzę nową czcionkę na wyświetlacze wewnętrzne w autobusach. Wzoruję się na berlińskim systemie firmy Gorba, ale z tego co wiem, takie urządzenia można spotkać m. in. w krakowskich Bombardierach.

Chciałbym odwzorować zmianę czcionki w zależności od długości wyświetlanej nazwy przystanku. Litery w tym kroju są stosunkowo szerokie i komunikat o długości większej niż 16 znaków nie mieści się na wyświetlaczu. Wtedy szerokość liter się zmienia, a w kontekście OMSI, wyświetlana jest czcionka z innego pliku. Wiadomo, że aby uzyskać taki efekt, należy pogrzebać w skryptach. Oto już edytowany przeze mnie fragment, który najprawdopodobniej odpowiada za odświeżanie wyświetlacza:

Kod:
{macro:IBIS_LCD-refresh}

'Formatierung der D92-Innenanzeige
    (L.L.RBL_FIS_On)
    {if}
        (L.L.IBIS_LCD_showdest) 0 =
        {if}
            (L.L.IBIS_LCD-zeile) 1 =
            (L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString) $length 0 > &&
            {if}
                (L.L.IBIS_RouteIndex) 0 >=
                {if}
                    (L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString) $length 16 <=
                    {if}
                        (L.L.IBIS_LCD-zeile)
                        (L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString)
                        (S.$.IBIS_cabindisplay)
                    
                    {else}
                        (L.L.IBIS_LCD-zeile)
                        (L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString)
                        (S.$.IBIS_cabindisplay2)
                    {endif}
                {endif}
            {else}
                (L.L.IBIS_RouteIndex) 0 >=
                {if}
                    (L.L.IBIS_busstop_index) 1 (M.V.GetBusstopString) $length 16 <=
                    {if}
                        (L.L.IBIS_LCD-zeile)
                        (L.L.IBIS_busstop_index) 1 (M.V.GetBusstopString)
                        (S.$.IBIS_cabindisplay)
                    
                    {else}
                        (L.L.IBIS_LCD-zeile)
                        (L.L.IBIS_busstop_index) 1 (M.V.GetBusstopString)
                        (S.$.IBIS_cabindisplay2)
                    {endif}
                {endif}
            {endif}
        {else}
            (L.L.RBL_Linie) (L.L.IBIS_LinieKurs) = (L.L.IBIS_LinieKurs) &&
            {if}
                (L.L.IBIS_Linie_Suffix) s0
                {if}
                    l0 28 =
                    {if}
                        "M"
                    {endif}
                    l0 35 =
                    {if}
                        "N"
                    {endif}
                    l0 36 =
                    {if}
                        "X"
                    {endif}
                    (L.L.RBL_Linie) 100 % $IntToStr $+
                {else}
                    (L.L.RBL_Linie) $IntToStr
                {endif}
                " " $+
                (L.$.IBIS_cabindisplayDest) $+
            {else}
                ""
            {endif}
            (S.$.IBIS_cabindisplay)
        {endif}
    {else}    
        "" (S.$.IBIS_cabindisplay)
    {endif}
    
{end}

S.$.IBIS_cabindisplay odpowiada za czcionkę z szerokimi literami, a S.$.IBIS_cabindisplay2 za tę z wąskimi literami. Obie są wpisane w plik .cfg odpowiedniego pojazdu:

Kod:
6
[texttexture_enh]
IBIS_cabindisplay
LCD New Moje
500
35
0
202
254
20
3
1

[...]

13
[texttexture_enh]
IBIS_cabindisplay2
LCD-Innenanzeige_New_1
1600
100
0
202
254
20
3
1

Obecnie efekt jest taki, że przystanki szeroką czcionką wyświetla, a wąską nie.

Pod mesha "DL_Innenanzeige.o3d" (wyświetlacz wewnętrzny) podpięta jest TextTexture o numerze 6, czyli domyślnie z szeroką czcionką. Czy dałoby się jakkolwiek podpiąć drugą TextTexture (o numerze 13) do tego samego obiektu?

Jeśli nie, czy dałoby radę zaimplementować zmienność czcionek w ramach jednego obiektu w jakiś inny sposób? Z góry dziękuję za odpowiedź.:)
Zdubluj obiekt wyświetlacza i w tym drugim daj id tekstury tekstu 13. Ponadto dopisz do każdego [visible] i pod jednym dopisz waskie a pod drugim szerokie (albo jak ci wygodnie) i pod tym 1.
Kod:
[visible]
waskie
1
W skrypcie w tym miejscu gdzie sprawdza czy jest szerokość jest większa niż 16 dopisz przed {else}
Kod:
1 (S.L.waskie) 0 (S.L.szerokie)
a po {else}
Kod:
0 (S.L.waskie) 1 (S.L.szerokie)
Wiadomo, wszystkie nowe zmienne dopisać do varlista.
Przekierowanie