Вот нашёл в коде P-40 кусок повреждения тяг управления дросселем.
Код:
if(s.startsWith("xxcontrols"))
if(s.endsWith("1"))
{
if(World.Rnd().nextFloat() < 0.3F)
{
FM.AS.setEngineSpecificDamage(shot.initiator, 0, 6);
Aircraft.debugprintln(this, "*** Engine Controls Out..");
}
if(World.Rnd().nextFloat() < 0.3F)
{
FM.AS.setEngineSpecificDamage(shot.initiator, 0, 1);
Aircraft.debugprintln(this, "*** Engine Controls Out..");
}
У Яков и ЛаГГов тяга управления присутствует и тоже под номером 1. У более новых самолётов коллижены управления есть 1, 2 и 3. В коде поломка прописана по окончанию.
Код:
if(s.startsWith("xxcontrols"))
{
if(s.endsWith("1"))
У Яка и ЛаГГа их 8, но идёт повреждение любых тяг при попадании по любому xxcontrols в зависимости от силы попадания. Но мне вот что не понравилось.
Код:
if(s.startsWith("xxcontrols"))
{
debuggunnery("Controls: Hit..");
int i = s.charAt(10) - 48;
switch(i)
{
default:
break;
case 1: // '\001'
if(getEnergyPastArmor(0.1F, shot) > 0.0F)
{
if(World.Rnd().nextFloat() < 0.1F)
FM.AS.setEngineSpecificDamage(shot.initiator, 0, 1);
if(World.Rnd().nextFloat() < 0.1F)
FM.AS.setEngineSpecificDamage(shot.initiator, 0, 6);
if(World.Rnd().nextFloat() < 0.1F)
FM.AS.setEngineSpecificDamage(shot.initiator, 0, 7);
}
break;
Нашёл флаги повреждения "setEngineSpecificDamage" 1, 6 и 7 в классе AircraftState.
Код:
case 1: // '\001'
if(((FlightModelMain) (((SndAircraft) (aircraft)).FM)).EI.engines[enginenumber].isHasControlThrottle())
((FlightModelMain) (((SndAircraft) (aircraft)).FM)).EI.engines[enginenumber].doSetKillControlThrottle();
break;
case 6: // '\006'
if(((FlightModelMain) (((SndAircraft) (aircraft)).FM)).EI.engines[enginenumber].isHasControlProp())
((FlightModelMain) (((SndAircraft) (aircraft)).FM)).EI.engines[enginenumber].doSetKillControlProp();
break;
case 7: // '\007'
if(((FlightModelMain) (((SndAircraft) (aircraft)).FM)).EI.engines[enginenumber].isHasControlMix())
((FlightModelMain) (((SndAircraft) (aircraft)).FM)).EI.engines[enginenumber].doSetKillControlMix();
break;
Значит при попадании по любому xxcontrols с энергией 0.1F с вероятностью 0,1% может выбить РУД, управление смесью или шагом винта. По такой логике я правильно понимаю, что при попадании по xxcontrols7 в хвосте с нужной энергией у нас может выбить управление мотором? Если это так, то бред какой-то)
Нашёл в чистой игре код повреждения водорадиатора у Спитфайра.
Код:
if(s.startsWith("xwater"))
{
if(FM.AS.astateEngineStates[0] == 0)
{
debuggunnery("Engine Module: Water Radiator Pierced..");
FM.AS.hitEngine(shot.initiator, 0, 1);
FM.AS.doSetEngineState(shot.initiator, 0, 1);
} else
if(FM.AS.astateEngineStates[0] == 1)
{
debuggunnery("Engine Module: Water Radiator Pierced..");
FM.AS.hitEngine(shot.initiator, 0, 1);
FM.AS.doSetEngineState(shot.initiator, 0, 2);
}
Как он работает? Ни энергии, ни вероятности тут нет, флагов повреждения тоже не смог найти. Меня всё не покидает мысль как сделать повреждение водорадиатора Якам, ЛаГГам и не только.
Вот в классе Бф-110 тоже есть код пробития водорадиатора, есть уже условия повреждения, но опять не понял что запускает этот код, что начинает ломаться.
Код:
if(s.startsWith("xxw"))
{
if(getEnergyPastArmor(World.Rnd().nextFloat(0.1F, 0.75F), shot) > 0.0F)
{
int i1 = s.charAt(3) - 49;
if(FM.AS.astateEngineStates[i1] == 0)
{
debuggunnery("Engine Module (" + (i1 != 0 ? "Right" : "Left") + "): Water Radiator Pierced..");
FM.AS.hitEngine(shot.initiator, i1, 2);
FM.AS.doSetEngineState(shot.initiator, i1, 2);
}
getEnergyPastArmor(2.22F, shot);
}