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)); }
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); }