Пример #1
0
 private void OnTriggerEnter(Collider other)
 {
     Debug.Log("Pitfall");
     if (other.gameObject.tag == "Player")
     {
         Pitfall.Invoke();
     }
 }
Пример #2
0
        private void CreateWorld()
        {
            //Resetting monster counter when game restarts
            Monster.MonsterCounter = 0;

            world = new Space[worldSizeX, worldSizeY];


            for (int y = 0; y < world.GetLength(1); y++)
            {
                for (int x = 0; x < world.GetLength(0); x++)
                {
                    if (RandomUtils.TryPercentage(2))
                    {
                        world[x, y] = new Pitfall();
                    }

                    else
                    {
                        Space space;
                        if (RandomUtils.TryPercentage(3))
                        {
                            space = new Cave();
                        }
                        else
                        {
                            space = new Room();
                        }

                        //Skulle kunna lösa placering av creatures/items i metoder för att abstrahera bort det från Space-klassen.
                        if (player.X != x || player.Y != y)
                        {
                            if (RandomUtils.TryPercentage(5))
                            {
                                space.Monster = new Troll();
                            }
                            else if (RandomUtils.TryPercentage(5))
                            {
                                space.Monster = new Teacher("Håkan");
                            }

                            if (RandomUtils.TryPercentage(5))
                            {
                                space.Item = new Apple();
                            }
                            else if (RandomUtils.TryPercentage(1))
                            {
                                space.Item = new Spear(1);
                            }
                        }
                        world[x, y] = space;
                    }
                }
            }
        }
Пример #3
0
    void UpdateToNewStoryElement()
    {
        // TODO Day view is shifted by 1
        // This is stupid but no time to fix it
        daysText.text          = dayNumber.ToString();
        dayNumber             += 1;
        daysTextInOverlay.text = string.Format(DAYS_TEXT, dayNumber.ToString());


        // TODO
        int caughtScore = Random.Range(40, 100);

        if (riskAmount > caughtScore)
        {
            currentStoryElement = null;
            int numberOfPitfalls = story.pitfalls.Length;
            int pitfallIndex     = Random.Range(0, numberOfPitfalls);
            currentPitfall = story.pitfalls[pitfallIndex];
        }
        else
        {
            currentPitfall = null;
            int numberOfStoryElements = story.storyElements.Length;

            List <StoryElement> accessibleStoryElements = new List <StoryElement>();

            // This is HORRIBLE >:(
            for (int i = 0; i < numberOfStoryElements; i++)
            {
                StoryElement current = story.storyElements[i];
                bool         isLevelAchievedHighEnough = current.prerequisites.level <= currentLevel;
                bool         isStoryAlreadyDone        = alreadyDoneStories.Contains(current.id) && current.prerequisites.doableOnce;
                if (isLevelAchievedHighEnough && !isStoryAlreadyDone)
                {
                    if (!current.prerequisites.needsUnlock)
                    {
                        // If it does not need any unlock, it's okay!
                        accessibleStoryElements.Add(current);
                    }
                    else
                    {
                        // Otherwise, element has to be present in list
                        if (unlockedStories.Contains(current.id))
                        {
                            accessibleStoryElements.Add(current);
                        }
                    }
                }
            }

            int numberOfAccessibleStoryElements = accessibleStoryElements.Count;
            int level = Random.Range(0, numberOfAccessibleStoryElements);
            currentStoryElement = accessibleStoryElements[level];
        }
    }
Пример #4
0
        public void BuildMaze(int maze Number)
        {
            string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);

            _filePath  = Directory.GetParent(_filePath).FullName;
            _filePath  = Directory.GetParent(Directory.GetParent(_filePath).FullName).FullName;
            _filePath += @"\Sokoban M3\Mazes\doolhof" + mazeNumber + ".txt";
            TextReader tr = new StreamReader(_filePath);

            string        line;
            List <string> list = new List <string>();

            while ((line = tr.ReadLine()) != null)
            {
                list.Add(line);
            }

            char[] characters = list[0].ToArray();
            Maze = new Maze();
            Model.Tile[,] tiles = new Model.Tile[list.Count, characters.Length];
            for (int i = 0; i < list.Count; i++)
            {
                characters = list[i].ToArray();
                for (int j = 0; j < characters.Length; j++)
                {
                    switch (characters[j])
                    {
                    case ' ':
                        tiles[i, j] = new EmptyTile();
                        break;

                    case '.':
                        tiles[i, j] = new Floor();
                        break;

                    case '#':
                        tiles[i, j] = new Wall();
                        break;

                    case '@':
                        tiles[i, j]          = new Floor();
                        tiles[i, j].Entity   = new Model.Forklift();
                        Maze.CurrentForkLift = tiles[i, j];
                        break;

                    case 'x':
                        tiles[i, j] = new Destination();
                        break;

                    case 'o':
                        tiles[i, j]        = new Floor();
                        tiles[i, j].Entity = new Chest();
                        Maze.AmountOfChests++;
                        break;

                    case '~':
                        tiles[i, j] = new Pitfall();
                        break;

                    case '$':
                        tiles[i, j]        = new Floor();
                        tiles[i, j].Entity = new Worker();
                        Maze.CurrentWorker = tiles[i, j];
                        break;
                    }
                    if (Maze.First == null)
                    {
                        Maze.First = tiles[i, j];
                    }
                }
            }
            for (int i = 0; i < list.Count; i++)
            {
                for (int j = 0; j < characters.Length; j++)
                {
                    if (i - 1 > -1)
                    {
                        tiles[i, j].Above = tiles[i - 1, j];
                    }
                    if (i + 1 < list.Count)
                    {
                        tiles[i, j].Below = tiles[i + 1, j];
                    }
                    if (j - 1 > -1)
                    {
                        tiles[i, j].Left = tiles[i, j - 1];
                    }
                    if (j + 1 < characters.Length)
                    {
                        tiles[i, j].Right = tiles[i, j + 1];
                    }
                }
            }
        }