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