public void ContinueProceduralArea() { Debug.Log("Spawn procedural pieces"); //For each of the current piece's exit locations for (int i = 0; i < currentBPP.exitLocations.Count; i++) { //Check if it's a connection PathConnectionPiece pcpLeft = currentPathArea.GetConnectionPieceOfBPP(currentBPP.exitLocations[i].nextLeftPathPiece); //If it's null, there was nothing to return //If not, then it is a connection piece, and extensions should be spawned for it if (pcpLeft != null) { BuildConnectionsToConnectedArea(pcpLeft); } //Else, spawn extensions normally else { BuildExtensionsForBPP(currentBPP.exitLocations[i].nextLeftPathPiece); } //Check if it's a connection PathConnectionPiece pcpRight = currentPathArea.GetConnectionPieceOfBPP(currentBPP.exitLocations[i].nextRightPathPiece); //If it's null, there was nothing to return //If not, then it is a connection piece, and extensions should be spawned for it if (pcpRight != null) { BuildConnectionsToConnectedArea(pcpRight); } //Else, spawn extensions normally else { BuildExtensionsForBPP(currentBPP.exitLocations[i].nextRightPathPiece); } } }
//[TODO] Extension code could probably / definitely be cleaned up (duplicates) //Procedural version of the above void BuildConnectionsToConnectedArea(PathConnectionPiece connectionPiece) { PathedArea connectedPathArea = ppMan.GetAreaOfType(connectionPiece.areaTo); //Move fixed areas accordingly if (connectedPathArea.thisAreaFormat == AreaFormat.Fixed) { //[TODO] properly reposition PositionFixedArea(connectionPiece.thisConnectionPiece, connectedPathArea); } //OR spawn extensions of next procedural area else { //Get Exit Location ref BuiltPathPiece extensionBPP = connectionPiece.thisConnectionPiece; //Get position for pieces to be placed Vector3 exitPosition = extensionBPP.exitLocations[0].pathTurnLocation.position; if (extensionBPP.exitLocations[0].canDoLeft) { //Spawn a left piece for this pathed area BuiltPathPiece leftPiece = ppMan.GetValidBPPForAreaType(connectionPiece.areaTo); //Position and rotate accordingly leftPiece.intendedMoveDirection = GetLeftMoveDirection(connectionPiece.connectionPieceDirection); leftPiece.transform.position = GetNextPlacementPosition(leftPiece.intendedMoveDirection, exitPosition, leftPiece); leftPiece.transform.eulerAngles = GetEulerAnglesForMoveDirection(leftPiece.intendedMoveDirection); extensionBPP.exitLocations[0].nextLeftPathPiece = leftPiece; switch (leftPiece.intendedMoveDirection) { case MoveDirection.North: extensionBPP.exitLocations[0].connectedTurnTriggerArea.northPiece = leftPiece; break; case MoveDirection.East: extensionBPP.exitLocations[0].connectedTurnTriggerArea.eastPiece = leftPiece; break; case MoveDirection.South: extensionBPP.exitLocations[0].connectedTurnTriggerArea.southPiece = leftPiece; break; case MoveDirection.West: extensionBPP.exitLocations[0].connectedTurnTriggerArea.westPiece = leftPiece; break; } //Activate piece ppMan.ActivatePathPiece_InConnectedArea(connectedPathArea, leftPiece, true, false); } if (extensionBPP.exitLocations[0].canDoRight) { //Spawn a right piece for this pathed area BuiltPathPiece rightPiece = ppMan.GetValidBPPForAreaType(connectionPiece.areaTo); //Position and rotate accordingly rightPiece.intendedMoveDirection = GetRightMoveDirection(connectionPiece.connectionPieceDirection); rightPiece.transform.position = GetNextPlacementPosition(rightPiece.intendedMoveDirection, exitPosition, rightPiece); rightPiece.transform.eulerAngles = GetEulerAnglesForMoveDirection(rightPiece.intendedMoveDirection); extensionBPP.exitLocations[0].nextRightPathPiece = rightPiece; switch (rightPiece.intendedMoveDirection) { case MoveDirection.North: extensionBPP.exitLocations[0].connectedTurnTriggerArea.northPiece = rightPiece; break; case MoveDirection.East: extensionBPP.exitLocations[0].connectedTurnTriggerArea.eastPiece = rightPiece; break; case MoveDirection.South: extensionBPP.exitLocations[0].connectedTurnTriggerArea.southPiece = rightPiece; break; case MoveDirection.West: extensionBPP.exitLocations[0].connectedTurnTriggerArea.westPiece = rightPiece; break; } //Activate piece ppMan.ActivatePathPiece_InConnectedArea(connectedPathArea, rightPiece, false, true); } } }