Ejemplo n.º 1
0
        public void moveAround(Player player)
        {
            Area playerRoom = player.currentLocation;
            Random random = new Random();
            int randomIndex;
            Area randomRoom;
            List<Area> adjacentRooms;
            int adjacentRoomsCount;

            string currentMood = behaviour.currentMood;
            switch (currentMood)
            {
                case Mood.enraged:
                    foreach (Link connector in currentLocation.links)
                    {
                        Area adjacentRoom = connector.getDestination();

                        bool playerIsAdjacent = playerRoom.Equals(adjacentRoom);
                        if (playerIsAdjacent == false)
                        {
                            continue;
                        }

                        if (waterLocked == true)
                        {
                            bool roomHasWater = playerRoom.getIsFlooding();
                            if (roomHasWater == false)
                            {
                                return;
                            }
                        }

                        currentLocation.removeEnemy(this);
                        currentLocation = playerRoom;
                        playerRoom.addEnemy(this);
                    }
                    break;

                case Mood.aggravated:
                    adjacentRooms = new List<Area>();
                    foreach (Link connector in currentLocation.links)
                    {
                        Area adjacentRoom = connector.getDestination();

                        if (waterLocked == true)
                        {
                            bool roomHasWater = playerRoom.getIsFlooding();
                            if (roomHasWater == false)
                            {
                                return;
                            }
                        }

                        adjacentRooms.Add(adjacentRoom);
                    }
                    if (adjacentRooms.Count == 0)
                    {
                        return;
                    }
                    adjacentRoomsCount = adjacentRooms.Count;
                    for (int i = 0; i < adjacentRoomsCount; i++)
                    {
                        adjacentRooms.Add(playerRoom);
                    }

                    randomIndex = random.Next(0, adjacentRooms.Count);
                    randomRoom = adjacentRooms[randomIndex];

                    currentLocation.removeEnemy(this);
                    currentLocation = randomRoom;
                    randomRoom.addEnemy(this);
                    break;

                case Mood.frightened:
                    List<Area> emptyRooms = new List<Area>();
                    foreach (Link connector in currentLocation.links)
                    {
                        Area adjacentRoom = connector.getDestination();

                        bool playerIsAdjacent = playerRoom.Equals(adjacentRoom);
                        if (playerIsAdjacent == true)
                        {
                            continue;
                        }

                        if (waterLocked == true)
                        {
                            bool roomHasWater = adjacentRoom.getIsFlooding();
                            if (roomHasWater == false)
                            {
                                continue;
                            }
                        }

                        emptyRooms.Add(adjacentRoom);
                    }
                    if (emptyRooms.Count == 0)
                    {
                        return;
                    }

                    randomIndex = random.Next(0, emptyRooms.Count);
                    randomRoom = emptyRooms[randomIndex];

                    currentLocation.removeEnemy(this);
                    currentLocation = randomRoom;
                    randomRoom.addEnemy(this);
                    break;

                case Mood.calm:
                    adjacentRooms = new List<Area>();
                    foreach (Link connector in currentLocation.links)
                    {
                        Area adjacentRoom = connector.getDestination();

                        if (waterLocked == true)
                        {
                            bool roomHasWater = adjacentRoom.getIsFlooding();
                            if (roomHasWater == false)
                            {
                                continue;
                            }
                        }

                        adjacentRooms.Add(adjacentRoom);
                    }
                    if (adjacentRooms.Count == 0)
                    {
                        return;
                    }
                    adjacentRoomsCount = adjacentRooms.Count;
                    for (int i = 0; i < adjacentRoomsCount; i++)
                    {
                        adjacentRooms.Add(currentLocation);
                    }

                    randomIndex = random.Next(0, adjacentRooms.Count);
                    randomRoom = adjacentRooms[randomIndex];
                    bool alreadyInRoom = randomRoom.Equals(currentLocation);
                    if (alreadyInRoom == true)
                    {
                        return;
                    }

                    currentLocation.removeEnemy(this);
                    currentLocation = randomRoom;
                    randomRoom.addEnemy(this);
                    break;
            }
        }