//wersja wg monstera
// poprawione sin(a) -> tg(a)

unit ubusz;

interface

uses udrzwi,umklogger,globjects,sysutils,glVectorfileobjects,gltexture
,glgeomobjects,glmisc,mk_utl,GLFile3DS,mk_naped,glscene,math,glutils,vectorlists,
uobywatele,upulpit;

type XY = record
x,Y:real;
end;

type mkXY=class
public
X,Y:real;
V,ang:real;
end;

type tbusz=class
public

        drz:array[0..7] of tdrzwi;
        ocx,ocy:real;
        odx,ody:real;
        kilom:real;
        log:tmklogger;
        dr0:boolean;
        kierownica,dir:real;
        jestprzegub:boolean;
        jestsegC:boolean;
        przyklek:boolean;
        baza:tgldummycube;
        podwozieA,podwozieB:tgldummycube;
        dlakamery:tgldummycube;
        nadwozieA,nadwozieB:tgldummycube;
        tukaruzela,tukaruzela2:tgldummycube;
        os2,os3:tgldummycube;
        os1L,os1P:tgldummycube;
        k_kolumna:tgldummycube;
        noflare:boolean;
        k_kolo:tglplane;
        szybki:tgldummycube;
        mig:boolean;
        noc:boolean;
        koloL:array[1..3] of record bie:tglcylinder; felga:tglcylinder; end;
        koloP:array[1..3] of record bie:tglcylinder; felga:tglcylinder; end;
        s_kierunek:array [1..10] of tglsprite;
        s_stop:array[1..3] of tglsprite;
        s_obrys:array[1..2,1..8] of tglsprite;
        s_pozyc:array[1..9] of tglsprite;   //P1,P2,T1,T2,Y1,Y2,R1,R2,CO
        wysw_przod,wysw_bok,wysw_bok_dwa,wysw_tyl:tglplane;
        w1,w2,w3,w4:tgldummycube;
        rej,rej1:tglplane;
        plama_p,plama_t:tglplane;
        stop:boolean;
        kierunek:integer;
        liczbad:integer;
        opusz:integer;
        pojemnoscbusa:integer;
        rozstaw,przelozenie_k:real;
        matlib,matlib2,matlib3,matlibkola:tglmateriallibrary;
        segAmesh,segBmesh,segCmesh:tglfreeform;
        szyba_A,szyba_B:tglfreeform;
        nalepki_A,nalepki_B:tglfreeform;
        dkier1_1,dkier1_2,dkier2_1,dkier2_2:tglfreeform;


        Al_kierunekL_1,Al_kierunekP_1:tglfreeform;
        Al_kierunekL_0,Al_kierunekP_0:tglfreeform;
        Al_wsteczny_1,Al_stop_1,Al_mijania_1:tglfreeform;
        Al_wsteczny_0,Al_stop_0,Al_mijania_0:tglfreeform;

        Bl_kierunekL_1,Bl_kierunekP_1:tglfreeform;
        Bl_kierunekL_0,Bl_kierunekP_0:tglfreeform;
        Bl_wsteczny_1,Bl_stop_1,Bl_mijania_1:tglfreeform;
        Bl_wsteczny_0,Bl_stop_0,Bl_mijania_0:tglfreeform;

        naped:tnaped;
        czujnik:tgldummycube;
        dl_haka,dl_zaczepu:real;
        osegcan:real;
        posx,posy:real;
        szyja:tgldummycube;
        strzala:tglarrowline;
        wychyl:real;
        wekA,wekB,wekC,wekD:mkXY;
        pA,pB,pC,pD:tgldummycube;
        meshkolo:tglfreeform;
        rozmywanie:boolean;
        szyba:tglmaterial;
        ludzie:array of record p:tglproxyobject; def:boolean; end;
        ltyp:tobywatele;
        pulpit:tpulpit;
        jestpulpit:boolean;
        dk:integer;
        vpasa:boolean;
        blokhamulca:boolean;
        constructor create;
        function znazwy(mesz:tglfreeform;s:string):integer;
        procedure wczytajbusa(_mname:string;_tname:string);
        procedure wczytajteksture(_mname:string;_tname:string);
        procedure policz(dt:double);
        procedure rusz(dt:double);
        procedure init;
        procedure swiatla;
        procedure migaj;
        function iter(A:XY;B:XY;alfa:real;r:real;prob:real):XY;
        procedure dodajludzia(nr:integer;x,y,z,a:real;typ:byte;gdzie:byte);
//        procedure swiatla_wyl;
        procedure pokazludzi(a:integer);
        procedure drzwikierowcy;
        procedure dk_rusz(a:integer);


end;

implementation

procedure tbusz.dodajludzia(nr:integer;x,y,z,a:real;typ:byte;gdzie:byte);
var par:tgldummycube;
begin
//        log.wriln('dodajeludzia');
        if vpasa then begin
                par:=nadwoziea;
                if gdzie=2 then par:=nadwozieb;
                ludzie[nr].p:=tglproxyobject.create(par); ludzie[nr].p.parent:=par;
                ludzie[nr].p.MasterObject:=ltyp.lb[typ];
                ludzie[nr].p.position.x:=x;
                ludzie[nr].p.position.y:=y;
                ludzie[nr].p.position.z:=z;
                ludzie[nr].p.rollangle:=a+90;
                ludzie[nr].def:=true;
                ludzie[nr].p.Visible:=false;
        end;
end;

procedure tbusz.pokazludzi(a:integer);
var i:integer  ;
begin
        if vpasa then begin
  //      log.wriln(inttostr(a)+' '+inttostr(pojemnoscbusa)+' '+inttostr(length(ludzie)));
                for i:=1 to a do if ludzie[i].def then ludzie[i].p.Visible:=true;
  //      log.wriln('fab');
                for i:=a+1 to pojemnoscbusa do if ludzie[i].def then ludzie[i].p.Visible:=false;
 //       log.wriln('ok');
        end;
end;


function tbusz.znazwy(mesz:tglfreeform;s:string):integer;
var i,ret:integer;
begin
ret:=-1;
        for i:=0 to mesz.meshobjects.count-1 do
                if mesz.meshobjects[i].name=s then ret:=i;
        znazwy:=ret;
end;



procedure tbusz.init;
var i:integer;
begin
        blokhamulca:=true;
          kilom:=0;
        jestpulpit:=false;
        rozmywanie:=false;
        weka:=mkxy.create;
        wekb:=mkxy.create;
        wekc:=mkxy.create;
        wekd:=mkxy.create;
         wekA.x:=0;
         weka.y:=0;
        wekb.x:=10;
        wekb.y:=0;
        wekc.X:=-2;
        wekc.Y:=0;

        wekd.X:=-10;
        wekd.Y:=0;

        log.wriln('init');
        naped:=tnaped.create;
        //naped.log:=log;
        naped.wczytajskrzynie('zf5hp500.gbx');
        naped.wczytajsilnik('su15.eng');
        matlib:=tglmateriallibrary.Create(nil);
        matlib2:=tglmateriallibrary.Create(nil);
        matlib3:=tglmateriallibrary.Create(nil);
        matlibkola:=tglmateriallibrary.create(nil);
        dr0:=false;
        jestprzegub:=false;
        jestsegC:=false;
        przyklek:=false;
        pojemnoscbusa:=30;
        przelozenie_k:=5;

        baza.ObjectsSorting:=osrenderblendedlast;

        podwozieA:=tgldummycube.Create(baza.AddNewChild(tgldummycube));podwozieA.Parent:=baza;

        podwozieA.up.Z:=-1;
        podwozieA.Up.x:=0;
        podwozieA.up.Y:=0;
        podwozieA.Position.z:=-15;
        podwozieA.Position.x:=15;

        czujnik:=tgldummycube.Create(podwoziea.addnewchild(tgldummycube));
        czujnik.Parent:=podwoziea;
        czujnik.Position.z:=1;

        podwozieB:=tgldummycube.Create(baza.AddNewChild(tgldummycube));podwozieB.Parent:=baza;

        podwozieb.up.Z:=-1;
        podwozieb.Up.x:=0;
        podwozieb.up.Y:=0;
        podwozieb.Position.z:=-15;
        podwozieb.Position.x:=15;

        tukaruzela:=tgldummycube.Create(baza.AddNewChild(tgldummycube));tukaruzela.Parent:=baza;
        tukaruzela.up.Z:=-1;
        tukaruzela.Up.x:=0;
        tukaruzela.up.Y:=0;

        tukaruzela2:=tgldummycube.Create(baza.AddNewChild(tgldummycube));tukaruzela2.Parent:=tukaruzela;
        tukaruzela2.up.Z:=-1;
        tukaruzela2.Up.x:=0;
        tukaruzela2.up.Y:=0;


        nadwozieA:=tgldummycube.Create(podwozieA.AddNewChild(tgldummycube));nadwozieA.Parent:=podwozieA;
        nadwozieA.rollangle:=-90;
        nadwozieB:=tgldummycube.Create(podwozieB.AddNewChild(tgldummycube));nadwozieB.Parent:=podwozieB;
        nadwozieB.RollAngle:=-90;

        dlakamery:=tgldummycube.Create(podwozieA);
        dlakamery.Parent:=podwozieA;
        dlakamery.pitchAngle:=90;

        os1L:=tgldummycube.Create(podwozieA.AddNewChild(tgldummycube));os1L.Parent:=podwozieA;
        os1P:=tgldummycube.Create(podwozieA.AddNewChild(tgldummycube));os1P.Parent:=podwozieA;
        os2:=tgldummycube.Create(podwozieA.AddNewChild(tgldummycube));os2.Parent:=podwozieA;
        os3:=tgldummycube.Create(podwozieA.AddNewChild(tgldummycube));os3.Parent:=podwozieA;
        koloL[1].bie:=tglcylinder.create(os1L);koloL[1].bie.parent:=os1L;
        koloP[1].bie:=tglcylinder.create(os1P);koloP[1].bie.parent:=os1P;
        koloL[2].bie:=tglcylinder.create( os2); koloL[2].bie.parent:=os2;
        koloP[2].bie:=tglcylinder.create( os2); koloP[2].bie.parent:=os2;
        koloL[3].bie:=tglcylinder.create( os3); koloL[3].bie.parent:=os3;
        koloP[3].bie:=tglcylinder.create( os3); koloP[3].bie.parent:=os3;

        koloL[1].felga:=tglcylinder.create(os1L);koloL[1].felga.parent:=os1L;
        koloP[1].felga:=tglcylinder.create(os1P);koloP[1].felga.parent:=os1P;
        koloL[2].felga:=tglcylinder.create( os2);koloL[2].felga.parent:=os2;
        koloP[2].felga:=tglcylinder.create( os2);koloP[2].felga.parent:=os2;
        koloL[3].felga:=tglcylinder.create( os3);koloL[3].felga.parent:=os3;
        koloP[3].felga:=tglcylinder.create( os3);koloP[3].felga.parent:=os3;
        for i:=1 to 3 do begin
                koloL[i].bie.Height:=0.3;
                koloP[i].bie.Height:=0.3;
                koloL[i].bie.Parts:=[cysides];
                koloP[i].bie.Parts:=[cysides];
                koloL[i].felga.Height:=0.3;
                koloP[i].felga.Height:=0.3;
                koloL[i].felga.Parts:=[cybottom];
                koloP[i].felga.Parts:=[cytop];
        end;

