Пример #1
0
    public static EnemyStats calcStats(EnemyMaxStats max, LevelStage diff, float time)
    {
        float health = max.minHealth + (int)(time / 30) * max.healthMod;

        if (health > max.maxHealth)
        {
            health = max.maxHealth;
        }

        float speed = Random.Range(max.minSpeed, max.minSpeed + (time / 20) * max.speedMod);

        if (speed > max.maxSpeed)
        {
            speed = max.maxSpeed;
        }

        Spell attack = null;

        if (max.attacks != null && max.attacks.Count > 0)
        {
            int attackType = Random.Range(0, max.attacks.Count);
            attack = max.attacks[attackType];
        }

        SpellAttr attr      = max.attackModifiers;
        SpellMod  modifiers = new SpellMod();

        modifiers.damage = Random.Range(attr.minDamage, attr.minDamage + attr.minDamage * time / 90);
        if (modifiers.damage > attr.maxDamage)
        {
            modifiers.damage = attr.maxDamage;
        }

        modifiers.damagePercent = 1;

        int  dotChance = Random.Range(0, 101);
        bool dot       = (15 * (int)diff) >= dotChance;

        if (dot)
        {
            modifiers.dot     = true;
            modifiers.dotTick = Random.Range(attr.minDot, attr.minDot + attr.minDot * time / 180);
            if (modifiers.dotTick > attr.maxDot)
            {
                modifiers.dotTick = attr.maxDot;
            }
            modifiers.dotLength = Random.Range(attr.minFireRate, attr.maxFireRate);
        }

        modifiers.TTL      = Random.Range(attr.minTTL, attr.maxTTL);
        modifiers.fireRate = Random.Range(attr.minFireRate, attr.minFireRate + attr.minFireRate * time / 180);
        if (modifiers.fireRate > attr.maxFireRate)
        {
            modifiers.fireRate = attr.maxFireRate;
        }

        //TODO: Do range for some enemies after adding wind weapon

        return(new EnemyStats(health, attack, modifiers, max.sightRange, max.sightAngle, speed));
    }
Пример #2
0
    private Weapon getWeapon()
    {
        Spell     weaponSpell = spellTypes.spells[(int)Random.Range(0, spellTypes.spells.Count)];
        SpellAttr limits      = weaponSpell.GetSpellAttr();

        SpellMod modifiers = new SpellMod();

        modifiers.damage = Random.Range(limits.minDamage, limits.maxDamage);
        //TODO: Change to scale
        modifiers.dot = Random.Range(0, 100) < 20;
        if (modifiers.dot)
        {
            modifiers.dotTick = Random.Range(limits.minDot, limits.maxDot);
            //TODO: Change to scale
            modifiers.dotLength = Random.Range(0, 5);
        }
        //TODO: Change to scale
        modifiers.bounce     = Random.Range(0, 100) < 20;
        modifiers.pierce     = Random.Range(0, 100) < 20;
        modifiers.track      = Random.Range(0, 100) < 20;
        modifiers.numBullets = (int)Random.Range(0, 5);

        modifiers.TTL      = Random.Range(limits.minTTL, limits.maxTTL);
        modifiers.range    = Random.Range(limits.minRange, limits.maxRange);
        modifiers.fireRate = Random.Range(limits.minFireRate, limits.maxFireRate);

        Weapon newWeapon = (Weapon)ScriptableObject.CreateInstance("Weapon");

        newWeapon.set("Test Weapon", weaponSpell, modifiers);
        return(newWeapon);
    }