Показать сообщение отдельно
Старый 18.03.2016, 20:04   #676
Vasya
Звичайна людина на Землі
 
Аватар для Vasya
 
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 8,311
Радость

Исследовал Ме-110Н-4 по прозьбе онлайн-ресурса на предмет сделать поведения компаса подобным как в патче 4.12.2 у дефолтного Ме-110.
В дефолте так:
Код:
public boolean tick()
        {
            BF_110G2 _tmp = (BF_110G2)aircraft();
            if(BF_110G2.bChangedPit)
            {
                reflectPlaneToModel();
                BF_110G2 _tmp1 = (BF_110G2)aircraft();
                BF_110G2.bChangedPit = false;
            }
            setTmp = setOld;
            setOld = setNew;
            setNew = setTmp;
            setNew.altimeter = fm.getAltitude();
            if(cockpitDimControl)
            {
                if(setNew.dimPosition > 0.0F)
                    setNew.dimPosition = setNew.dimPosition - 0.05F;
            } else
            if(setNew.dimPosition < 1.0F)
                setNew.dimPosition = setNew.dimPosition + 0.05F;
            setNew.throttle1 = 0.91F * setOld.throttle1 + 0.09F * fm.EI.engines[0].getControlThrottle();
            setNew.throttle2 = 0.91F * setOld.throttle2 + 0.09F * fm.EI.engines[1].getControlThrottle();
            setNew.mix1 = 0.88F * setOld.mix1 + 0.12F * fm.EI.engines[0].getControlMix();
            setNew.mix2 = 0.88F * setOld.mix2 + 0.12F * fm.EI.engines[1].getControlMix();
            float f = waypointAzimuth();
            if(useRealisticNavigationInstruments())
            {
                setNew.waypointAzimuth.setDeg(f - 90F);
                setOld.waypointAzimuth.setDeg(f - 90F);
            } else
            {
                setNew.waypointAzimuth.setDeg(setOld.waypointAzimuth.getDeg(0.1F), f - setOld.azimuth.getDeg(1.0F));
            }
            setNew.azimuth.setDeg(setOld.azimuth.getDeg(1.0F), fm.Or.azimut());
            w.set(fm.getW());
            fm.Or.transform(w);
            setNew.turn = (12F * setOld.turn + w.z) / 13F;
            setNew.radioalt = 0.9F * setOld.radioalt + 0.1F * (fm.getAltitude() - World.cur().HQ_Air(World.land(), (float)fm.Loc.x, (float)fm.Loc.y));
            setNew.vspeed = (199F * setOld.vspeed + fm.getVertSpeed()) / 200F;
            setNew.beaconDirection = (10F * setOld.beaconDirection + getBeaconDirection()) / 11F;
            setNew.beaconRange = (10F * setOld.beaconRange + getBeaconRange()) / 11F;
            return true;
        }
Выделенная синим часть кода выдаёт на командной строке ошибку при попытке закомпилировать.
Но нашёл подобный код и сделал так:
Код:
public boolean tick()
        {
            if((BF_110G_4N)aircraft() == null);
            if(BF_110G_4N.bChangedPit)
            {
                reflectPlaneToModel();
                if((BF_110G_4N)aircraft() == null);
                BF_110G_4N.bChangedPit = false;
            }
            setTmp = setOld;
            setOld = setNew;
            setNew = setTmp;
            setNew.altimeter = fm.getAltitude();
            if(cockpitDimControl)
            {
                if(setNew.dimPosition > 0.0F)
                    setNew.dimPosition = setNew.dimPosition - 0.05F;
            } else
            if(setNew.dimPosition < 1.0F)
                setNew.dimPosition = setNew.dimPosition + 0.05F;
            setNew.throttle1 = 0.91F * setOld.throttle1 + 0.09F * ((FlightModelMain) (fm)).EI.engines[0].getControlThrottle();
            setNew.throttle2 = 0.91F * setOld.throttle2 + 0.09F * ((FlightModelMain) (fm)).EI.engines[1].getControlThrottle();
            setNew.mix1 = 0.88F * setOld.mix1 + 0.12F * ((FlightModelMain) (fm)).EI.engines[0].getControlMix();
            setNew.mix2 = 0.88F * setOld.mix2 + 0.12F * ((FlightModelMain) (fm)).EI.engines[1].getControlMix();
            mesh.chunkSetAngles("TurretA", 0.0F, ((SndAircraft) (aircraft())).FM.turret[0].tu[0], 0.0F);
            mesh.chunkSetAngles("TurretB", 0.0F, ((SndAircraft) (aircraft())).FM.turret[0].tu[1], 0.0F);
            float f = waypointAzimuth();
            if(useRealisticNavigationInstruments())
            {
                setNew.waypointAzimuth.setDeg(f - 90F);
                setOld.waypointAzimuth.setDeg(f - 90F);
            } else
            {
                setNew.waypointAzimuth.setDeg(setOld.waypointAzimuth.getDeg(0.1F), f - setOld.azimuth.getDeg(1.0F));
            }
            setNew.azimuth.setDeg(setOld.azimuth.getDeg(1.0F), ((FlightModelMain) (fm)).Or.azimut());
            w.set(fm.getW());
            ((FlightModelMain) (fm)).Or.transform(w);
            setNew.turn = (12F * setOld.turn + ((Tuple3f) (w)).z) / 13F;
            setNew.vspeed = (199F * setOld.vspeed + fm.getVertSpeed()) / 200F;
            setNew.beaconDirection = (10F * setOld.beaconDirection + getBeaconDirection()) / 11F;
            setNew.beaconRange = (10F * setOld.beaconRange + getBeaconRange()) / 11F;
            Variables variables = setNew;
            float f1 = 0.9F * setOld.radioalt;
            float f2 = 0.1F;
            float f3 = fm.getAltitude();
            World.cur();
            World.land();
            variables.radioalt = f1 + f2 * (f3 - Landscape.HQ_Air((float)((Tuple3d) (((FlightModelMain) (fm)).Loc)).x, (float)((Tuple3d) (((FlightModelMain) (fm)).Loc)).y));
            return true;
        }