matlib3.Materials.Add;
matlib3.Materials.Add;
matlib3.Materials.Add;

with matlib3.Materials[0] do begin
        try
        Material.texture.image.loadfromfile('bmps\kierunek.bmp');
                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
        Name:='kierunek';
        material.texture.disabled:=false;
        material.blendingmode:=bmAdditive;

end;

with matlib3.Materials[1] do begin
        try
        Material.texture.image.loadfromfile('bmps\stop.bmp');
                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
        Name:='stop';
        material.texture.disabled:=false;
        material.blendingmode:=bmAdditive;

end;


with matlib3.Materials[2] do begin
        try
        Material.texture.image.loadfromfile('bmps\drog.bmp');
                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
        Name:='drog';
        material.texture.disabled:=false;
        material.blendingmode:=bmAdditive;

end;


        for i:=1 to 10 do begin
                s_kierunek[i]:=tglsprite.create(nadwozieA.AddNewChild(tglsprite));
                s_kierunek[i].NoZWrite:=true;
                s_kierunek[i].material.Materiallibrary:=matlib3;
                s_kierunek[i].Material.LibMaterialName:='kierunek';
                s_kierunek[i].Visible:=false;
        end;
        for i:=1 to 3 do begin
                s_stop[i]:=tglsprite.create(nadwozieA);
                s_stop[i].NoZWrite:=true;
                s_stop[i].material.Materiallibrary:=matlib3;
                s_stop[i].Material.LibMaterialName:='stop';
        end;

        k_kolumna:=tgldummycube.Create(podwozieA.AddNewChild(tgldummycube));
        k_kolumna.Parent:=nadwoziea;
        k_kolumna.pitchAngle:=-30;
     //   f5kam:=tglcoordinates.create(nil);

        for i:=1 to 8 do begin
                s_obrys[1,i]:=tglsprite.Create(nadwozieA.addnewchild(tglsprite));s_obrys[1,i].Parent:=nadwozieA;
                s_obrys[2,i]:=tglsprite.Create(nadwozieA.addnewchild(tglsprite));s_obrys[2,i].Parent:=nadwozieA;
                s_obrys[1,i].nozwrite:=true;
                s_obrys[2,i].nozwrite:=true;
                s_obrys[1,i].material.Materiallibrary:=matlib3;
                s_obrys[2,i].material.Materiallibrary:=matlib3;
                s_obrys[1,i].Material.LibMaterialName:='kierunek';
                s_obrys[2,i].Material.LibMaterialName:='kierunek';
                s_obrys[1,i].Scale.X:=0.25;
                s_obrys[1,i].Scale.Y:=0.25;
                s_obrys[1,i].Scale.z:=0.25;
                s_obrys[2,i].Scale.X:=0.25;
                s_obrys[2,i].Scale.Y:=0.25;
                s_obrys[2,i].Scale.z:=0.25;

        end;

        for i:=1 to 9 do begin
                s_pozyc[i]:=tglsprite.Create(nadwozieA.addnewchild(tglsprite));
                s_pozyc[i].Parent:=nadwozieA;
                s_pozyc[i].nozwrite:=true;
                s_pozyc[i].Material.MaterialLibrary:=matlib3;
                s_pozyc[i].Material.LibMaterialName:='drog';
        end;
        for i:=3 to 6 do begin
                s_pozyc[i].Material.LibMaterialName:='stop';
        end;
        for i:=1 to 4 do begin
                s_pozyc[i].scale.X:=0.25;
                s_pozyc[i].scale.y:=0.25;
                s_pozyc[i].scale.z:=0.25;
        end;
                s_pozyc[9].scale.X:=0.25;
                s_pozyc[9].scale.y:=0.25;
                s_pozyc[9].scale.z:=0.25;

        wysw_przod:=tglplane.Create(nadwozieA);
        wysw_tyl:=tglplane.Create(nadwozieA);
        wysw_bok:=tglplane.create(nadwozieA);
        wysw_bok_dwa:=tglplane.Create(nadwozieA);

        w1:=tgldummycube.create(nadwozieA);
        w2:=tgldummycube.create(nadwozieA);
        w3:=tgldummycube.create(nadwozieA);
        w4:=tgldummycube.create(nadwozieA);
        w1.up.z:=1;
        w1.up.X:=0;
        w1.up.y:=0;
        w2.up.z:=1;
        w2.up.X:=0;
        w2.up.y:=0;
        w3.up.z:=1;
        w3.up.X:=0;
        w3.up.y:=0;
        w4.up.z:=1;
        w4.up.X:=0;
        w4.up.y:=0;


        w1.Parent:=nadwozieA;
        w2.Parent:=nadwozieA;
        w3.Parent:=nadwozieA;
        w4.Parent:=nadwozieA;

        wysw_przod.Parent:=w1;
        wysw_bok.Parent:=w2;
        wysw_bok_dwa.Parent:=w3;
        wysw_tyl.Parent:=w4;

        wysw_przod.Scale.z:=-1;

        rej:=tglplane.Create(nadwoziea);
        rej1:=tglplane.Create(nadwoziea);

        rej.Parent:=nadwoziea;
        rej1.Parent:=nadwoziea;

        plama_p:=tglplane.Create(podwoziea);
        plama_t:=tglplane.Create(podwoziea);

        plama_p.Parent:=podwoziea;
        plama_t.Parent:=podwoziea;

        plama_p.pitchangle:=-90;
        plama_t.rollangle:=-90;

        plama_p.Scale.X:=0.5;
        plama_p.Scale.y:=0.5;
        plama_p.Scale.z:=0.5;

        plama_t.Scale.X:=0.5;
        plama_t.Scale.y:=0.5;
        plama_t.Scale.z:=0.5;



        szyja:=tgldummycube.create(nadwoziea);
        szyja.parent:=nadwoziea;

        k_kolo:=tglplane.create(k_kolumna);
        k_kolo.Parent:=k_kolumna;
        k_kolo.Material.Texture.Disabled:=false;
        k_kolo.Material.BlendingMode:=bmtransparency;
        k_kolo.material.Texture.ImageAlpha:=tiatopleftpointcolortransparent;
        k_kolo.Material.Texture.TextureMode:=tmreplace;
        k_kolo.Width:=0.6;
        k_kolo.Height:=0.6;

        kierunek:=0;
        strzala:=tglarrowline.Create(nadwoziea);
        strzala.Parent:=nadwoziea;
        strzala.Position.z:=3.5;
        strzala.pitchAngle:=90;
        strzala.Visible:=false;
        //strzala.ShowAxes:=true;

        strzala.Material.FrontProperties.diffuse.color:=clryellow;


        pA:=tgldummycube.Create(baza);
        pB:=tgldummycube.create(baza);
        pC:=tgldummycube.Create(baza);
        pD:=tgldummycube.create(baza);
        pA.Parent:=baza;
        pb.parent:=baza;
        pc.parent:=baza;
        pd.parent:=baza;
{        pA.ShowAxes:=true;
        pB.ShowAxes:=true;
        pC.ShowAxes:=true;
        pD.ShowAxes:=true;
 }

end;


constructor tbusz.create;
begin;
end;

procedure tbusz.wczytajbusa(_mname:string;_tname:string);
var f:textfile;
l,plik:string;
spdrz:real;
i:integer;
linnr:integer;
cdir:string;
kolorszyby:tglcolor;
lObj:TMeshObject;
t1, n1 : TAffineVectorList;
wczytanodeske:boolean;




procedure zrobswiatlo(baza_m:tglfreeform;des_m:tglfreeform;nazwa_m:string);
begin
        log.wriln('swiatlo '+nazwa_m);
        try
        des_m.Material:=baza_m.MaterialLibrary.LibMaterialByName(baza_m.MeshObjects[znazwy(baza_m,nazwa_m)].FaceGroups[0].materialname).material;
        des_m.MaterialLibrary:=baza_m.MaterialLibrary;
        if copy(nazwa_m,length(nazwa_m),1)='1' then des_m.Material.MaterialOptions:=[monolighting];
        except
        log.wriln('byzydura !');
        end;
        lObj := TMeshObject.CreateOwned(des_m.MeshObjects);
        t1   := TAffineVectorList.create;
        n1   := TAffineVectorList.create;
        lObj.Vertices := baza_m.MeshObjects[znazwy(baza_m,nazwa_m)].ExtractTriangles(t1,n1);
        lobj.Normals:=n1;
        lobj.TexCoords:=t1;
        baza_m.MeshObjects[znazwy(baza_m,nazwa_m)].Free;

end;

begin


noflare:=false;


