Beispiel #1
0
        public void DoAttack(UnitClass atk, UnitClass def)
        {
            atk.OP -= atk.Weapon.OP_cost;

            var Damage  = (int)Math.Round(Sim.RNG.Next(atk.Weapon.MinDamage, atk.Weapon.MaxDamage + 1) * (1 + atk.MeleeDamageMod));
            var AtkRoll = Sim.RNG.Next(0, 100);
            var Hit     = AtkRoll >= def.DodgeChange * 100;

            Damage = Hit ? Damage : 0;

            if (Hit)
            {
                def.HP -= Damage;
                Sim.Vis.RenderAll();
            }

            Sim.Vis.RenderAttack(atk, def, Damage);

            Log.debug($"Attacking {def.ToString()}, Damage: {Damage}, Chance to dodge: {def.DodgeChange * 100}, Rolled: {AtkRoll} - {(Hit ? "HIT" : "MISS")}");

            if (!def.Alive)
            {
                Log.info($"Unit Killed: " + def.ToString());
            }
        }
Beispiel #2
0
        public bool MoveToAttack(UnitClass unit, UnitClass enemy)
        {
            bool Madeit = true;

            var MoveTo = FindAttackSpot(unit, enemy);

            if (MoveTo.isValid)
            {
                Log.debug($"Moving to engage {enemy.ToString()}");
            }
            else
            {
                Log.debug($"Too far: Approaching {enemy.ToString()}");
                MoveTo = FindNearestSpot(unit, enemy);
                Madeit = false;
            }

            MoveToSpot(unit, MoveTo.X, MoveTo.Y);

            return(Madeit);
        }