По поводу новых снарядов с напалм-эффектом.
Если вам поможет опытный программер, то в класс MGunAircraftGeneric нужно добавить код типа такого:
Код:
float f = Specify(gunproperties);
CannonMidrangeGeneric.autocomputeSplintersRadiuses(gunproperties.bullet);
if(f > 0.0F)
{
if(f <= 20F)
f = 20F;
if(f >= 70F)
f = 70F;
f = (f - 20F) / 50F;
gunproperties.maxDeltaAngle = 0.3F - f * 0.2F;
} else
{
gunproperties.maxDeltaAngle = 0.2F;
}
return gunproperties;
}
protected abstract float Specify(GunProperties gunproperties);
private float straightTravelTime(Point3d point3d, Point3d point3d1)
{
float f = (float)point3d.distance(point3d1);
if(f < prop.aimMinDist || f > prop.aimMaxDist)
return -1F;
else
return f / prop.bullet[0].speed;
}
private boolean straightFireDirection(Point3d point3d, Point3d point3d1, Vector3d vector3d)
{
float f = (float)point3d.distance(point3d1);
if(f < prop.aimMinDist || f > prop.aimMaxDist)
{
return false;
} else
{
vector3d.set(point3d1);
vector3d.sub(point3d);
vector3d.scale(1.0F / f);
return true;
}
}
public float TravelTime(Point3d point3d, Point3d point3d1)
{
float f = super.TravelTime(point3d, point3d1);
if(bulletTypeIdx > 0)
return f;
if(f > prop.bullet[0].timeLife + prop.bullet[0].addExplTime)
return -1F;
else
return f;
}
public static final float Rnd(float f, float f1)
{
return World.Rnd().nextFloat(f, f1);
}
private static final long SecsToTicks(float f)
{
long l = (long)(0.5D + (double)(f / Time.tickLenFs()));
return l >= 1L ? l : 1L;
}
public boolean FireDirection(Point3d point3d, Point3d point3d1, Vector3d vector3d)
{
explAddTimeT = 0L;
if(bulletTypeIdx == 0)
{
float f = prop.bullet[0].addExplTime;
if(f > 0.0F)
{
explAddTimeT = SecsToTicks(Rnd(-f, f));
if(explAddTimeT == 0L)
explAddTimeT = 1L;
}
}
return super.FireDirection(point3d, point3d1, vector3d);
}
protected long explAddTimeT;
Почему опытный? Потому, что код из MGunAntiAirGeneric, который опираеться на CannonMidrangeGeneric, о чём в коде и упоминаеться.
В классе пушки потом пишеться:
gunproperties.weaponType = 2;
А еффект написать не сложно, но код его
(наподобие кода ракет)
Код:
protected void doExplosion(Actor actor, String s)
{
pos.getTime(Time.current(), p);
MsgExplosion.send(actor, s, p, getOwner(), 45F, 2.0F, 1, 550F);
super.doExplosion(actor, s);
}
protected void doExplosionAir()
{
super.pos.getTime(Time.current(), p);
Class class1 = getClass();
float f = Property.floatValue(class1, "power", 350F);
int i = Property.intValue(class1, "powerType", 0);
float f1 = Property.floatValue(class1, "radius", 500F);
MsgExplosion.send(null, null, p, getOwner(), M, f, i, f1);
Explosions.AirFlak(p, 003);
}
так же нужно писать/вставить в новый класс оружия.
То есть - это хороший кусок работы для подумать и сложить вместе все составляющие, которые уже есть.
Но на мою думку - идея очень хорошая.
Можно сделать проще:
посмотреть как сделано всё в БзБ(БОБ) и выбрать оттудова нужные команды, адаптировав их к джаве.
Кстати, одновременно можно позаимствовать набивку ленты для вылета игроком., это было бы очень супер.
Такие мысли.
П.С.
Заодно выправить баллистику курсового вооружения до "реалистичного".