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); }
public static void OnMonsterDied(AbstractMonster monster) { QuestItemInteracted?.Invoke(monster); }