I'm making a puzzle game, and the basic puzzle mechanics seem to work fine.
However, after coding the core mechanics, I tried to implement a randomizer function so the puzzle wasn't already solved when you first loaded it up. I did the thing that made most sense in my mind, and that was to give each quad a unique name, and there after made them switch positions with the transform.positions command.
When trying to execute this function all I got was an CS0103 error that tells me that the unique assigned names didn't exist in the current context, which makes sense since the quads first will be created when the script is executed.
I just want to know if this is actually possible with my code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Puzzle : MonoBehaviour {
public Texture2D image;
//Amount of blocks per line(can be changed inside of unity)
public int blocksPerLine = 4;
Block emptyBlock;
//The function that calls the CreatePuzzle function
void Start()
{
CreatePuzzle();
Randomizer();
}
//CreatePuzzle function
void CreatePuzzle()
{
Texture2D[,] imageSlices = ImageSlicer.GetSlices(image, blocksPerLine);
//Everytime y is equal to 0 and less than the blocksPerLine it will postfix y, meaning it will create another block until it is at its limit.
for (int y = 0; y < blocksPerLine; y++)
{
for(int x = 0; x < blocksPerLine; x++)
{
//This creates the gameobject as the primitive type: Quad.
GameObject blockObject = GameObject.CreatePrimitive(PrimitiveType.Quad);
blockObject.name = "Piece" + x;
blockObject.transform.position = -Vector2.one * (blocksPerLine - 1) * .5f + new Vector2(x, y);
blockObject.transform.parent = transform;
Block block = blockObject.AddComponent<Block>();
block.OnBlockPressed += PlayerMoveBlockInput;
block.Init(new Vector2Int(x, y), imageSlices[x, y]);
//Creates an empty block, so that you're able to slide the puzzle around
if(y == 0 && x == blocksPerLine - 1)
{
blockObject.SetActive(false);
emptyBlock = block;
}
}
}
//Sets the sixe of the block to match the Camera view
Camera.main.orthographicSize = blocksPerLine * .55f;
}
void Randomizer()
{
Piece0.transform.positions = Piece1.transform.positions;
}
//The function that makes the player available to move the blocks
void PlayerMoveBlockInput(Block blockToMove)
{
if ((blockToMove.coord - emptyBlock.coord).sqrMagnitude == 1)
{
Vector2Int targetCoord = emptyBlock.coord;
emptyBlock.coord = blockToMove.coord;
blockToMove.coord = targetCoord;
Vector2 targetPosition = emptyBlock.transform.position;
emptyBlock.transform.position = blockToMove.transform.position;
blockToMove.transform.position = targetPosition;
}
}
}