Показать сообщение отдельно
Старый 23.12.2013, 09:15   #145
lacota
Местный
 
Аватар для lacota
 
Регистрация: 12.03.2009
Адрес: Саратов
Сообщений: 2,943
Отправить сообщение для lacota с помощью ICQ
По умолчанию

Цитата:
Сообщение от Vasya Посмотреть сообщение
Поковырял FM водоплавающего Авенжера...
Берем DJ и ковыряем класс Gear....
Это чтоб иметь представления о параметрах, которыми приходится оперировать в ФМ...

Код:
........
    public void ground(FlightModel flightmodel, boolean flag, boolean flag1)
    {
        FM = flightmodel;
        bIsMaster = flag;
        onGround = flag1;
        FM.Vrel.x = -FM.Vwld.x;
        FM.Vrel.y = -FM.Vwld.y;
        FM.Vrel.z = -FM.Vwld.z;
        for(int i = 0; i < 2; i++)
            if(fatigue[i] > 0)
                fatigue[i]--;

        Pn.set(FM.Loc);
        Pn.z = Engine.cur.land.HQ(Pn.x, Pn.y);
        double d1 = Pn.z;
        screenHQ = d1;
        if(FM.Loc.z - d1 > 50D && !bFlatTopGearCheck)
        {
            turnOffEffects();
            arrestorVSink = -50F;
            return;
        }
        isWater = Engine.cur.land.isWater(Pn.x, Pn.y);
        if(isWater)
            roughness = 0.5D;
        D0 = Engine.cur.land.EQN(Pn.x, Pn.y, Normal);
        bUnderDeck = false;
        BigshipGeneric bigshipgeneric = null;
        if(bFlatTopGearCheck)
        {
            corn.set(FM.Loc);
            corn1.set(FM.Loc);
            corn1.z -= 20D;
            Actor actor = Engine.collideEnv().getLine(corn, corn1, false, clipFilter, Pship);
            if(actor instanceof BigshipGeneric)
            {
                Pn.z = Pship.z + 0.5D;
                d1 = Pn.z;
                isWater = false;
                bUnderDeck = true;
                actor.getSpeed(Vship);
                FM.Vrel.add(Vship);
                bigshipgeneric = (BigshipGeneric)actor;
                bigshipgeneric.addRockingSpeed(FM.Vrel, Normal, FM.Loc);
                if(flightmodel.AS.isMaster() && bigshipgeneric.getAirport() != null && flightmodel.CT.bHasArrestorControl)
                {
                    if(!bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor) && FM.Vrel.lengthSquared() > 10D && flightmodel.CT.getArrestor() > 0.1F)
                    {
                        bigshipgeneric.requestTowAircraft((Aircraft)flightmodel.actor);
                        if(bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor))
                        {
                            flightmodel.AS.setFlatTopString(bigshipgeneric, bigshipgeneric.towPortNum);
                            if((FM instanceof RealFlightModel) && bIsMaster && ((RealFlightModel)FM).isRealMode())
                                ((RealFlightModel)FM).producedShakeLevel = 5F;
                            ((Aircraft)flightmodel.actor).sfxTow();
                        }
                    }
                    if(bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor) && FM.Vrel.lengthSquared() < 1.0D && World.Rnd().nextFloat() < 0.008F)
                    {
                        bigshipgeneric.requestDetowAircraft((Aircraft)flightmodel.actor);
                        flightmodel.AS.setFlatTopString(bigshipgeneric, -1);
                    }
                }
                if(bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor))
                {
                    int k = bigshipgeneric.towPortNum;
                    Point3d apoint3d[] = bigshipgeneric.getShipProp().propAirport.towPRel;
                    bigshipgeneric.pos.getAbs(l0);
                    l0.transform(apoint3d[k * 2], p0);
                    l0.transform(apoint3d[k * 2 + 1], p1);
                    p0.x = 0.5D * (p0.x + p1.x);
                    p0.y = 0.5D * (p0.y + p1.y);
                    p0.z = 0.5D * (p0.z + p1.z);
                    flightmodel.actor.pos.getAbs(l0);
                    l0.transformInv(p0);
                    l0.set(0.0D, 0.0D, 0.0D, 0.0F, 0.0F, 0.0F);
                    bigshipgeneric.towHook.computePos(flightmodel.actor, new Loc(l0), l0);
                    v0.sub(p0, l0.getPoint());
                    if(v0.x > 0.0D)
                    {
                        if(bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor))
                        {
                            bigshipgeneric.requestDetowAircraft((Aircraft)flightmodel.actor);
                            flightmodel.AS.setFlatTopString(bigshipgeneric, -1);
                        }
                    } else
                    {
                        tmpV.set(FM.Vrel);
                        flightmodel.actor.pos.getAbsOrient().transformInv(tmpV);
                        if(tmpV.x < 0.0D)
                        {
                            double d3 = v0.length();
                            v0.normalize();
                            arrestorVAngle = (float)Math.toDegrees(Math.asin(v0.z));
                            v0.scale(1000D * d3);
                            flightmodel.GF.add(v0);
                            v0.scale(0.29999999999999999D);
                            v0.cross(l0.getPoint(), v0);
                            flightmodel.GM.add(v0);
                        }
                    }
                } else
                {
                    arrestorVAngle = 0.0F;
                }
            }
        }
.........
__________________
Гуси летят....
lacota вне форума   Ответить с цитированием