Beispiel #1
0
        public void Move(int x, int y)
        {
            int      xPos          = Game.PlayerRef.Position.X + x;
            int      yPos          = Game.PlayerRef.Position.Y + y;
            int      oldPlayerPosX = int.Parse(Game.PlayerRef.Position.X.ToString());
            int      oldPlayerPosY = int.Parse(Game.PlayerRef.Position.Y.ToString());
            Position pos           = new Position(xPos, yPos);
            Position previousPos   = new Position(oldPlayerPosX, oldPlayerPosY);

            if (PositionIsValid(xPos, yPos))
            {
                if (Map.MapTiles[yPos][xPos] is TreasureChestTile)
                {
                    TreasureChestTile chest = TreasureChestTile.TreasureChests.Find(item => item.ChestRight == pos || item.ChestLeft == pos);
                    if (chest != null && chest.IsOpened)
                    {
                        chest.Touch();
                        ItemTouched?.Invoke();
                    }
                    chest.Interact(pos);
                    NeedRefresh?.Invoke();
                    QuestItemInteracted?.Invoke(chest);
                }
                else if (Map.MapTiles[yPos][xPos] is NextLevelTile)
                {
                    LoadNewMap();
                }
                else if (Map.MapTiles[yPos][xPos] is QuestGiver)
                {
                    QuestGiver quest = QuestGiver.Quests.Find(q => q.Position == pos);
                    quest.Interact(pos);
                }
                else
                {
                    if (Map.MapTiles[yPos][xPos] is BonusLifeTile)
                    {
                        Position      futurePos = new Position(pos.X, pos.Y);
                        BonusLifeTile bonus     = BonusLifeTile.Bonuses.Find(b => b.Position == futurePos);
                        bonus.Interact(pos);
                        QuestItemInteracted?.Invoke(bonus);
                    }
                    Map.MapTiles[yPos][xPos] = Game.PlayerRef;
                    Map.MapTiles[Game.PlayerRef.Position.Y][Game.PlayerRef.Position.X] = new EmptySpaceTile();
                    Game.PlayerRef.Position.X += x;
                    Game.PlayerRef.Position.Y += y;
                }
            }
            else
            {
                if (Map.MapTiles[yPos][xPos] is ITouchable)
                {
                    ((ITouchable)Map.MapTiles[yPos][xPos]).Touch();
                }
            }

            MonsterAttackOnPlayerProximity(yPos, xPos);
            PlayerMoved?.Invoke(previousPos);
        }
Beispiel #2
0
 public static void OnMonsterDied(AbstractMonster monster)
 {
     QuestItemInteracted?.Invoke(monster);
 }