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); }
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 }); }
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 }); }