Esempio n. 1
0
        private bool CheckRequirements(out bool isInverted)
        {
            isInverted = false;

            if (EditManager.Instance.IsTerrainHovered == false)
            {
                return(false);
            }

            var bindings = Settings.KeyBindings.Instance;
            var state    = new byte[256];

            UnsafeNativeMethods.GetKeyboardState(state);

            if (!KeyHelper.IsKeyDown(state, System.Windows.Forms.Keys.LButton))
            {
                return(false);
            }

            if (KeyHelper.AreKeysDown(state, bindings.Interaction.Edit) == false &&
                KeyHelper.AreKeysDown(state, bindings.Interaction.EditInverse) == false)
            {
                return(false);
            }

            if (KeyHelper.AreKeysDown(state, bindings.Interaction.EditInverse))
            {
                isInverted = true;
            }

            return(true);
        }
Esempio n. 2
0
        private void CheckUpdateScale(Point cursor)
        {
            var state = new byte[256];

            UnsafeNativeMethods.GetKeyboardState(state);

            if (KeyHelper.AreKeysDown(state, Keys.Menu, Keys.RButton))
            {
                var dx       = cursor.X - mLastCursorPos.X;
                var newScale = mHoveredInstance.Scale + dx * 0.05f;
                newScale = Math.Max(newScale, 0);
                mHoveredInstance.UpdateScale(newScale);
            }
        }
Esempio n. 3
0
        public void Update(Camera cam, bool stateOnly)
        {
            if (mWindow.Focused == false || stateOnly)
            {
                mLastCursorPos = Cursor.Position;
                mLastUpdate    = DateTime.Now;
                return;
            }

            var keyState = new byte[256];

            UnsafeNativeMethods.GetKeyboardState(keyState);

            var positionChanged = false;
            var updateTerrain   = false;
            var diff            = (float)(DateTime.Now - mLastUpdate).TotalSeconds;

            var camBind = KeyBindings.Instance.Camera;

            if (KeyHelper.AreKeysDown(keyState, camBind.Forward))
            {
                positionChanged = true;
                updateTerrain   = true;
                cam.MoveForward(diff * mSpeedFactor);
            }

            if (KeyHelper.AreKeysDown(keyState, camBind.Backward))
            {
                positionChanged = true;
                updateTerrain   = true;
                cam.MoveForward(-diff * mSpeedFactor);
            }

            if (KeyHelper.AreKeysDown(keyState, camBind.Right))
            {
                positionChanged = true;
                updateTerrain   = true;
                cam.MoveRight(diff * mSpeedFactor);
            }

            if (KeyHelper.AreKeysDown(keyState, camBind.Left))
            {
                positionChanged = true;
                updateTerrain   = true;
                cam.MoveRight(-diff * mSpeedFactor);
            }

            if (KeyHelper.AreKeysDown(keyState, camBind.Up))
            {
                positionChanged = true;
                cam.MoveUp(diff * mSpeedFactor);
            }

            if (KeyHelper.AreKeysDown(keyState, camBind.Down))
            {
                positionChanged = true;
                cam.MoveUp(-diff * mSpeedFactor);
            }

            if (KeyHelper.IsKeyDown(keyState, Keys.RButton) && !KeyHelper.IsKeyDown(keyState, Keys.ControlKey) && !KeyHelper.IsKeyDown(keyState, Keys.Menu) && !KeyHelper.IsKeyDown(keyState, Keys.ShiftKey))
            {
                var curPos = Cursor.Position;
                var dx     = curPos.X - mLastCursorPos.X;
                var dy     = curPos.Y - mLastCursorPos.Y;

                if (dx != 0)
                {
                    cam.Yaw(dx * TurnFactor * (InvertX ? 1 : -1));
                }

                if (dy != 0)
                {
                    cam.Pitch(dy * TurnFactor * (InvertY ? 1 : -1));
                }
            }

            if (positionChanged && PositionChanged != null)
            {
                PositionChanged(cam.Position, updateTerrain);
            }

            mLastUpdate    = DateTime.Now;
            mLastCursorPos = Cursor.Position;
        }