Играю с кодом повреждения баков. Отладку делаю на ЛаГГ-3 4 серии.
Код:
public void rareAction(float paramFloat, boolean paramBoolean)
{
super.rareAction(paramFloat, paramBoolean);
if(paramBoolean)
{
типа какие-то эффекты
if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] > 4 && World.Rnd().nextFloat() < 0.07F)
nextDMGLevel(((FlightModelMain) (super.FM)).AS.astateEffectChunks[0] + "0", 0, this);
if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] > 4 && World.Rnd().nextFloat() < 0.07F)
nextDMGLevel(((FlightModelMain) (super.FM)).AS.astateEffectChunks[1] + "0", 0, this);
if(((FlightModelMain) (super.FM)).AS.astateTankStates[2] > 4 && World.Rnd().nextFloat() < 0.07F)
nextDMGLevel(((FlightModelMain) (super.FM)).AS.astateEffectChunks[2] + "0", 0, this);
if(((FlightModelMain) (super.FM)).AS.astateTankStates[3] > 4 && World.Rnd().nextFloat() < 0.07F)
nextDMGLevel(((FlightModelMain) (super.FM)).AS.astateEffectChunks[3] + "0", 0, this);
код ниже позволяет перекидываться огню на соседний бак
if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] > 4 && World.Rnd().nextFloat() < 0.14F)
((FlightModelMain) (super.FM)).AS.hitTank(this, 1, 1);
if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] > 4 && World.Rnd().nextFloat() < 0.14F)
((FlightModelMain) (super.FM)).AS.hitTank(this, 0, 1);
if(((FlightModelMain) (super.FM)).AS.astateTankStates[2] > 4 && World.Rnd().nextFloat() < 0.14F)
((FlightModelMain) (super.FM)).AS.hitTank(this, 3, 1);
if(((FlightModelMain) (super.FM)).AS.astateTankStates[3] > 4 && World.Rnd().nextFloat() < 0.14F)
((FlightModelMain) (super.FM)).AS.hitTank(this, 2, 1);
код ниже позволяет затухать бакам
if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] > 4 && World.Rnd().nextFloat() < 0.1F)
((FlightModelMain) (super.FM)).AS.setTankState(this, 0, ((FlightModelMain) (super.FM)).AS.astateTankStates[0] - 2);
if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] > 4 && World.Rnd().nextFloat() < 0.1F)
((FlightModelMain) (super.FM)).AS.setTankState(this, 1, ((FlightModelMain) (super.FM)).AS.astateTankStates[1] - 2);
if(((FlightModelMain) (super.FM)).AS.astateTankStates[2] > 4 && World.Rnd().nextFloat() < 0.1F)
((FlightModelMain) (super.FM)).AS.setTankState(this, 2, ((FlightModelMain) (super.FM)).AS.astateTankStates[2] - 2);
if(((FlightModelMain) (super.FM)).AS.astateTankStates[3] > 4 && World.Rnd().nextFloat() < 0.1F)
((FlightModelMain) (super.FM)).AS.setTankState(this, 3, ((FlightModelMain) (super.FM)).AS.astateTankStates[3] - 2);
}
}
Так же в классе самолёта стоит протектор
Код:
public void rareAction(float dt, boolean bMaster)
{
super.rareAction(dt, bMaster);
if(bMaster)
{
for(int i = 0; i < 4; i++)
if(((FlightModelMain) (super.FM)).AS.astateTankStates[i] > 0 && ((FlightModelMain) (super.FM)).AS.astateTankStates[i] < 5 && World.Rnd().nextFloat() < 0.1F)
((FlightModelMain) (super.FM)).AS.repairTank(i);
}
}
Убирал разные части кода и смотрел что происходит.
Протектор довольно быстро заделывает пробитый бак, код работает.
Огонь перекидывается на соседний бак как и положено, но если нет кода затухания бака, то самолёт обречён, у меня всегда в таком случае ломало консоль.
Если включён код затухания, то соседний бак успевает получить повреждения, но, скорее всего, бак успеет потухнуть, а соседний бак не успеет разгореться.
Так же в классе Ла-5 есть такой код. Особо не понял на что он влияет, будто консоль чаще ломает при горящем баке.
Код:
protected boolean cutFM(int paramInt1, int paramInt2, Actor paramActor)
{
switch(paramInt1)
{
case 33: // '!'
if(World.Rnd().nextFloat() < 0.233F)
((FlightModelMain) (super.FM)).AS.hitTank(this, 1, 6);
return super.cutFM(34, paramInt2, paramActor);
case 36: // '$'
if(World.Rnd().nextFloat() < 0.233F)
((FlightModelMain) (super.FM)).AS.hitTank(this, 2, 6);
return super.cutFM(37, paramInt2, paramActor);
case 34: // '"'
case 35: // '#'
default:
return super.cutFM(paramInt1, paramInt2, paramActor);
}
}