wczytanodeske:=false;
kolorszyby:=tglcolor.Create(nil);
if not noc then
kolorszyby.SetColor(0.5,0.5,0.5,0.3)
else
kolorszyby.SetColor(0.5,0.5,0.5,0.1) ;
szyba:=tglmaterial.Create(nil);
szyba.BlendingMode:=bmtransparency;
szyba.FrontProperties.Diffuse:=kolorszyby;
log.wri('open '+'model\'+_mname+'\desc.bs1');
assignfile(f,'model\'+_mname+'\desc.bs1');
reset(f);
log.wriln('..ok');
liczbad:=0;
spdrz:=35;
linnr:=0;
setlength(ludzie,pojemnoscbusa+1);
pulpit:=tpulpit.create;
pulpit.baza:=nadwoziea;
pulpit.log:=log;
pulpit.init;



bl_kierunekL_1:=tglfreeform.Create(segbmesh);
bl_kierunekP_1:=tglfreeform.Create(segbmesh);
bl_kierunekL_0:=tglfreeform.Create(segbmesh);
bl_kierunekP_0:=tglfreeform.Create(segbmesh);
bl_wsteczny_1:=tglfreeform.Create(segbmesh);
bl_stop_1:=tglfreeform.Create(segbmesh);
bl_mijania_1:=tglfreeform.Create(segbmesh);
bl_wsteczny_0:=tglfreeform.Create(segbmesh);
bl_stop_0:=tglfreeform.Create(segbmesh);
bl_mijania_0:=tglfreeform.Create(segbmesh);




for i:=0 to 7 do begin drz[i]:=tdrzwi.create; drz[i].typ:=1; drz[i].sp:=spdrz; drz[i].szyba:=szyba; drz[i].szybki:=szybki; end;
repeat
        readln(f,l);inc(linnr);
        log.wri('model\'+_mname+'\desc.bs1'+'['+inttostr(linnr)+']:'+l );

        if copy(l,1,4)='BH 0' then begin
                blokhamulca:=false;

                end;



        if copy(l,1,2)='SK' then begin
                delete(l,1,3);
                przelozenie_k:=strtofloat(l)/10.0;
                end;

        if copy(l,1,2)='EN' then begin
                delete(l,1,pos('"',l));
                delete(l,pos('"',l),1);
                naped.wczytajsilnik(l);
                end;

        if copy(l,1,2)='GB' then begin
                delete(l,1,pos('"',l));
                delete(l,pos('"',l),1);
                naped.wczytajskrzynie(l);
                end;

        if copy(l,1,2)='BF' then begin
                delete(l,1,3);
                naped.cbraking:=strtofloat(l)
                end;

        if copy(l,1,2)='VW' then begin
                delete(l,1,3);
                naped.m:=StrTofloat(l);
           end;

        if copy(l,1,2)='MG' then begin
                delete(l,1,3);
                naped.xd:=StrTofloat(l);
           end;


        if copy(l,1,2)='KS' then begin
                delete(l,1,3);
                k_kolo.width:=strtofloat(l);
                k_kolo.Height:=k_kolo.width;
        end;

        if copy(l,1,2)='DU' then begin
                drz[strtoint(l[3])].typ:=strtoint(l[5]);
        end;

        if copy(l,1,2)='DV' then begin
                delete(l,1,3);
                spdrz:=strtoint(l);
                for i:=0 to 7 do drz[i].sp:=spdrz;

        end;

        if copy(l,1,2)='DW' then begin
                i:=strtoint(l[3]);
                delete(l,1,3);
                drz[i].sp:=strtoint(l);
        end;


        if copy(l,1,4)='NF 1' then begin
                noflare:=true;
        end;


        if copy(l,1,2)='MO' then begin
                delete(l,1,pos('"',l));
                plik:=copy(l,1,pos('"',l)-1);
                try
                segAmesh:=TGLFreeForm(nadwozieA.addnewchild(TGLFreeForm));
                                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
                segAmesh.MaterialLibrary:=matlib;
                segAmesh.UseMeshMaterials:=true;
                cdir:=getcurrentdir;
                matlib.TexturePaths:=cdir+'\temp;'+cdir+'\model\'+_mname+'\'+_tname;

        try
                log.wriln(cdir+'\model\'+_mname+'\'+plik);
                segAmesh.LoadFromFile(cdir+'\model\'+_mname+'\'+plik);
               // segAmesh.Parent:=baza;
                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
                setcurrentdir(cdir);

                drz[0].baza:=nadwozieA;
                drz[0].zrodlo:=segAmesh;
                log.wriln('De zero'+inttostr(drz[0].sprawdz('d0')));
                if drz[0].sprawdz('d0')>0 then begin
                                drz[0].zrob('d0');
                                log.wriln('drzwikierowcy');
                                dr0:=true;
                                end;

                for i:=1 to 4 do begin
                        drz[liczbad+1].baza:=nadwozieA;
                        drz[liczbad+1].zrodlo:=segAmesh;
                        log.wriln('drzwi '+inttostr(drz[liczbad+1].sprawdz('d'+inttostr(i)))+' '+inttostr(i));
                        if drz[liczbad+1].sprawdz('d'+inttostr(i))>0 then begin
                                drz[liczbad+1].zrob('d'+inttostr(i));
                                log.wriln('ok');

                                inc(liczbad);
                        end;
                end;
//nalepki
        if (znazwy(segAmesh,'b_3')>=0) then begin
                nalepki_A:=tglfreeform.Create(nadwozieA.addnewchild(TGLFreeForm)); nalepki_A.parent:=szybki;



                lObj := TMeshObject.CreateOwned(nalepki_A.MeshObjects);
                t1   := TAffineVectorList.create;
                n1   := TAffineVectorList.create;
                lObj.Vertices := segAmesh.MeshObjects[znazwy(segAmesh,'b_3')].ExtractTriangles(t1,n1);
                lobj.Normals:=n1;
                lobj.TexCoords:=t1;

                nalepki_a.MaterialLibrary:=segamesh.MaterialLibrary;
                nalepki_a.Material:=segamesh.MaterialLibrary.LibMaterialByName('b_3').material;
                nalepki_a.material.Texture.ImageAlpha:=tiatopleftpointcolortransparent;
                nalepki_a.material.Texture.TextureMode:=tmreplace;
                nalepki_a.material.BlendingMode:=bmtransparency;


                segAmesh.MeshObjects[znazwy(segAmesh,'b_3')].Free;

        end;

//// szyby
        if (znazwy(segAmesh,'b_2')>=0) then begin
                szyba_A:=tglfreeform.Create(nadwozieA.addnewchild(TGLFreeForm)); szyba_A.parent:=szybki;
                szyba_A.Material:=szyba;

                lObj := TMeshObject.CreateOwned(szyba_A.MeshObjects);
                t1   := TAffineVectorList.create;
                n1   := TAffineVectorList.create;
                lObj.Vertices := segAmesh.MeshObjects[znazwy(segAmesh,'b_2')].ExtractTriangles(t1,n1);
                lobj.Normals:=n1;
                lobj.TexCoords:=t1;
                segAmesh.MeshObjects[znazwy(segAmesh,'b_2')].Free;
        end;

//// szyby-koniec

        Al_kierunekL_1:=tglfreeform.Create(segAmesh);
        Al_kierunekP_1:=tglfreeform.Create(segAmesh);
        Al_kierunekL_0:=tglfreeform.Create(segAmesh);
        Al_kierunekP_0:=tglfreeform.Create(segAmesh);
        Al_wsteczny_1:=tglfreeform.Create(segAmesh);
        Al_stop_1:=tglfreeform.Create(segAmesh);
        Al_mijania_1:=tglfreeform.Create(segAmesh);
        Al_wsteczny_0:=tglfreeform.Create(segAmesh);
        Al_stop_0:=tglfreeform.Create(segAmesh);
        Al_mijania_0:=tglfreeform.Create(segAmesh);

        Al_kierunekP_1.Parent:=segamesh;
        Al_kierunekL_1.Parent:=segamesh;
        Al_kierunekL_0.Parent:=segamesh;
        Al_kierunekP_0.Parent:=segamesh;
        Al_wsteczny_1.Parent:=segamesh;
        Al_stop_1.Parent:=segamesh;
        Al_mijania_1.Parent:=segamesh;
        Al_wsteczny_0.Parent:=segamesh;
        Al_stop_0.Parent:=segamesh;
        Al_mijania_0.Parent:=segamesh;


        if (znazwy(segAmesh,'sw_S_0')>=0) then zrobswiatlo(segAmesh,Al_stop_0,'sw_S_0');
        if (znazwy(segAmesh,'sw_S_1')>=0) then zrobswiatlo(segAmesh,Al_stop_1,'sw_S_1');
        if (znazwy(segAmesh,'sw_IL_0')>=0) then zrobswiatlo(segAmesh,Al_kierunekL_0,'sw_IL_0');
        if (znazwy(segAmesh,'sw_IL_1')>=0) then zrobswiatlo(segAmesh,Al_kierunekL_1,'sw_IL_1');
        if (znazwy(segAmesh,'sw_IR_0')>=0) then zrobswiatlo(segAmesh,Al_kierunekP_0,'sw_IR_0');
        if (znazwy(segAmesh,'sw_IR_1')>=0) then zrobswiatlo(segAmesh,Al_kierunekP_1,'sw_IR_1');
        if (znazwy(segAmesh,'sw_R_0')>=0) then zrobswiatlo(segAmesh,Al_mijania_0,'sw_R_0');
        if (znazwy(segAmesh,'sw_R_1')>=0) then zrobswiatlo(segAmesh,Al_mijania_1,'sw_R_1');
        if (znazwy(segAmesh,'sw_CO_0')>=0) then zrobswiatlo(segAmesh,Al_wsteczny_0,'sw_CO_0');
        if (znazwy(segAmesh,'sw_CO_1')>=0) then zrobswiatlo(segAmesh,Al_wsteczny_1,'sw_CO_1');

        end;

        if copy(l,1,2)='MB' then begin
                delete(l,1,pos('"',l));
                plik:=copy(l,1,pos('"',l)-1);
//                pmodel2:=unit2.Form2.pmodel;
try
                segBmesh:=TGLFreeForm(nadwozieB.addnewchild(TGLFreeForm));
                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
                segBmesh.MaterialLibrary:=matlib;
                segBmesh.UseMeshMaterials:=true;
                cdir:=getcurrentdir;
                matlib.TexturePaths:=cdir+'\model\'+_mname+'\'+_tname;
                segBmesh.LoadFromFile(cdir+'\model\'+_mname+'\'+plik);
                setcurrentdir(cdir);
                for i:=1 to 4 do begin
                        drz[liczbad+1].baza:=segBmesh;
                        drz[liczbad+1].zrodlo:=segBmesh;
                        log.wriln('drzwi '+inttostr(drz[liczbad+1].sprawdz('d'+inttostr(i)))+' '+inttostr(i));
                        if drz[liczbad+1].sprawdz('d'+inttostr(i))>0 then begin
                                drz[liczbad+1].zrob('d'+inttostr(i));
                                log.wriln('ok');
                                inc(liczbad);
                        end;
                end;
//nalepki
        if (znazwy(segBmesh,'b_3')>=0) then begin
                nalepki_B:=tglfreeform.Create(nadwozieB.addnewchild(TGLFreeForm)); nalepki_b.parent:=szybki;



                lObj := TMeshObject.CreateOwned(nalepki_B.MeshObjects);
                t1   := TAffineVectorList.create;
                n1   := TAffineVectorList.create;
                lObj.Vertices := segBmesh.MeshObjects[znazwy(segBmesh,'b_3')].ExtractTriangles(t1,n1);
                lobj.Normals:=n1;
                lobj.TexCoords:=t1;

                nalepki_b.MaterialLibrary:=segamesh.MaterialLibrary;
                nalepki_b.Material:=segamesh.MaterialLibrary.LibMaterialByName('b_3').material;
                nalepki_b.material.Texture.ImageAlpha:=tiatopleftpointcolortransparent;
                nalepki_b.material.Texture.TextureMode:=tmreplace;
                nalepki_b.material.BlendingMode:=bmtransparency;


                segbmesh.MeshObjects[znazwy(segAmesh,'b_3')].Free;

        end;
//// szyby
        if (znazwy(segbmesh,'b_2')>=0) then begin
                szyba_B:=tglfreeform.Create(nadwozieB.addnewchild(TGLFreeForm)); szyba_B.parent:=szybki;
                szyba_B.Material:=szyba;
                lObj := TMeshObject.CreateOwned(szyba_B.MeshObjects);
                t1   := TAffineVectorList.create;
                n1   := TAffineVectorList.create;
                lObj.Vertices := segBmesh.MeshObjects[znazwy(segBmesh,'b_2')].ExtractTriangles(t1,n1);
                lobj.Normals:=n1;
                lobj.TexCoords:=t1;
                segBmesh.MeshObjects[znazwy(segBmesh,'b_2')].Free;
        end;
//// szyby-koniec

        bl_kierunekP_1.Parent:=segbmesh;
        bl_kierunekL_1.Parent:=segbmesh;
        bl_kierunekL_0.Parent:=segbmesh;
        bl_kierunekP_0.Parent:=segbmesh;
        bl_wsteczny_1.Parent:=segbmesh;
        bl_stop_1.Parent:=segbmesh;
        bl_mijania_1.Parent:=segbmesh;
        bl_wsteczny_0.Parent:=segbmesh;
        bl_stop_0.Parent:=segbmesh;
        bl_mijania_0.Parent:=segbmesh;

        if (znazwy(segbmesh,'sw_S_0')>=0) then zrobswiatlo(segbmesh,bl_stop_0,'sw_S_0');
        if (znazwy(segbmesh,'sw_S_1')>=0) then zrobswiatlo(segbmesh,bl_stop_1,'sw_S_1');
        if (znazwy(segbmesh,'sw_IL_0')>=0) then zrobswiatlo(segbmesh,bl_kierunekL_0,'sw_IL_0');
        if (znazwy(segbmesh,'sw_IL_1')>=0) then zrobswiatlo(segbmesh,bl_kierunekL_1,'sw_IL_1');
        if (znazwy(segbmesh,'sw_IR_0')>=0) then zrobswiatlo(segbmesh,bl_kierunekP_0,'sw_IR_0');
        if (znazwy(segbmesh,'sw_IR_1')>=0) then zrobswiatlo(segbmesh,bl_kierunekP_1,'sw_IR_1');
        if (znazwy(segbmesh,'sw_R_0')>=0) then zrobswiatlo(segbmesh,bl_mijania_0,'sw_R_0');
        if (znazwy(segbmesh,'sw_R_1')>=0) then zrobswiatlo(segbmesh,bl_mijania_1,'sw_R_1');
        if (znazwy(segbmesh,'sw_CO_0')>=0) then zrobswiatlo(segbmesh,bl_wsteczny_0,'sw_CO_0');
        if (znazwy(segbmesh,'sw_CO_1')>=0) then zrobswiatlo(segbmesh,bl_wsteczny_1,'sw_CO_1');




        end;

        if copy(l,1,2)='KA' then begin
                delete(l,1,pos('"',l));
                plik:=copy(l,1,pos('"',l)-1);
//                pmodel2:=unit2.Form2.pmodel;
try
                segCmesh:=TGLFreeForm(tukaruzela.addnewchild(TGLFreeForm));
                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
                segCmesh.MaterialLibrary:=matlib;
                segCmesh.UseMeshMaterials:=true;
                cdir:=getcurrentdir;
                matlib.TexturePaths:=cdir+'\model\'+_mname+'\'+_tname;
                segCmesh.LoadFromFile(cdir+'\model\'+_mname+'\'+plik);
                setcurrentdir(cdir);
                jestsegc:=true;
        end;



        if copy(l,1,2)='L1' then begin
                delete(l,1,pos(' ',l));
                dl_zaczepu:=strtofloat(l);
        end;

        if copy(l,1,2)='L2' then begin
                delete(l,1,pos(' ',l));
                dl_haka:=strtofloat(l);
        end;

        if copy(l,1,2)='TY' then begin
                delete(l,1,pos(' ',l));
                if copy(l,1,2)='DO' then begin os3.Visible:=false;
                end;
                if copy(l,1,2)='AR' then begin
                        os3.parent:=podwozieB;
//                        wysw_bok_dwa.Parent:=zaczepdlaprzeguba;
//                        wysw_tyl.Parent:=zaczepdlaprzeguba;

//                        d_op3.Parent:=zaczepdlaprzeguba;////

//                        plama_t.Parent:=kolo5.Parent;
//                        rej1.Parent:=kolo5.parent;
                        jestprzegub:=true;


                end;
        end;

        if copy(l,1,2)='O1' then begin
                delete(l,1,pos(' ',l));
                os1L.position.x:=strtofloat(l);
                os1P.position.x:=strtofloat(l);
//                .position.x:=0;
//                cylinder2.position.x:=0;
                rozstaw:=strtofloat(l);
        end;

        if copy(l,1,2)='O3' then begin
                delete(l,1,pos(' ',l));
                os3.position.x:=-strtofloat(l);
        end;


        if copy(l,1,2)='KR' then begin
                delete(l,1,pos(' ',l));

                for i:=2 to 3 do begin
                koloL[i].bie.Position.y:=-strtofloat(l)*0.5;
                koloP[i].bie.Position.y:=strtofloat(l)*0.5;
                koloL[i].felga.Position.Y:=-strtofloat(l)*0.5;
                koloP[i].felga.Position.y:=strtofloat(l)*0.5;

                end;
                os1L.Position.y:=-strtofloat(l)*0.5;
                os1P.Position.y:=strtofloat(l)*0.5;

        end;
        if copy(l,1,2)='KD' then begin
                delete(l,1,pos(' ',l));
                for i:=1 to 3 do begin
                koloL[i].bie.topRadius:=strtofloat(l)*0.5;
                koloL[i].bie.BottomRadius:=strtofloat(l)*0.5;
                koloP[i].bie.topRadius:=strtofloat(l)*0.5;
                koloP[i].bie.BottomRadius:=strtofloat(l)*0.5;
                koloL[i].felga.topRadius:=strtofloat(l)*0.5;
                koloL[i].felga.BottomRadius:=strtofloat(l)*0.5;
                koloP[i].felga.topRadius:=strtofloat(l)*0.5;
                koloP[i].felga.BottomRadius:=strtofloat(l)*0.5;
                end;
                os1L.Position.z:=strtofloat(l)*0.5;
                os1P.Position.z:=strtofloat(l)*0.5;
                os2.Position.z:=strtofloat(l)*0.5;
                os3.Position.z:=strtofloat(l)*0.5;
        end;
        if copy(l,1,1)='I' then begin
                i:=strtoint(copy(l,2,1));
                delete(l,1,pos(' ',l));
     //           s_kierunek[i].Parent:=nadwozieA;
     //           s_kierunek[i+3].Parent:=nadwozieA;

                s_kierunek[i].position.x:=strtofloat(paramnr(l,0));
                s_kierunek[i+5].position.x:=-strtofloat(paramnr(l,0));

                s_kierunek[i].position.y:=strtofloat(paramnr(l,1));
                s_kierunek[i+5].position.y:=strtofloat(paramnr(l,1));

                s_kierunek[i].position.z:=strtofloat(paramnr(l,2));
                s_kierunek[i+5].position.z:=strtofloat(paramnr(l,2));

        end;

        if (length(l)>2) and (l[1]='W') then begin
                i:=strtoint(l[2]);
              //  delete(l,1,3);
              //  ftemp:=strtofloat(paramnr(l,0));
                plik:=l;
                delete(plik,1,pos('"',plik));
                plik:=copy(plik,1,pos('"',plik)-1);
                log.wriln(plik);
                try
                meshkolo:=TGLFreeForm.create(nil);
                                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
                meshkolo.MaterialLibrary:=matlibkola;
                meshkolo.UseMeshMaterials:=true;
                cdir:=getcurrentdir;
                try
                matlibkola.TexturePaths:=cdir+'\temp;'+cdir+'\model\'+_mname+'\'+_tname;


                log.wriln(cdir+'\model\'+_mname+'\'+plik);
                meshkolo.LoadFromFile(cdir+'\model\'+_mname+'\'+plik);
                except
                on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                end;
                meshkolo.Parent:=kolol[i].bie;
                meshkolo.rollAngle:=90;

                kolol[i].bie.Height:=0;
                kolol[i].felga.Visible:=false;
                meshkolo.Visible:=true;
                try
                meshkolo:=TGLFreeForm.create(nil);
                                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
                meshkolo.MaterialLibrary:=matlibkola;
                meshkolo.UseMeshMaterials:=true;
                cdir:=getcurrentdir;
                matlib.TexturePaths:=cdir+'\temp;'+cdir+'\model\'+_mname+'\'+_tname;

                try
                log.wriln(cdir+'\model\'+_mname+'\'+plik);
                meshkolo.LoadFromFile(cdir+'\model\'+_mname+'\'+plik);
                except
                on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                end;
                meshkolo.Parent:=kolop[i].bie;
                meshkolo.rollAngle:=-90;

                kolop[i].bie.height:=0;

                kolop[i].felga.Visible:=false;


        end;

        if (length(l)>2) and (l[1]='S') and (l[2]>'0') and (l[2]<'4') then begin
                i:=strtoint(copy(l,2,1));
                delete(l,1,pos(' ',l));
//                if jestprzegub then
//                        s_stop[i].parent:=nadwozieB;

             //   s_stop[i].Material.MaterialLibrary:=matlib3;
             //   s_stop[i].material.LibMaterialName:='stop';
                s_stop[i].position.x:=strtofloat(paramnr(l,0));
                s_stop[i].position.y:=strtofloat(paramnr(l,1));
                s_stop[i].position.z:=strtofloat(paramnr(l,2));
        end;

        if copy(l,1,2)='SZ' then begin
                delete(l,1,3);
                if not noc then
                kolorszyby.SetColor(strtofloat(paramnr(l,0)),1,strtofloat(paramnr(l,2)),strtofloat(paramnr(l,3)))
                else
                kolorszyby.SetColor(1,strtofloat(paramnr(l,1)),strtofloat(paramnr(l,2)),strtofloat(paramnr(l,4)));
                szyba.FrontProperties.Diffuse:=kolorszyby;
        end;

        if copy(l,1,2)='DS' then begin
                delete(l,1,3);
                szyja.position.x:=strtofloat(paramnr(l,0));
                szyja.position.y:=strtofloat(paramnr(l,1));
                szyja.position.z:=strtofloat(paramnr(l,2));
        end;

        if copy(l,1,2)='DK' then begin
                delete(l,1,3);
                k_kolumna.Position.x:=strtofloat(paramnr(l,0));
                k_kolumna.Position.y:=strtofloat(paramnr(l,1));
                k_kolumna.Position.z:=strtofloat(paramnr(l,2));
        end;

        if copy(l,1,2)='PL' then begin
                delete(l,1,pos(' ',l));
                if (l='1') then przyklek:=true;
        end;

if (length(l)>1) and  (l[1]='B') and (l[2]>'0') and (l[2]<'9') then begin
                i:=strtoint(l[2]);
                delete(l,1,3);
                s_obrys[1,i].position.x:=strtofloat(paramnr(l,0));
                s_obrys[1,i].position.y:=strtofloat(paramnr(l,1));
                s_obrys[1,i].position.z:=strtofloat(paramnr(l,2));
        end;

if (length(l)>1) and (l[1]='A') and (l[2]>'0') and (l[2]<'9') then begin
                i:=strtoint(l[2]);
                delete(l,1,3);
                s_obrys[2,i].position.x:=strtofloat(paramnr(l,0));
                s_obrys[2,i].position.y:=strtofloat(paramnr(l,1));
                s_obrys[2,i].position.z:=strtofloat(paramnr(l,2));
        end;

if copy(l,1,2)='P1' then begin
                delete(l,1,3);
                s_pozyc[1].position.x:=strtofloat(paramnr(l,0));
                s_pozyc[1].position.y:=strtofloat(paramnr(l,1));
                s_pozyc[1].position.z:=strtofloat(paramnr(l,2));
end;
if copy(l,1,2)='P2' then begin
                delete(l,1,3);
                s_pozyc[2].position.x:=strtofloat(paramnr(l,0));
                s_pozyc[2].position.y:=strtofloat(paramnr(l,1));
                s_pozyc[2].position.z:=strtofloat(paramnr(l,2));
end;

if copy(l,1,2)='Y1' then begin
                delete(l,1,3);
                s_pozyc[3].position.x:=strtofloat(paramnr(l,0));
                s_pozyc[3].position.y:=strtofloat(paramnr(l,1));
                s_pozyc[3].position.z:=strtofloat(paramnr(l,2));
end;
if copy(l,1,2)='Y2' then begin
                delete(l,1,3);
                s_pozyc[4].position.x:=strtofloat(paramnr(l,0));
                s_pozyc[4].position.y:=strtofloat(paramnr(l,1));
                s_pozyc[4].position.z:=strtofloat(paramnr(l,2));
end;

if copy(l,1,2)='T1' then begin
                delete(l,1,3);
                s_pozyc[5].position.x:=strtofloat(paramnr(l,0));
                s_pozyc[5].position.y:=strtofloat(paramnr(l,1));
                s_pozyc[5].position.z:=strtofloat(paramnr(l,2));
end;
if copy(l,1,2)='T2' then begin
                delete(l,1,3);
                s_pozyc[6].position.x:=strtofloat(paramnr(l,0));
                s_pozyc[6].position.y:=strtofloat(paramnr(l,1));
                s_pozyc[6].position.z:=strtofloat(paramnr(l,2));
end;

if copy(l,1,2)='R1' then begin
                delete(l,1,3);
                s_pozyc[7].position.x:=strtofloat(paramnr(l,0));
                s_pozyc[7].position.y:=strtofloat(paramnr(l,1));
                s_pozyc[7].position.z:=strtofloat(paramnr(l,2));
end;
if copy(l,1,2)='R2' then begin
                delete(l,1,3);
                s_pozyc[8].position.x:=strtofloat(paramnr(l,0));
                s_pozyc[8].position.y:=strtofloat(paramnr(l,1));
                s_pozyc[8].position.z:=strtofloat(paramnr(l,2));
end;


if copy(l,1,2)='CO' then begin
                delete(l,1,3);
                s_pozyc[9].position.x:=strtofloat(paramnr(l,0));
                s_pozyc[9].position.y:=strtofloat(paramnr(l,1));
                s_pozyc[9].position.z:=strtofloat(paramnr(l,2));
end;

if copy(l,1,2)='PP' then begin
           delete(l,1,3);
           plama_p.Position.y:=strtofloat(paramnr(l,0));
           plama_p.Position.x:=strtofloat(paramnr(l,1));
           plama_p.Position.z:=strtofloat(paramnr(l,2))+0.1;
           plama_p.Width:=strtofloat(paramnr(l,3));
           plama_p.Height:=strtofloat(paramnr(l,4));
           plama_p.TurnAngle:=0;//strtofloat(paramnr(l,5));
           plama_p.PitchAngle:=0;//strtofloat(paramnr(l,6));
           plama_p.RollAngle:=-90;//strtofloat(paramnr(l,7));
           plama_p.material.texture.disabled:=false;
            end;
if copy(l,1,2)='PT' then begin
           delete(l,1,3);
           plama_t.Position.y:=strtofloat(paramnr(l,0));
           plama_t.Position.x:=strtofloat(paramnr(l,1));
           plama_t.Position.z:=strtofloat(paramnr(l,2));
           plama_t.Width:=strtofloat(paramnr(l,3));
           plama_t.Height:=strtofloat(paramnr(l,4));
           plama_t.TurnAngle:=0;//strtofloat(paramnr(l,5));
           plama_t.PitchAngle:=0;//strtofloat(paramnr(l,6));
           plama_t.RollAngle:=90;//strtofloat(paramnr(l,7));
           plama_t.material.texture.disabled:=false;
            end;

if copy(l,1,2)='RP' then begin
           delete(l,1,3);
           rej.Position.x:=strtofloat(paramnr(l,0));
           rej.Position.y:=strtofloat(paramnr(l,1));
           rej.Position.z:=strtofloat(paramnr(l,2));
           rej.Width:=strtofloat(paramnr(l,3));
           rej.Height:=strtofloat(paramnr(l,4));
           rej.TurnAngle:=180;//strtofloat(paramnr(l,5));
           rej.PitchAngle:=90;//strtofloat(paramnr(l,6));
           rej.RollAngle:=0;//strtofloat(paramnr(l,7));
           rej.material.texture.disabled:=false;

           end;
if copy(l,1,2)='RT' then begin
           delete(l,1,3);
           rej1.Position.x:=strtofloat(paramnr(l,0));
           rej1.Position.y:=strtofloat(paramnr(l,1));
           rej1.Position.z:=strtofloat(paramnr(l,2));
           rej1.Width:=strtofloat(paramnr(l,3));
           rej1.Height:=strtofloat(paramnr(l,4));
           rej1.TurnAngle:=0;//strtofloat(paramnr(l,5));
           rej1.PitchAngle:=-90;//strtofloat(paramnr(l,6));
           rej1.RollAngle:=0;//strtofloat(paramnr(l,7));
           rej1.material.texture.disabled:=false;

           end;
if copy(l,1,2)='CZ' then begin
                delete(l,1,pos(' ',l));
                pojemnoscbusa:=strtoint(l);
                setlength(ludzie,pojemnoscbusa+1);
               // log.wriln('setlen');
                for i:=1 to strtoint(l) do ludzie[i].def:=false;
                end;

if copy(l,1,2)='PA' then
                begin
                delete(l,1,3);
                dodajludzia(strtoint(paramnr(l,0)),
                        strtofloat(paramnr(l,1)),strtofloat(paramnr(l,2)),strtofloat(paramnr(l,3)),
                        strtofloat(paramnr(l,4)),strtoint(paramnr(l,5)),strtoint(paramnr(l,6)));
                end;

if (copy(l,1,2)='PU') and jestpulpit then
                begin
         //       log.wriln('&&&');
                delete(l,1,3);
                pulpit.wczytaj('model\'+_mname+'\'+copy(paramnr(l,0),2,length(paramnr(l,0))-2),
                strtofloat(paramnr(l,1)),
                strtofloat(paramnr(l,2)),
                strtofloat(paramnr(l,3))
                );
                pulpit.zrob;
                wczytanodeske:=true;
                end;

log.wriln('..ok');
until eof(f);
closefile(f);
log.wriln('file closed');



if not wczytanodeske then jestpulpit:=false;




        for i:=1 to 10 do begin
                s_kierunek[i].Parent:=nadwozieA;
        end;

        for i:=1 to 3 do begin
                s_stop[i].parent:=nadwozieA;
        end;

        for i:=1 to 8 do begin
                s_obrys[1,i].Parent:=nadwozieA;
                s_obrys[2,i].Parent:=nadwozieA;
        end;

        for i:=1 to 9 do begin
                s_pozyc[i].Parent:=nadwozieA;
        end;



if noflare then begin
        for i:=1 to 10 do begin
                s_kierunek[i].visible:=false;
        end;

        for i:=1 to 3 do begin
                s_stop[i].visible:=false;
        end;

        for i:=1 to 8 do begin
                s_obrys[1,i].visible:=false;
                s_obrys[2,i].visible:=false;
        end;

        for i:=1 to 9 do begin
                s_pozyc[i].visible:=false;
        end;

end;


weka.X:=posx;
weka.Y:=posy;
weka.ang:=dir*pi/180;


wekb.Y:=weka.Y+sin(dir*PI/180.0)*rozstaw;
wekb.x:=weka.x+cos(dir*PI/180.0)*rozstaw;

wekc.Y:=weka.Y-sin(dir*PI/180.0)*dl_haka;
wekc.x:=weka.x-cos(dir*PI/180.0)*dl_haka;

ocx:=wekc.x;
ocy:=wekc.Y;

wekd.Y:=weka.Y-sin(dir*PI/180.0+0.01)*(dl_haka+dl_zaczepu);
wekd.x:=weka.x-cos(dir*PI/180.0+0.01)*(dl_haka+dl_zaczepu);
ody:=wekd.y;
odx:=wekd.x;

log.wriln(format('A %f %f %f %f %f',[weka.x,weka.y,rozstaw,dl_haka,dl_zaczepu]));
log.wriln(format('B %f %f',[wekb.x,wekb.y]));
log.wriln(format('C %f %f',[wekc.x,wekc.y]));
log.wriln(format('D %f %f',[wekd.x,wekd.y]));


if jestprzegub then begin
//        log.wriln('JESTPRZEGUB');
//        if s_kierunek[3].Parent=nadwozieb then  log.wriln('NO1');
        s_kierunek[3].parent:=nadwozieb;
        s_kierunek[4].parent:=nadwozieb;
        s_kierunek[5].parent:=nadwozieb;
//        if s_kierunek[3].Parent=nadwozieb then  log.wriln('OK1');
//        if s_kierunek[6].Parent=nadwozieb then  log.wriln('NO2');
        s_kierunek[5+3].parent:=nadwozieb;
        s_kierunek[5+4].parent:=nadwozieb;
        s_kierunek[5+5].parent:=nadwozieb;
//        if s_kierunek[6].Parent=nadwozieb then  log.wriln('OK2');
        rej1.Parent:=nadwozieb;
        plama_t.Parent:=podwozieb;
        s_pozyc[9].Parent:=nadwozieb;
        for i:=3 to 6 do s_pozyc[i].Parent:=nadwozieb;

        for i:=5 to 8 do begin
                s_obrys[1,i].Parent:=nadwozieb;
                s_obrys[2,i].Parent:=nadwozieb;
                end;
        w3.Parent:=nadwozieb;
        w4.Parent:=nadwozieb;

        for i:=1 to 3 do s_stop[i].parent:=nadwozieB;
end;

matlib2.Materials.Add;
with matlib2.Materials[0] do begin
        try
        Material.texture.image.loadfromfile('model\'+_mname+'\'+_tname+'\bi.bmp');
                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
        Name:='bieznik';
        material.texture.disabled:=false;
end;

matlib2.Materials.Add;
with matlib2.Materials[1] do begin
        try
        Material.texture.image.loadfromfile('model\'+_mname+'\'+_tname+'\wh01.bmp');
                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
        Name:='wh01';
        material.texture.disabled:=false;
end;

matlib2.Materials.Add;
with matlib2.Materials[2] do begin
        try
        Material.texture.image.loadfromfile('model\'+_mname+'\'+_tname+'\wh02.bmp');
                                except
                                 on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
                                 end;
        Name:='wh02';
        material.texture.disabled:=false;
end;
for i:=1 to 3 do begin
koloP[i].bie.material.materiallibrary:=matlib2;
koloP[i].bie.material.LibMaterialName:='bieznik';
koloL[i].bie.material.materiallibrary:=matlib2;
koloL[i].bie.material.LibMaterialName:='bieznik';
koloL[i].felga.Material.MaterialLibrary:=matlib2;
koloP[i].felga.Material.MaterialLibrary:=matlib2;
end;

koloP[1].felga.material.libmaterialname:='wh01';
koloL[1].felga.material.libmaterialname:='wh01';

koloP[2].felga.material.libmaterialname:='wh02';
koloL[2].felga.material.libmaterialname:='wh02';

koloP[3].felga.material.libmaterialname:='wh01';
koloL[3].felga.material.libmaterialname:='wh01';




try
        rej.material.Texture.Image.LoadFromFile('model\'+_mname+'\'+_tname+'\rejp.bmp');
except
        on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
end;

try
        rej1.material.Texture.Image.LoadFromFile('model\'+_mname+'\'+_tname+'\rejt.bmp');
except
        on e: exception do log.wriln('cla- '+e.ClassName+' -WYJ- '+e.Message);
end;


k_kolo.Material.Texture.Image.LoadFromFile('model\'+_mname+'\kierownica.bmp');


plama_p.Material.Texture.Image.LoadFromFile('bmps\swiatlo.bmp');
plama_t.Material.Texture.Image.LoadFromFile('bmps\swiatlo2.bmp');
plama_p.Material.Texture.Disabled:=false;
plama_t.Material.Texture.Disabled:=false;
plama_p.material.blendingmode:=bmAdditive;
plama_t.material.blendingmode:=bmAdditive;
plama_p.nozwrite:=true;
plama_t.nozwrite:=true;
swiatla;




end;




























procedure tbusz.wczytajteksture(_mname:string;_tname:string);
var f:textfile;
linnr:integer;
l:string;
i:integer;
begin

log.wri('open '+'model\'+_mname+'\'+_tname+'\desc.ts1');
assignfile(f,'model\'+_mname+'\'+_tname+'\desc.ts1');
reset(f);
log.wriln('..ok');
linnr:=0;
repeat
        readln(f,l); inc(linnr);
        log.wri('model\'+_mname+'\'+_tname+'\desc.ts1'+'['+inttostr(linnr)+']:'+l );
        if copy(l,1,2)='WP' then begin
           delete(l,1,3);
           //log.wri('!');
           w1.Position.x:=strtofloat(paramnr(l,0));
           w1.Position.y:=strtofloat(paramnr(l,1));
           w1.Position.z:=strtofloat(paramnr(l,2));
           wysw_przod.Width:=strtofloat(paramnr(l,3));
           wysw_przod.Height:=strtofloat(paramnr(l,4));
           wysw_przod.TurnAngle:={180;//}strtofloat(paramnr(l,5))+90;
           wysw_przod.PitchAngle:={90;//}strtofloat(paramnr(l,6));
           wysw_przod.RollAngle:={0;//}strtofloat(paramnr(l,7));
           wysw_przod.material.texture.disabled:=false;
        {   log.wriln(format('\n%.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f ',
           [wysw_przod.Position.x,wysw_przod.Position.y,wysw_przod.Position.z  ,
           wysw_przod.width,wysw_przod.height,wysw_przod.TurnAngle,wysw_przod.PitchAngle,wysw_przod.RollAngle]));
        }   end;

if copy(l,1,2)='WJ' then begin
           delete(l,1,3);
           w2.Position.x:=strtofloat(paramnr(l,0));
           w2.Position.y:=strtofloat(paramnr(l,1));
           w2.Position.z:=strtofloat(paramnr(l,2));
           wysw_bok.Width:=strtofloat(paramnr(l,3));
           wysw_bok.Height:=strtofloat(paramnr(l,4));
           wysw_bok.TurnAngle:={90;//}strtofloat(paramnr(l,5))+90;
           wysw_bok.PitchAngle:={0;//}strtofloat(paramnr(l,6));
           wysw_bok.RollAngle:={90;//}strtofloat(paramnr(l,7));
           wysw_bok.material.texture.disabled:=false;
           end;

if copy(l,1,2)='WD' then begin
           delete(l,1,3);
           w3.Position.x:=strtofloat(paramnr(l,0));
           w3.Position.y:=strtofloat(paramnr(l,1));
           w3.Position.z:=strtofloat(paramnr(l,2));
           wysw_bok_dwa.Width:=strtofloat(paramnr(l,3));
           wysw_bok_dwa.Height:=strtofloat(paramnr(l,4));
           wysw_bok_dwa.TurnAngle:={90;//}strtofloat(paramnr(l,5))+90;
           wysw_bok_dwa.PitchAngle:={0;//}strtofloat(paramnr(l,6));
           wysw_bok_dwa.RollAngle:={90;//}strtofloat(paramnr(l,7));
           wysw_bok_dwa.material.texture.disabled:=false;
           end;

if copy(l,1,2)='WT' then begin
           delete(l,1,3);
           w4.Position.x:=strtofloat(paramnr(l,0));
           w4.Position.y:=strtofloat(paramnr(l,1));
           w4.Position.z:=strtofloat(paramnr(l,2));
           wysw_tyl.Width:=strtofloat(paramnr(l,3));
           wysw_tyl.Height:=strtofloat(paramnr(l,4));
           wysw_tyl.TurnAngle:={0;//}strtofloat(paramnr(l,5))+90;
           wysw_tyl.PitchAngle:={-90;//}strtofloat(paramnr(l,6));
           wysw_tyl.RollAngle:={0;//}strtofloat(paramnr(l,7));
           wysw_tyl.material.texture.disabled:=false;
            end;

if copy(l,1,2)='EP' then begin
{           delete(l,1,pos(' ',l));
           moc:=StrToInt(l);}
           end;




log.wriln('...ok');
until eof(f);
closefile(f);

drzwikierowcy;

  log.wriln('file closed');
if not rozmywanie then begin
  for i:=0 to matlib.Materials.count-1 do begin
   matlib.Materials[i].Material.texture.magfilter:=maNearest;
   matlib.Materials[i].Material.texture.minfilter:=miNearest;
   end;
  for i:=0 to matlib2.Materials.count-1 do begin
   matlib2.Materials[i].Material.texture.minfilter:=miNearest;
   matlib2.Materials[i].Material.texture.magfilter:=maNearest;
end;
 for i:=0 to matlib3.Materials.count-1 do begin
   matlib3.Materials[i].Material.texture.minfilter:=miNearest;
   matlib3.Materials[i].Material.texture.magfilter:=maNearest;
  end;
  end;
log.wriln('wtex - ok');
end;



function tbusz.iter(A:XY;B:XY;alfa:real;r:real;prob:real):XY;
var ret:XY;
krok:real;
i:integer;
oodl,odl,tx,ty:real;
begin
      //  log.wriln(format('# %.5f %.5f %.5f %.5f %.5f %.5f %.5f',[a.x,a.y,b.x,b.y,alfa,r,prob]));
        prob:=prob*0.5;
        krok:=prob;
        i:=0;
        tx:=B.x+cos(alfa)*prob-a.x;
        ty:=b.Y+sin(alfa)*prob-a.y;
        odl:=r-sqrt(sqr(tx)+sqr(ty));
        oodl:=odl;
    //    log.wriln(format('! %.5f %.5f %.5f',[odl,prob,abs(odl-r)]));
        if (abs(odl)>0.001) then
        while (i<100) and (abs(odl)>0.001) do begin
                inc(i);
                tx:=B.x+cos(alfa)*prob-a.x;
                ty:=b.Y+sin(alfa)*prob-a.y;
                odl:=r-sqrt(sqr(tx)+sqr(ty));
                if (odl*oodl<0) then krok:=-krok*0.5;
                prob:=prob+krok;
                oodl:=odl;
               // log.wriln(format('%f %f %f',[odl,prob,abs(odl-r)]));
        end;

        ret.x:=tx+a.x;
        ret.y:=ty+a.y;
        log.wriln(format('ret %.5f %.5f %d',[ret.x,ret.y,i]));
        iter:=ret;
end;


procedure tbusz.policz(dt:double);
var ds:real;
i:integer;
t_fl:real;

//ddir:real;
adosr:real;

alfa,beta,omega:real;

tr_alfa,tr_beta,tr_gamma:real;
tr_a,tr_b,tr_c:real;
odl,sd_d:real;
sd_dx,sd_dy:real;
tb_1,tb_2:real;
begin
        naped.licz(dt);


//        ddir:=naped.v*sin(kierownica*przelozenie_k*PI/180.0)/rozstaw*180/PI;

//        dir:=dir-ddir*dt;


        ds:=naped.v*dt+naped.a*dt*dt*0.5;
        kilom:=kilom+abs(ds)*0.001;
//        posx:=posx+cos(dir*PI/180)*ds;
//        posy:=posy-sin(dir*pi/180)*ds;

      //  if dir<0 then dir:=dir+360;
      //  if dir>360 then dir:=dir-360;

        t_fl:=-ds/naped.Rw*180/PI;

        for i:=1 to 3 do begin
                koloL[i].felga.turn(t_fl);
                koloP[i].felga.turn(t_fl);
                koloL[i].bie.Turn(t_fl);
                koloP[i].bie.Turn(t_fl);
        end;

        k_kolo.rollAngle:=-kierownica*360*1/9;

        {@@}
       if not noflare then begin  for i:=1 to 3 do s_stop[i].Visible:=stop;end;
  {        for i:=1 to 3 do s_stop[i].Visible:=false;}
        al_stop_0.Visible:=not stop;
        al_stop_1.Visible:=stop;
        bl_stop_0.Visible:=not stop;
        bl_stop_1.Visible:=stop;


        if (naped.bieg<0 )and( not noflare )then s_pozyc[9].Visible:=true else s_pozyc[9].Visible:=false;
{@@} {       s_pozyc[9].Visible:=false;   }

        if naped.bieg<0 then al_wsteczny_1.Visible:=true else al_wsteczny_1.Visible:=false;
        al_wsteczny_0.visible:=not al_wsteczny_1.visible;

        bl_wsteczny_0.Visible:=al_wsteczny_0.visible;
        bl_wsteczny_1.Visible:=al_wsteczny_1.visible;

        if opusz=1 then nadwoziea.turnangle:=nadwoziea.turnangle+(1*dt);
        if (opusz=1) and (nadwoziea.turnangle>3) then begin opusz:=3; nadwoziea.turnangle:=3; end;
        if opusz=2 then nadwoziea.turnangle:=nadwoziea.turnangle-1*dt;
        if (opusz=2) and (nadwoziea.turnangle<0) then begin opusz:=0; nadwoziea.turnangle:=0; end;

        adosr:=naped.v*naped.v*sin(kierownica*przelozenie_k*pi/180)/rozstaw;

        if opusz=0 then nadwoziea.TurnAngle:=-adosr*wychyl;

        nadwozieb.TurnAngle:=nadwoziea.TurnAngle;
     //   tukaruzela.TurnAngle:=-nadwoziea.TurnAngle;
if jestsegc then   segcmesh.turnangle:=-nadwoziea.TurnAngle;


        wekA.V:=ds;
        alfa:=kierownica*przelozenie_k*pi/180;
        omega:=naped.v/rozstaw*tan(alfa);
        weka.ang:=weka.ang+dt*omega;
        wekA.X:=wekA.X+cos(wekA.ang)*weka.V;
        wekA.Y:=wekA.Y+sin(WekA.ang)*wekA.V;
        wekB.X:=weka.X+cos(wekA.ang)*rozstaw;
        wekB.y:=weka.y+sin(wekA.ang)*rozstaw;
        wekb.ang:=weka.ang+alfa;

        posx:=weka.X;
        posy:=weka.Y;
        dir:=weka.ang*180/pi;


//        wekb.X:=t_b.x;
//        wekb.Y:=t_b.y;



        if jestprzegub then begin

                wekC.X:=wekA.X-cos(wekA.ang)*dl_haka;
                wekc.Y:=weka.Y-sin(weka.ang)*dl_haka;

                beta:=arctan(dl_haka*tan(alfa)/rozstaw);
                wekc.ang:=weka.ang-beta;
//                wekc.V:=dt*naped.v/rozstaw*tan(beta)*dl_haka/sin(arctan(dl_haka*tan(kierownica*przelozenie_k*pi/180)/rozstaw));

//                Ra:=rozstaw/tan(beta);
//                wekc.v:=omega*dl_haka/tan(beta);

            {    wekc.X:=wekc.x+cos(wekc.ang)*wekc.v;
                wekc.y:=wekc.y+sin(wekc.ang)*wekc.y;     }


//z tw sinusow

        tr_a:=sqrt(sqr(wekc.X-ocx)+sqr(wekc.Y-ocy));
        tr_b:=dl_zaczepu;
      //  if tr_a>tr_b then tr_a:=tr_b;
        //szukany tr_c
//        tr_beta:=arctan2(wekc.y-ocy,wekc.x-ocx)-arctan2(ody-ocy,odx-ocx);

        tb_1:=arctan2(wekc.y-ocy,wekc.x-ocx);
        if tb_1<-pi then tb_1:=tb_1+2*pi;
        if tb_1>pi then tb_1:=tb_1-2*pi;
        tb_2:=arctan2(ody-ocy,odx-ocx);
        if tb_2<-pi then tb_2:=tb_2+2*pi;
        if tb_2>pi then tb_2:=tb_2-2*pi;
        tr_beta:=tb_1-tb_2;
        if tr_beta<-pi then tr_beta:=tr_beta+2*pi;
        if tr_beta>pi then tr_beta:=tr_beta-2*pi;

     {   if tr_beta<-pi then tr_beta:=tr_beta+pi;
        if tr_beta>pi then tr_beta:=tr_beta-pi;        }
        if (tr_beta<pi-0.1) and (tr_beta>-pi+0.1) then begin
        tr_alfa:=arcsin(sin(tr_beta)*tr_a/tr_b);
        tr_gamma:=pi-tr_beta-tr_alfa;
        tr_c:=tr_B*sin(tr_gamma)/sin(tr_beta);
// przebyty odcinek
        sd_d:=dl_zaczepu-tr_c;
        end else sd_d:=ds;

//log.wri(format('* %.5f %.5f %.5f ',[tr_beta*180/pi,tb_1*180/pi,tb_2*180/pi]));
 //        log.wri(format('* %.5f %.5f %.5f %.5f %.5f %.5f %.5f',[tr_a,tr_b,tr_beta*180/pi,tr_alfa*180/pi,tr_gamma*180/pi,tr_c,tr_a/tr_b]));
//        log.wri(format('%.5f %.5f %.5f %.5f',[weka.x,weka.y,ocx,ocy]));
        tr_a:=arctan2(wekc.y-ody,wekc.x-odx);
     //   tr_a:=tb_2+pi;
//        kx:=odx
        sd_dx:=cos(tr_a)*sd_d;
        sd_dy:=sin(tr_a)*sd_d;

        odl:=sqrt(sqr(odx+sd_dx-wekc.x)+sqr(ody+sd_dy-wekc.y));
  //      log.wri(format(' %.5f',[odl]));
        odl:=odl/dl_zaczepu;
   //   odl:=dl_zaczepu/odl;
 //       odl:=1;
        odx:=odx+sd_dx*odl;
        ody:=ody+sd_dy*odl;
    //    tr_a:=arctan2(ocy-ody,ocx-odx); ////??

  //      odl:=sqrt(sqr(odx+sd_dx-wekc.x)+sqr(ody+sd_dy-wekc.y));
 //       log.wriln(format(' %.5f',[odl]));


        wekd.X:=odx;
        wekd.y:=ody;
        wekd.ang:=arctan2(wekc.y-ody,wekc.x-odx);

        ocx:=wekc.X;
        ocy:=wekc.Y;
             //   wekc.ang:=wekc.ang+kierownica*przelozenie_k*pi/180;

              {  tc.x:=wekc.x;
                tc.y:=wekc.y;
                td.x:=wekd.x;
                td.Y:=wekd.Y;
                t_b:=iter(tc,td,wekd.ang,dl_zaczepu,ds);
                wekd.X:=t_b.x;
                wekd.Y:=t_b.y;
                wekd.ang:=arctan2(tc.Y-td.y,tc.x-td.x);    }
        end;



     //   log.wriln(format('* %.5f %.5f',[t_b.x,t_b.y]));




end;

procedure tbusz.rusz(dt:double);
  var i:integer;
begin

        pA.Position.X:=wekA.X;
        pA.Position.z:=wekA.y;
        pa.TurnAngle:=-weka.ang*180.0/PI;

        pB.Position.X:=wekB.x;
        pb.Position.z:=wekb.y;
        pb.TurnAngle:=-wekb.ang*180.0/PI;


        pc.Position.X:=wekc.x;
        pc.Position.z:=wekc.y;
        pc.TurnAngle:=-wekc.ang*180.0/PI;


        pd.Position.X:=wekd.x;
        pd.Position.z:=wekd.y;
        pd.TurnAngle:=-wekd.ang*180.0/PI;

{        podwozieA.Position.z:=posy;
        podwozieA.Position.X:=posx;
        podwozieA.RollAngle:=dir;
        podwozieb.position.x:=segb.px;
        podwozieb.position.z:=segb.py;
        }

        podwozieA.Position.z:=weka.y;
        podwozieA.Position.X:=weka.x;
        podwozieA.RollAngle:=-weka.ang*180.0/PI;

        if jestprzegub then begin
                podwozieb.position.x:=wekd.x;
                podwozieb.position.z:=wekd.y;
                podwozieb.RollAngle:=-wekd.ang*180.0/PI;


           //     segban:=-arctan2(segb.Ay-segb.py,segb.ax-segb.px)*180/pi;
          //      while (segban<dir-180) do segban:=segban+360;
          //      while (segban>dir+180) do segban:=segban-360;
       //          podwozieb.rollAngle:=segban;

        if (szyba_b<>nil) then begin
                szyba_b.absoluteposition:=nadwozieb.absoluteposition;
                szyba_b.AbsoluteDirection:=nadwozieb.AbsoluteDirection;
                szyba_b.AbsoluteUp:=nadwozieb.Absoluteup;
        end;
        if (nalepki_b<>nil) then begin
                nalepki_b.absoluteposition:=nadwozieb.absoluteposition;
                nalepki_b.AbsoluteDirection:=nadwozieb.AbsoluteDirection;
                nalepki_b.AbsoluteUp:=nadwozieb.Absoluteup;
        end;


        end;
        if jestsegc then begin
                tukaruzela.position.x:=wekc.x;
                tukaruzela.position.z:=wekc.y;
//                segcan:=(segban+dir)*0.5;
                tukaruzela.rollangle:=-(wekd.ang+weka.ang)*0.5*180/pi+90;
     //           tukaruzela.rollangle:=+(weka.ang+wekc.ang+*180.0/PI;
        end;


        os1P.rollAngle:=-kierownica*przelozenie_k;
        os1L.rollAngle:=-kierownica*przelozenie_k;

        if (szyba_a<>nil) then begin
        szyba_a.absoluteposition:=nadwoziea.absoluteposition;
        szyba_a.AbsoluteDirection:=nadwoziea.AbsoluteDirection;
        szyba_a.AbsoluteUp:=nadwoziea.Absoluteup;
        end;
        if (nalepki_a<>nil) then begin
        nalepki_a.absoluteposition:=nadwoziea.absoluteposition;
        nalepki_a.AbsoluteDirection:=nadwoziea.AbsoluteDirection;
        nalepki_a.AbsoluteUp:=nadwoziea.Absoluteup;
        end;

        if dr0 then drz[0].rusz(dt);
        for i:=1 to liczbad do drz[i].rusz(dt);

        if jestpulpit then begin
        if kierunek=3 then pulpit.status[12]:=true else pulpit.status[12]:=false;
        pulpit.status[18]:=false;
        pulpit.status[19]:=false;
        if kierunek=1 then pulpit.status[18]:=true;
        if kierunek=2 then pulpit.status[19]:=true;
        pulpit.status[21]:=false;
        pulpit.status[22]:=false;
        pulpit.status[23]:=false;
        if naped.bieg>0 then pulpit.status[21]:=true;
        if naped.bieg=0 then pulpit.status[22]:=true;
        if naped.bieg=-1 then pulpit.status[23]:=true;
        pulpit.status[13]:=stop;
        pulpit.status[16]:=naped.dziala;
        pulpit.ws[1].poz:=max(0,(naped.v-2.7)*7.7);   //8
        pulpit.ws[2].poz:=naped.rpm*0.09;   //0.07
        pulpit.rusz;
        end;

end;

procedure tbusz.swiatla;
var i:integer;
begin
        if not noflare then
        for i:=1 to 8 do begin
                s_pozyc[i].Visible:=not s_pozyc[i].Visible;
                s_obrys[1,i].Visible:=not s_obrys[1,i].Visible;
                s_obrys[2,i].Visible:=not s_obrys[2,i].Visible;
               end;
               {@@}
{        for i:=1 to 8 do begin
                s_pozyc[i].Visible:=false;
                s_obrys[1,i].Visible:=false;
                s_obrys[2,i].Visible:=false;
               end;
 }
        plama_p.visible:=not plama_p.visible;
        plama_t.visible:=not plama_t.visible;
        pulpit.status[15]:=plama_p.Visible;
        Al_mijania_1.Visible:=plama_p.Visible;
        Al_mijania_0.visible:=not plama_p.visible;
        bl_mijania_1.Visible:=plama_p.Visible;
        bl_mijania_0.visible:=not plama_p.visible;

end;

procedure tbusz.migaj;
var i:integer;
begin
mig:=not mig;
{@@}

for i:=1 to 10 do
if not noflare then begin
        s_kierunek[i].Visible:=false;
end;        
      Al_kierunekp_1.Visible:=false;
      Al_kierunekl_1.Visible:=false;
      bl_kierunekp_1.Visible:=false;
      bl_kierunekl_1.Visible:=false;


if kierunek=0 then begin
        mig:=false;
        pulpit.status[14]:=false;
    {@@}  if not noflare then begin  for i:=1 to 10 do s_kierunek[i].Visible:=false; end;
        end else pulpit.status[14]:=mig;
if (kierunek=1) or (kierunek=3) then begin
      {@@}  if not noflare then begin for i:=1 to 5 do s_kierunek[i].Visible:=mig; end;
      Al_kierunekp_1.Visible:=mig;
      bl_kierunekp_1.Visible:=mig;
     //   pulpit.status[14]:=true;
end;
if (kierunek=2) or (kierunek=3) then begin
   {@@} if not noflare then begin    for i:=6 to 10 do s_kierunek[i].Visible:=mig; end;
      Al_kierunekl_1.Visible:=mig;
      bl_kierunekl_1.Visible:=mig;

    //    pulpit.status[14]:=true;
end;
      al_kierunekp_0.visible:=not al_kierunekp_1.visible;
      al_kierunekl_0.visible:=not al_kierunekl_1.visible;
      bl_kierunekp_0.visible:=not bl_kierunekp_1.visible;
      bl_kierunekl_0.visible:=not bl_kierunekl_1.visible;

end;

 procedure tbusz.drzwikierowcy;
var lObj:TMeshObject;
t1, n1 : TAffineVectorList;

 begin
 dkier1_1:=tglfreeform.Create(nadwozieA.addnewchild(TGLFreeForm)); dkier1_1.parent:=nadwozieA;
 dkier1_2:=tglfreeform.Create(nadwozieA.addnewchild(TGLFreeForm)); dkier1_2.parent:=nadwozieA; dkier1_2.material:=szyba;
 dkier2_1:=tglfreeform.Create(nadwozieA.addnewchild(TGLFreeForm)); dkier2_1.parent:=nadwozieA;
 dkier2_2:=tglfreeform.Create(nadwozieA.addnewchild(TGLFreeForm)); dkier2_2.parent:=nadwozieA; dkier2_2.material:=szyba;

         if (znazwy(segAmesh,'dkier1_1')>=0) then begin
                lObj := TMeshObject.CreateOwned(dkier1_1.MeshObjects);
                t1   := TAffineVectorList.create;
                n1   := TAffineVectorList.create;
                lObj.Vertices := segAmesh.MeshObjects[znazwy(segAmesh,'dkier1_1')].ExtractTriangles(t1,n1);
                lobj.Normals:=n1;
                lobj.TexCoords:=t1;
                segAmesh.MeshObjects[znazwy(segAmesh,'dkier1_1')].Free;
        end;

         if (znazwy(segAmesh,'dkier1_2')>=0) then begin
                lObj := TMeshObject.CreateOwned(dkier1_2.MeshObjects);
                t1   := TAffineVectorList.create;
                n1   := TAffineVectorList.create;
                lObj.Vertices := segAmesh.MeshObjects[znazwy(segAmesh,'dkier1_2')].ExtractTriangles(t1,n1);
                lobj.Normals:=n1;
                lobj.TexCoords:=t1;
                segAmesh.MeshObjects[znazwy(segAmesh,'dkier1_2')].Free;
        end;

         if (znazwy(segAmesh,'dkier2_1')>=0) then begin
                lObj := TMeshObject.CreateOwned(dkier2_1.MeshObjects);
                t1   := TAffineVectorList.create;
                n1   := TAffineVectorList.create;
                lObj.Vertices := segAmesh.MeshObjects[znazwy(segAmesh,'dkier2_1')].ExtractTriangles(t1,n1);
                lobj.Normals:=n1;
                lobj.TexCoords:=t1;
                segAmesh.MeshObjects[znazwy(segAmesh,'dkier2_1')].Free;
        end;

         if (znazwy(segAmesh,'dkier2_2')>=0) then begin
                lObj := TMeshObject.CreateOwned(dkier2_2.MeshObjects);
                t1   := TAffineVectorList.create;
                n1   := TAffineVectorList.create;
                lObj.Vertices := segAmesh.MeshObjects[znazwy(segAmesh,'dkier2_2')].ExtractTriangles(t1,n1);
                lobj.Normals:=n1;
                lobj.TexCoords:=t1;
                segAmesh.MeshObjects[znazwy(segAmesh,'dkier2_2')].Free;
        end;
        dk_rusz(2);
 end;

 procedure tbusz.dk_rusz(a:integer);
 begin
 if (a=1) then dk:=1;
 if (a=2) then dk:=2;
 if (a=3) then if (dk=1) then dk:=2 else dk:=1;

 if dk=1 then begin
 dkier1_1.Visible:=false;
 dkier1_2.Visible:=false;
 dkier2_1.Visible:=true;
 dkier2_2.Visible:=true;
 end else begin
 dkier2_1.Visible:=false;
 dkier2_2.Visible:=false;
 dkier1_1.Visible:=true;
 dkier1_2.Visible:=true;
end;

 end;



end.
