예제 #1
0
        private void CalculatePointerMessages(Vector2 pointerLocation, bool pointerNewlyPressed, bool pointerNewlyReleased)
        {
            var gameObjectsUnderMouse = new List <int>();

            int?pickedGameObjectId = null;
            var objectPicked       = _sceneGraph.Pick(pointerLocation, ref pickedGameObjectId);

            if (objectPicked)
            {
                if (pickedGameObjectId != _previousGameObjectUnderPointer && _previousGameObjectUnderPointer.HasValue)
                {
                    _messageManager.QueueMessage(new PointerExitMessage(_previousGameObjectUnderPointer.Value));
                }

                if (_previousGameObjectUnderPointer == null || pickedGameObjectId.Value != _previousGameObjectUnderPointer.Value)
                {
                    _previousGameObjectUnderPointer = pickedGameObjectId;
                    _messageManager.QueueMessage(new PointerEnterMessage(pickedGameObjectId.Value));
                }

                if (pointerNewlyPressed)
                {
                    _messageManager.QueueMessage(new PointerPressMessage(pickedGameObjectId.Value));
                }
                if (pointerNewlyReleased)
                {
                    _messageManager.QueueMessage(new PointerReleaseMessage(pickedGameObjectId.Value));
                }
            }
            else if (_previousGameObjectUnderPointer >= 0)
            {
                _messageManager.QueueMessage(new PointerExitMessage(_previousGameObjectUnderPointer.Value));
                _previousGameObjectUnderPointer = null;
            }
        }
예제 #2
0
        private void CalculateKeyDownMessages(KeyboardState newKeyState)
        {
            var keys = newKeyState.GetPressedKeys().Where(key => !_oldKeyState.IsKeyDown(key));

            foreach (var key in keys)
            {
                _messageManager.QueueMessage(new KeyDownMessage(key));
            }
        }