Пример #1
0
    private void CreateCellAt(Level.Level level, int x, int y)
    {
        var existingCell = level.GetCellAt(x, y);

        if (existingCell != null)
        {
            return;
        }
        Vector3 position = new Vector3
                           (
            transform.position.x + x * cellWidth,
            0.0f,
            transform.position.y + y * cellHeight
                           );

        LevelObject.Cell cell = Instantiate(CellPrefab, position, transform.rotation);
        foreach (Transform child in cell.transform)
        {
            if (child.CompareTag("Minimap"))
            {
                child.gameObject.SetActive(false);
                break;
            }
        }

        cell.Location = new Vector2Int(x, y);
        level.AddCell(cell);
    }
Пример #2
0
    private void ConnectRooms(Level.Level level, List <RectInt> rooms)
    {
        if (rooms.Count == 0)
        {
            return;
        }

        List <RectInt> disconnectedRooms = new List <RectInt>();

        disconnectedRooms.AddRange(rooms);

        List <RectInt> connectedRooms = new List <RectInt>();

        connectedRooms.Add(rooms[random.Next(rooms.Count)]);

        while (disconnectedRooms.Count > 0)
        {
            var disconnectedIndex = random.Next(disconnectedRooms.Count);
            var connectedIndex    = random.Next(connectedRooms.Count);

            var disconnectedRoom = disconnectedRooms[disconnectedIndex];
            var connectedRoom    = connectedRooms[connectedIndex];

            ConnectWithPassage(level, disconnectedRoom, connectedRoom);

            disconnectedRooms.RemoveAt(disconnectedIndex);
            connectedRooms.Add(disconnectedRoom);
        }
    }
Пример #3
0
        public Level.Level ReadNewLevelOnFile()
        {
            var reader = new System.Xml.Serialization.XmlSerializer(typeof(Level.Level));
            var file   = new System.IO.StreamReader("levels/" + _currentLevel.ToString() + ".xml");

            Level.Level newLevel = (Level.Level)reader.Deserialize(file);
            return(newLevel);
        }
Пример #4
0
 private void PlaceRoom(Level.Level level, RectInt position)
 {
     for (int i = position.xMin + 1; i < position.xMax; ++i)
     {
         for (int j = position.yMin + 1; j < position.yMax; ++j)
         {
             CreateCellAt(level, i, j);
         }
     }
 }
Пример #5
0
    // Start is called before the first frame update
    void Start()
    {
        CurrentLevelIndex = 0;
        Debug.Log("level : " + CurrentLevelIndex);
        GameFSM.GetState(GameStateLevel).OnStateInEvent.AddListener(() =>
        {
            LevelFsm = new FSMLite();
            LevelFsm.RegisterState(new FSMLite.State()
            {
                Name = LevelStateOpen
            });
            LevelFsm.RegisterState(new FSMLite.State()
            {
                Name = LevelStateClose
            });
            LevelFsm.GetState(LevelStateOpen).OnStateInEvent.AddListener(() =>
            {
                DistortionMask.SetActive(false);
            });
            LevelFsm.GetState(LevelStateClose).OnStateInEvent.AddListener(() =>
            {
                DistortionMask.SetActive(true);
            });

            UI.SetLevelFSM(LevelFsm);
            LevelFsm.Start(LevelStateOpen);

            if (LevelPrefabList.Count > CurrentLevelIndex)
            {
                var levelPrefab = LevelPrefabList[CurrentLevelIndex];
                var levelGo     = Instantiate(levelPrefab, transform);
                if (!(levelGo is null))
                {
                    Level = levelGo.GetComponent <Level.Level>();
                }
                switchCameraLimit();
            }
        });
        GameFSM.GetState(GameStateLevel).OnStateOutEvent.AddListener(() =>
        {
            UI.UnSetLevelFSM(LevelFsm);
            LevelFsm.Clear();
            LevelFsm = null;
            Destroy(Level.gameObject);
        });

        UI.SetGameFSM(GameFSM);

        GameFSM.Start(GameStateMenu);
    }
Пример #6
0
 private void save_Click(object sender, EventArgs e)
 {
     Level.Level result = new Level.Level();
     result.wall          = _wallCoordinates;
     result.enemys        = _enemyCoordinates;
     result.pacMan        = _pacManCoordinate;
     result.numberColumns = _numberColumns;
     result.numberLines   = _numberLines;
     using (Stream fStream = new FileStream(_numerLevel.ToString() + ".xml", FileMode.Create, FileAccess.Write, FileShare.None))
     {
         var writer = new System.Xml.Serialization.XmlSerializer(typeof(Level.Level));
         writer.Serialize(fStream, result);
     }
     _numerLevel++;
 }
Пример #7
0
    private void CreateBackground(Level.Level level)
    {
        GameObject background = Instantiate(BackgroundPrefab);
        var        dx         = ((level.Cells.XMax + level.Cells.XMin) / 2) * cellWidth;
        var        dy         = ((level.Cells.YMax + level.Cells.YMin) / 2) * cellHeight;

        background.transform.position += new Vector3(dx, -1f, dy);

        var levelWidth     = level.Cells.XMax - level.Cells.XMin;
        var levelHeight    = level.Cells.YMax - level.Cells.YMin;
        var backgroundSize = background.GetComponent <Renderer>().bounds.size;
        var sx             = levelWidth * cellWidth / backgroundSize.x * 2;
        var sy             = levelHeight * cellHeight / backgroundSize.z * 2;

        background.transform.localScale = new Vector3(sx, 1.0f, sy);
    }
