Beispiel #1
0
        public override void Update(EditorWorldRaycastResult worldIntersection, float deltaTime)
        {
            if (Input.GetMouseButtonUp(MouseButton.Left))
            {
                transHandles.LetGo();
            }
            else if (Input.GetMouseButtonDown(MouseButton.Left) &&
                     !GUISystem.HandledMouseOver && selectedObject != null)
            {
                transHandles.TryGrab(Camera.Active);
            }

            if (!GUISystem.HandledMouseOver && Input.GetMouseButtonDown(MouseButton.Left) && !transHandles.HasHold)
            {
                if (worldIntersection.HitEditorObject)
                {
                    EditorObjectRaycastResult intersection = worldIntersection.EditorObjectResult;
                    selectedObject = intersection.EditorObject;
                }
                else
                {
                    selectedObject = null;
                }

                window.SetObject(selectedObject);
            }

            if (selectedObject != null)
            {
                Vector3 delta = transHandles.Update(Camera.Active, 16);
                if (!canMove)
                {
                    delta = Vector3.Zero;
                }

                AxisAlignedBoundingBox aabb = selectedObject.GetCollider();
                transHandles.PositionToMinMax(aabb.Min, aabb.Max, Vector3.Zero);

                if (canMove)
                {
                    if (transHandles.HasHold)
                    {
                        if (Input.WrapCursor())
                        {
                            canMove = false;
                        }
                    }
                }
                else
                {
                    Camera.Active.Update(deltaTime);
                    transHandles.ResetStartPos(Camera.Active);
                    canMove = true;
                }

                selectedObject.Transform.Position += delta;
            }
        }