Beispiel #1
0
        public void Attack(Point attackingUnit, Point defendingUnit)
        {
            Unit att = GetUnit(attackingUnit);
            Unit def = GetUnit(defendingUnit);

            ushort baseAtt = att.Stats[Stats.Attack];
            bool   isMagic = false;

            if (att.Stats[Stats.Magic] > baseAtt)
            {
                isMagic = true;
                baseAtt = att.Stats[Stats.Magic];
            }
            int diceResult = rand.Next(1, 7);

            RollDiceAnimation rollDiceAnimation = new RollDiceAnimation(game.RedDice, CellToWorld(att.Position).Add(0, Global.SpriteHeight), (ushort)diceResult, baseAtt, true);

            animationQueue.Add(rollDiceAnimation, null);

            int damage = baseAtt + diceResult;

            ushort baseDef = def.Defending ? (ushort)7 : (isMagic ? def.Stats[Stats.MagicDefense] : def.Stats[Stats.Defense]);

            diceResult = rand.Next(1, 7);

            rollDiceAnimation = new RollDiceAnimation(game.BlueDice, CellToWorld(def.Position).Add(0, Global.SpriteHeight), (ushort)diceResult, baseDef, true);
            animationQueue.Add(rollDiceAnimation, null);

            int defense = baseDef + diceResult;


            int res = Math.Max(0, damage - defense);

            animationQueue.Add(new AttackAnimation((ushort)res), null);

            if (def.Health <= res)
            {
                Sprite skull = new Sprite(game.Textures[3], Global.SpriteSize, TextureIDInterpreter.GetSourceRectangle(567), Global.Colors.Main1);

                DeathAnimation deathAnimation = new DeathAnimation(CellToWorld(def.Position).Add(1), def.GetSprite(game.Textures), CellToWorld(def.Position.Sub(0, 1)), skull);
                animationQueue.Add(deathAnimation, def);
                units[def.Position.Y, def.Position.X] = null;
            }
            else
            {
                def.Health -= (ushort)res;
            }

            att.Acted = true;

            UnselectUnit();
            UnselectTiles();
        }
Beispiel #2
0
        public void Reroll(Point rerollingUnit)
        {
            Unit unit = GetUnit(rerollingUnit);

            unit.Reroll();
            unit.Acted = true;

            RollDiceAnimation rollDice = new RollDiceAnimation(game.YellowDice, CellToWorld(unit.Position.Add(0, 1)), unit.Stats[unit.UnitClass.OppositeStats.Item1], 0, false);

            animationQueue.Add(rollDice, null);

            UnselectUnit();
            UnselectTiles();
        }