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

По поводу новых снарядов с напалм-эффектом.
Если вам поможет опытный программер, то в класс 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);
    }
так же нужно писать/вставить в новый класс оружия.
То есть - это хороший кусок работы для подумать и сложить вместе все составляющие, которые уже есть.
Но на мою думку - идея очень хорошая.
Можно сделать проще:
посмотреть как сделано всё в БзБ(БОБ) и выбрать оттудова нужные команды, адаптировав их к джаве.
Кстати, одновременно можно позаимствовать набивку ленты для вылета игроком., это было бы очень супер.
Такие мысли.
П.С.
Заодно выправить баллистику курсового вооружения до "реалистичного".
Vasya вне форума   Ответить с цитированием