Но этот код не работает с мешами из кокпита Н-4. Работу компаса описывает такой код:
Код:
H-4
        mesh.chunkSetAngles("Z_Compass1", interp(setNew.azimuth, setOld.azimuth, f), 0.0F, 0.0F);
        mesh.chunkSetAngles("Z_Azimuth1", -interp(setNew.waypointAzimuth, setOld.waypointAzimuth, f), 0.0F, 0.0F);
        if(gun[0] != null)
            mesh.chunkSetAngles("Z_AmmoCounter1", cvt(gun[0].countBullets(), 0.0F, 500F, 13F, 0.0F), 0.0F, 0.0F);
        if(gun[2] != null)
            mesh.chunkSetAngles("Z_AmmoCounter2", cvt(gun[2].countBullets(), 0.0F, 500F, 13F, 0.0F), 0.0F, 0.0F);
        if(gun[1] != null)
            mesh.chunkSetAngles("Z_AmmoCounter3", cvt(gun[1].countBullets(), 0.0F, 500F, 13F, 0.0F), 0.0F, 0.0F);
        mesh.chunkSetAngles("Z_Hour1", cvt(World.getTimeofDay(), 0.0F, 24F, 0.0F, 720F), 0.0F, 0.0F);
        mesh.chunkSetAngles("Z_Minute1", cvt(World.getTimeofDay() % 1.0F, 0.0F, 1.0F, 0.0F, 360F), 0.0F, 0.0F);
        mesh.chunkSetAngles("Z_Second1", cvt(((World.getTimeofDay() % 1.0F) * 60F) % 1.0F, 0.0F, 1.0F, 0.0F, 360F), 0.0F, 0.0F);
        float f1;
        if(aircraft().isFMTrackMirror())
        {
            f1 = aircraft().fmTrack().getCockpitAzimuthSpeed();
        } else
        {
            f1 = cvt((setNew.azimuth - setOld.azimuth) / Time.tickLenFs(), -3F, 3F, 21F, -21F);
            if(aircraft().fmTrack() != null)
                aircraft().fmTrack().setCockpitAzimuthSpeed(f1);
        }
А в дефолте для мешей компаса команды описаны так:
Код:
ДЕФОЛТ:
        if(useRealisticNavigationInstruments())
        {
            mesh.chunkSetAngles("Z_Azimuth1", setNew.azimuth.getDeg(f) - setNew.waypointAzimuth.getDeg(f), 0.0F, 0.0F);
            mesh.chunkSetAngles("Z_Compass1", -setNew.waypointAzimuth.getDeg(f), 0.0F, 0.0F);
            mesh.chunkSetAngles("Z_Autopilot1", setNew.azimuth.getDeg(f), 0.0F, 0.0F);
            mesh.chunkSetAngles("Z_Autopilot2", setNew.waypointAzimuth.getDeg(f * 0.1F), 0.0F, 0.0F);
        } else
        {
            mesh.chunkSetAngles("Z_Compass1", -setNew.azimuth.getDeg(f), 0.0F, 0.0F);
            mesh.chunkSetAngles("Z_Azimuth1", setNew.waypointAzimuth.getDeg(f * 0.1F), 0.0F, 0.0F);
            mesh.chunkSetAngles("Z_Autopilot1", setNew.azimuth.getDeg(f), 0.0F, 0.0F);
            mesh.chunkSetAngles("Z_Autopilot2", setNew.waypointAzimuth.getDeg(f * 0.1F), 0.0F, 0.0F);
        }
        if(gun[0] != null)
            mesh.chunkSetAngles("Z_AmmoCounter1", cvt(gun[0].countBullets(), 0.0F, 500F, 13F, 0.0F), 0.0F, 0.0F);
        if(gun[2] != null)
            mesh.chunkSetAngles("Z_AmmoCounter2", cvt(gun[2].countBullets(), 0.0F, 500F, 13F, 0.0F), 0.0F, 0.0F);
        if(gun[1] != null)
            mesh.chunkSetAngles("Z_AmmoCounter3", cvt(gun[1].countBullets(), 0.0F, 500F, 13F, 0.0F), 0.0F, 0.0F);
Поэтому без изменения мешей в кокпите новосозданный класс кокпита для МЕ-110Н-4 - самолёт при полёте сильно трмозит изображение и выйти из миссии без снятия задачи не возможно.
Думаю что нужны новые меши для компаса:
Код:
 Z_Compass1.msh
 Z_Azimuth1.msh
Мои изыскания тут:
- https://drive.google.com/file/d/0B9T...ew?usp=sharing -.
Внутри архива есть баттонз Стенки - там находиться фм для этих самолётов. Мотор переделан и имеет мощность и обороты по ТТХ. В фм поляра от дефолтного Ме-110Г-2.
-------------------------------------
Мод обновлён 21 МАРТА. Код навигации прописан по образцу исправленного Игерем(Таракан67).
Выражаю ему ОСОБУЮ БЛАГОДАРНОСТЬ ЗА ПОМОЩЬ!!!
Мод работает с модом вооружения Нью-Гарматы - внизу в архиве.
Вложения
Тип файла: rar !!!000_A_NEW_GARMATY_4.12.2_FOR_WORK_WITHOUT_INSTALLATION_Engine_Mod.rar (294.4 Кб, 396 просмотров)

Последний раз редактировалось Vasya; 23.03.2016 в 22:18.
Vasya вне форума   Ответить с цитированием