示例#1
0
        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;
            }
        }
示例#2
0
        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;
                }
            }
        }