public void NextTurn() { Player.Mode = Player.PlayerMode.EnemyTurn; // reset speed for heroes snd dehighlight any highlighted tiles foreach (Hero hero in Heroes) { if (!hero.Alive) continue; Character.Status speed = hero.Speed; speed.Remaining = speed.Max; hero.Speed = speed; hero.AlreadyAttacked = false; if (hero.Selected) { hero.Selected = false; Player.InvalidateHighlight(hero.Reachable); } } // reset speed for monsters foreach (Monster mon in Monsters) { if (!mon.Alive) continue; Character.Status speed = mon.Speed; speed.Remaining = speed.Max; mon.Speed = speed; mon.AlreadyAttacked = false; } }
void SingleAttack(Character attacker, Character opponent) { TypeRelation relation = Types.GetRelation(attacker.Type, opponent.Type); opponent.EnemyAwareness &= Types.GetPossibleTypes(attacker.Type, relation); float multiplier = relation == TypeRelation.Neutral ? 1 : (relation == TypeRelation.Advantage ? 2 : 0.5f); Character.Status hp = opponent.HitPoints; hp.Remaining -= (int)Math.Round(multiplier * attacker.Strength); opponent.HitPoints = hp; if (!opponent.Alive) { opponent.Parent.Active = false; if (opponent is Hero && !((Hero)opponent).AlliedUnitInRoom(opponent.Tile.Room)) { opponent.Tile.Room.UpdateGraphics(Room.Visibility.Darkened); attacker.GetComponent <SpriteRenderer>().Active = false; } } }