This is a working part of my code, but I’m sure that there’s a cleaner way to achieve this. The idea is that there’s a grid and the code checks the grid for where its edges are. The walls are then placed on the edges of the grid with the correct rotation. It involves a combinations of walls too, such as: North + West, North + East, etc…
Is there a more efficient way to do this?
amm, each edge false
need to have a wall right?
well, this support single and double (corner) wall types, Will be particularly difficult expand it to tree walls
1 wall uses a angle multiplier angleBy90
, 2 wall is hardcoded like you did, but using code determinism to not count double cases.
void Build () {
//how many walls are? just one or two
int wallCount = 1;
//wall angle multiplier is, north = 0f, east = 1f, south = 2f, west = 3f
float angleBy90 = 0;
if(!north){
wallCount = 1;
}
if(!east){
if(wallCount == 0){
angleBy90 = 1f;
}else{
//only one state can reach here, north-east corner
InstantiateCornerWall(180f);
}
wallCount++;
}
if(!south){
if(wallCount == 0){
angleBy90 = 2f;
}else{
//only one state can reach here, south-east corner
InstantiateCornerWall(270f);
}
wallCount++;
}
if(!west){
if(wallCount == 0){
angleBy90 = 3f;
}else{
//two states can reach here, south-west and north-west corners
if(mathf.approximately(angleBy90, 0f))//north-west
InstantiateCornerWall(90f);
else //south-west
InstantiateCornerWall(0f);
}
wallCount++;
}
if(wallCount == 1)
InstantiatePlaneWall(angleBy90);
}
//separate methods to instantiate each type of wall
void InstantiatePlaneWall(float angleBy90){
GameObject tempWall = Instantiate(myScript.wall, transform.position, Quaternion.identity) as GameObject;
tempWall.transform.Rotate(0f, 90f*angleBy90, 0f);
tempWall.transform.translate(0f, 0.75f, 0.45f);
tempWall.transform.parent = transform.parent;
}
void InstantiateCornerWall(float angle){
GameObject tempWall = Instantiate(myScript.cornerWall, transform.position, Quaternion.identity) as GameObject;
tempWall.transform.Rotate(0f, angle, 0f);
tempWall.transform.translate(0f, 0.75f, -0.45f);
tempWall.transform.parent = transform.parent;
}
please next time paste the code, using a image makes the risk to have typos in variables, and one have to copy by hand the code in order to refactorize it