Exemplo n.º 1
0
    private void Awake()
    {
        grid = new Grid <GridPosition>(levelSO.width, levelSO.height, 1f, Vector3.zero, (Grid <GridPosition> g, int x, int y) => new GridPosition(levelSO, g, x, y));

        levelText.text = levelSO.name;

        if (levelSO.levelGridPositionList == null || levelSO.levelGridPositionList.Count != levelSO.width * levelSO.height)
        {
            // Create new Level
            Debug.Log("Creating new level...");
            levelSO.levelGridPositionList = new List <LevelSO.LevelGridPosition>();

            for (int x = 0; x < grid.GetWidth(); x++)
            {
                for (int y = 0; y < grid.GetHeight(); y++)
                {
                    GemSO gem = levelSO.gemList[Random.Range(0, levelSO.gemList.Count)];

                    LevelSO.LevelGridPosition levelGridPosition = new LevelSO.LevelGridPosition {
                        x = x, y = y, gemSO = gem
                    };
                    levelSO.levelGridPositionList.Add(levelGridPosition);

                    CreateVisual(grid.GetGridObject(x, y), levelGridPosition);
                }
            }
        }
        else
        {
            // Load Level
            Debug.Log("Loading level...");
            for (int x = 0; x < grid.GetWidth(); x++)
            {
                for (int y = 0; y < grid.GetHeight(); y++)
                {
                    LevelSO.LevelGridPosition levelGridPosition = null;

                    foreach (LevelSO.LevelGridPosition tmpLevelGridPosition in levelSO.levelGridPositionList)
                    {
                        if (tmpLevelGridPosition.x == x && tmpLevelGridPosition.y == y)
                        {
                            levelGridPosition = tmpLevelGridPosition;
                            break;
                        }
                    }

                    if (levelGridPosition == null)
                    {
                        Debug.LogError("Error! Null!");
                    }

                    CreateVisual(grid.GetGridObject(x, y), levelGridPosition);
                }
            }
        }

        cameraTransform.position = new Vector3(grid.GetWidth() * .5f, grid.GetHeight() * .5f, cameraTransform.position.z);
    }
Exemplo n.º 2
0
    private void CreateVisual(GridPosition gridPosition, LevelSO.LevelGridPosition levelGridPosition)
    {
        Transform gemGridVisualTransform   = Instantiate(pfGemGridVisual, gridPosition.GetWorldPosition(), Quaternion.identity);
        Transform glassGridVisualTransform = Instantiate(pfGlassGridVisual, gridPosition.GetWorldPosition(), Quaternion.identity);

        gridPosition.spriteRenderer        = gemGridVisualTransform.Find("sprite").GetComponent <SpriteRenderer>();
        gridPosition.glassVisualGameObject = glassGridVisualTransform.gameObject;
        gridPosition.levelGridPosition     = levelGridPosition;

        gridPosition.SetGemSO(levelGridPosition.gemSO);
        gridPosition.SetHasGlass(levelGridPosition.hasGlass);
    }
    public void SetLevelSO(LevelSO levelSO)
    {
        this.levelSO = levelSO;

        gridWidth  = levelSO.width;
        gridHeight = levelSO.height;
        grid       = new Grid <GemGridPosition>(gridWidth, gridHeight, 1f, Vector3.zero, (Grid <GemGridPosition> g, int x, int y) => new GemGridPosition(g, x, y));

        // Initialize Grid
        for (int x = 0; x < gridWidth; x++)
        {
            for (int y = 0; y < gridHeight; y++)
            {
                // Get Saved LevelGridPosition
                LevelSO.LevelGridPosition levelGridPosition = null;

                foreach (LevelSO.LevelGridPosition tmpLevelGridPosition in levelSO.levelGridPositionList)
                {
                    if (tmpLevelGridPosition.x == x && tmpLevelGridPosition.y == y)
                    {
                        levelGridPosition = tmpLevelGridPosition;
                        break;
                    }
                }

                if (levelGridPosition == null)
                {
                    // Couldn't find LevelGridPosition with this x, y!
                    Debug.LogError("Error! Null!");
                }

                GemSO   gem     = levelGridPosition.gemSO;
                GemGrid gemGrid = new GemGrid(gem, x, y);
                grid.GetGridObject(x, y).SetGemGrid(gemGrid);
                grid.GetGridObject(x, y).SetHasGlass(levelGridPosition.hasGlass);
            }
        }

        score     = 0;
        moveCount = levelSO.moveAmount;

        OnLevelSet?.Invoke(this, new OnLevelSetEventArgs {
            levelSO = levelSO, grid = grid
        });
    }
Exemplo n.º 4
0
    public void SetLevelSO(LevelSO levelSO)
    {
        this.levelSO = levelSO;

        gridWidth  = levelSO.width;
        gridHeight = levelSO.height;
        grid       = new Grid <GemGridPosition>(gridWidth, gridHeight, 1f, Vector3.zero, (Grid <GemGridPosition> g, int x, int y) => new GemGridPosition(g, x, y));

        // Initialize Grid
        for (int x = 0; x < gridWidth; x++)
        {
            for (int y = 0; y < gridHeight; y++)
            {
                // Get Saved LevelGridPosition
                LevelSO.LevelGridPosition levelGridPosition = null;

                foreach (LevelSO.LevelGridPosition tmpLevelGridPosition in levelSO.levelGridPositionList)
                {
                    if (tmpLevelGridPosition.x == x && tmpLevelGridPosition.y == y)
                    {
                        levelGridPosition = tmpLevelGridPosition;
                        break;
                    }
                }

                if (levelGridPosition == null)
                {
                    // Couldn't find LevelGridPosition with this x, y!
                    Debug.LogError("Error! Null!");
                }

                GemSO   gem     = levelGridPosition.gemSO;
                GemGrid gemGrid = new GemGrid(gem, x, y);
                grid.GetGridObject(x, y).SetGemGrid(gemGrid);
                grid.GetGridObject(x, y).SetHasGlass(levelGridPosition.hasGlass);
            }
        }

        if (randomGlass.enabled)
        {
            // Remove all glass
            for (int x = 0; x < gridWidth; x++)
            {
                for (int y = 0; y < gridHeight; y++)
                {
                    grid.GetGridObject(x, y).SetHasGlass(false);
                }
            }
            // Add Random Glass
            while (GetGlassAmount() < randomGlass.glassAmount)
            {
                int glassX = UnityEngine.Random.Range(0, gridWidth);
                int glassY = UnityEngine.Random.Range(0, gridHeight);
                grid.GetGridObject(glassX, glassY).SetHasGlass(true);
            }
        }

        score     = 0;
        moveCount = levelSO.moveAmount;

        OnLevelSet?.Invoke(this, new OnLevelSetEventArgs {
            levelSO = levelSO, grid = grid
        });
    }