Пример #8
0
        public Game(int currentLevel)
        {
            this._currentLevel = currentLevel;
            this._numberLevels = ConsiderNumberLevels();

            Level.Level LevelInfo = new Level.Level();
            LevelInfo = ReadNewLevelOnFile();

            _pacMan = new PacMan(LevelInfo.pacMan);
            Wall levelWall = new Wall();
            levelWall.WallCordinate = LevelInfo.wall;
            this._map = new Map(levelWall, LevelInfo.numberColumns, LevelInfo.numberLines);
            this._pacMan = new PacMan(LevelInfo.pacMan);
            EnemyArtificialIntelligence _enemyAI = new EnemyArtificialIntelligence(_map.LevelFood.FoodCoordinates);
            this._enemys = new Enemys(LevelInfo.enemys, _enemyAI);
            _enemyTimer = new Timer(MakeMoveEnemy, null, 0, GameSettings.EnemySpeed);
        }
Пример #9
0
    private void ConnectWithPassage(Level.Level level, RectInt room1, RectInt room2)
    {
        int startX = random.Next(room1.xMin + 1, room1.xMax - 1);
        int startY = random.Next(room1.yMin + 1, room1.yMax - 1);
        int endX   = random.Next(room2.xMin + 1, room2.xMax - 1);
        int endY   = random.Next(room2.yMin + 1, room2.yMax - 1);

        int stepX = startX < endX ? 1 : -1;
        int stepY = startY < endY ? 1 : -1;

        int i = startX;
        int j = startY;

        while (true)
        {
            bool xChanged = false;
            if (Math.Abs(startX - i) < Math.Abs(startX - endX))
            {
                i       += stepX;
                xChanged = true;
            }

            bool yChanged = false;
            if (Math.Abs(startY - j) < Math.Abs(startY - endY))
            {
                j       += stepY;
                yChanged = true;
            }

            if (xChanged && yChanged)
            {
                CreateCellAt(level, i, j);
                CreateCellAt(level, i - stepX, j);
                CreateCellAt(level, i, j - stepY);
            }
            else if (xChanged || yChanged)
            {
                CreateCellAt(level, i, j);
            }
            else
            {
                break;
            }
        }
    }
Пример #10
0
        public Game(int currentLevel)
        {
            this._currentLevel = currentLevel;
            this._numberLevels = ConsiderNumberLevels();

            Level.Level LevelInfo = new Level.Level();
            LevelInfo = ReadNewLevelOnFile();

            _pacMan = new PacMan(LevelInfo.pacMan);
            Wall levelWall = new Wall();

            levelWall.WallCordinate = LevelInfo.wall;
            this._map    = new Map(levelWall, LevelInfo.numberColumns, LevelInfo.numberLines);
            this._pacMan = new PacMan(LevelInfo.pacMan);
            EnemyArtificialIntelligence _enemyAI = new EnemyArtificialIntelligence(_map.LevelFood.FoodCoordinates);

            this._enemys = new Enemys(LevelInfo.enemys, _enemyAI);
            _enemyTimer  = new Timer(MakeMoveEnemy, null, 0, GameSettings.EnemySpeed);
        }
Пример #11
0
    public Level.Level GenerateLevel()
    {
        Level.Level result = gameObject.AddComponent <Level.Level>();

        var rooms = GenerateRooms();

        result.Rooms = rooms;

        foreach (var room in rooms)
        {
            PlaceRoom(result, room);
        }

        ConnectRooms(result, rooms);

        CreateBackground(result);

        return(result);
    }
Пример #12
0
    void Start()
    {
        gameState = GameObject.FindObjectsOfType <GameState>()[0];
        kills     = gameState.GetInt(KILLS_KEY, 0);
        Player.Hp = gameState.GetInt(HP_KEY, Player.Hp);

        LevelText.text = $"Level: {gameState.GetInt(LEVEL_KEY, 1)}";

        PauseCanvas.enabled = false;
        ResumeButton.onClick.AddListener(OnResume);
        QuitButton.onClick.AddListener(OnQuit);

        level = levelGeneratorInstance.GenerateLevel();

        PlacePlayer();
        UpdateCellsVisibility();

        PlaceMonsters();

        PlaceNextLevel();
    }
Пример #13
0
 private void save_Click(object sender, EventArgs e)
 {
     Level.Level result = new Level.Level();
     result.wall = _wallCoordinates;
     result.enemys = _enemyCoordinates;
     result.pacMan = _pacManCoordinate;
     result.numberColumns = _numberColumns;
     result.numberLines = _numberLines;
     using (Stream fStream = new FileStream(_numerLevel.ToString() + ".xml", FileMode.Create, FileAccess.Write, FileShare.None))
     {
         var writer = new System.Xml.Serialization.XmlSerializer(typeof(Level.Level));
         writer.Serialize(fStream, result);
     }
     _numerLevel++;
 }