Исследовал Ме-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).
Выражаю ему ОСОБУЮ БЛАГОДАРНОСТЬ ЗА ПОМОЩЬ!!!
Мод работает с модом вооружения Нью-Гарматы - внизу в архиве.