コード例 #1
0
 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;
     }
 }
コード例 #2
0
        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);
        }