private void RegisterComponent(RoomRotationWallComponent comp) { if (comp) { var child = comp.transform.GetChild(0); var meshRenderer = child.GetComponent <MeshRenderer>(); _wallPlanes.Add(meshRenderer); comp.OnRotationRequested += OnRotationRequested; comp.OnResetWallMarks += ResetWallMarks; } }
private void OnRotationRequested(RoomRotationWallComponent comp) { var worldPos = comp.transform.position - _room.transform.position; var angle = 90; Vector3 axis; if (worldPos.x <= DeltaDistance * -1) { axis = Vector3.forward; } else if (worldPos.x >= DeltaDistance) { axis = Vector3.back; } else if (worldPos.y <= DeltaDistance * -1) { //floor, do nothing return; } else if (worldPos.y >= DeltaDistance) { //ceiling, rotate random 180 degrees right, left, front or back var random = new Random(); angle = 180; switch (random.Next(0, 3)) { case 0: axis = Vector3.forward; break; case 1: axis = Vector3.back; break; case 2: axis = Vector3.left; break; case 3: axis = Vector3.right; break; default: return; } } else if (worldPos.z <= DeltaDistance * -1) { axis = Vector3.left; } else if (worldPos.z >= DeltaDistance) { axis = Vector3.right; } else { return; } _room.AnimateRotation(axis, angle, _speed); }