forked from Kolyah35/minecraft-pe-0.6.1
the whole game
This commit is contained in:
169
src/platform/input/Mouse.cpp
Executable file
169
src/platform/input/Mouse.cpp
Executable file
@@ -0,0 +1,169 @@
|
||||
#include "Mouse.h"
|
||||
|
||||
//
|
||||
// MouseAction
|
||||
//
|
||||
MouseAction::MouseAction(char actionButtonId, char buttonData, short x, short y, char pointerId)
|
||||
{
|
||||
this->action = actionButtonId;
|
||||
this->data = buttonData;
|
||||
this->x = x;
|
||||
this->y = y;
|
||||
this->dx = this->dy = 0;
|
||||
this->pointerId = pointerId;
|
||||
}
|
||||
|
||||
MouseAction::MouseAction(char actionButtonId, char buttonData, short x, short y, short dx, short dy, char pointerId)
|
||||
{
|
||||
this->action = actionButtonId;
|
||||
this->data = buttonData;
|
||||
this->x = x;
|
||||
this->y = y;
|
||||
this->dx = dx;
|
||||
this->dy = dy;
|
||||
this->pointerId = pointerId;
|
||||
}
|
||||
|
||||
bool MouseAction::isButton() const
|
||||
{
|
||||
return action == ACTION_LEFT || action == ACTION_RIGHT;
|
||||
}
|
||||
|
||||
//
|
||||
// MouseDevice
|
||||
//
|
||||
MouseDevice::MouseDevice()
|
||||
: _index(-1),
|
||||
_x(0), _xOld(0),
|
||||
_y(0), _yOld(0),
|
||||
_dx(DELTA_NOTSET), _dy(DELTA_NOTSET),
|
||||
_firstMovementType(0)
|
||||
{
|
||||
for (int i = 0; i < MAX_NUM_BUTTONS; ++i)
|
||||
_buttonStates[i] = 0;
|
||||
}
|
||||
|
||||
void MouseDevice::reset() {
|
||||
_index = -1;
|
||||
_inputs.clear();
|
||||
_buttonStates[MouseAction::ACTION_WHEEL] = 0;
|
||||
}
|
||||
|
||||
char MouseDevice::getButtonState(int buttonId) {
|
||||
if (buttonId < MouseAction::ACTION_LEFT || buttonId > MouseAction::ACTION_WHEEL)
|
||||
return 0;
|
||||
return _buttonStates[buttonId];
|
||||
}
|
||||
|
||||
bool MouseDevice::isButtonDown(int buttonId) {
|
||||
return getButtonState(buttonId) != 0;
|
||||
}
|
||||
|
||||
/// Was the current movement the first movement after mouse down?
|
||||
bool MouseDevice::wasFirstMovement() {
|
||||
return _firstMovementType == 1;
|
||||
}
|
||||
|
||||
short MouseDevice::getX() { return _x; }
|
||||
short MouseDevice::getY() { return _y; }
|
||||
|
||||
short MouseDevice::getDX() { return (DELTA_NOTSET != _dx)? _dx : _x - _xOld; }
|
||||
short MouseDevice::getDY() { return (DELTA_NOTSET != _dy)? _dy : _y - _yOld; }
|
||||
|
||||
void MouseDevice::reset2() {
|
||||
_xOld = _x;
|
||||
_yOld = _y;
|
||||
_dx = _dy = DELTA_NOTSET;
|
||||
}
|
||||
|
||||
bool MouseDevice::next() {
|
||||
if (_index + 1 >= (int)_inputs.size())
|
||||
return false;
|
||||
|
||||
++_index;
|
||||
return true;
|
||||
}
|
||||
|
||||
void MouseDevice::rewind() {
|
||||
_index = -1;
|
||||
}
|
||||
|
||||
bool MouseDevice::getEventButtonState() {
|
||||
return _inputs[_index].data == MouseAction::DATA_DOWN;
|
||||
}
|
||||
|
||||
char MouseDevice::getEventButton() {
|
||||
return _inputs[_index].action;
|
||||
}
|
||||
|
||||
const MouseAction& MouseDevice::getEvent() { return _inputs[_index]; }
|
||||
|
||||
void MouseDevice::feed(char actionButtonId, char buttonData, short x, short y) {
|
||||
feed(actionButtonId, buttonData, x, y, 0, 0);
|
||||
}
|
||||
|
||||
void MouseDevice::feed(char actionButtonId, char buttonData, short x, short y, short dx, short dy) {
|
||||
|
||||
_inputs.push_back(MouseAction(actionButtonId, buttonData, x, y, dx, dy, 0));
|
||||
|
||||
if (actionButtonId != MouseAction::ACTION_MOVE) {
|
||||
_buttonStates[actionButtonId] = buttonData;
|
||||
|
||||
if (actionButtonId == MouseAction::ACTION_LEFT)
|
||||
_firstMovementType = -1;
|
||||
} else {
|
||||
if (_dx == DELTA_NOTSET) {
|
||||
_dx = _dy = 0;
|
||||
}
|
||||
_dx += dx;
|
||||
_dy += dy;
|
||||
|
||||
if (_firstMovementType == -1)
|
||||
_firstMovementType = 1;
|
||||
else
|
||||
_firstMovementType = 0;
|
||||
}
|
||||
|
||||
_xOld = _x;
|
||||
_yOld = _y;
|
||||
_x = x;
|
||||
_y = y;
|
||||
}
|
||||
|
||||
//
|
||||
// Mouse - static class wrapping a MouseDevice
|
||||
//
|
||||
void Mouse::reset() { _instance.reset(); }
|
||||
|
||||
char Mouse::getButtonState(int buttonId) { return _instance.getButtonState(buttonId); }
|
||||
|
||||
bool Mouse::isButtonDown(int buttonId) { return _instance.isButtonDown(buttonId); }
|
||||
|
||||
short Mouse::getX() { return _instance.getX(); }
|
||||
short Mouse::getY() { return _instance.getY(); }
|
||||
|
||||
short Mouse::getDX() { return _instance.getDX(); }
|
||||
short Mouse::getDY() { return _instance.getDY(); }
|
||||
|
||||
void Mouse::reset2() { _instance.reset2(); }
|
||||
|
||||
bool Mouse::next() { return _instance.next(); }
|
||||
void Mouse::rewind() { _instance.rewind(); }
|
||||
|
||||
bool Mouse::getEventButtonState() { return _instance.getEventButtonState(); }
|
||||
|
||||
char Mouse::getEventButton() { return _instance.getEventButton(); }
|
||||
|
||||
const MouseAction& Mouse::getEvent() { return _instance.getEvent(); }
|
||||
|
||||
void Mouse::feed(char actionButtonId, char buttonData, short x, short y) {
|
||||
feed(actionButtonId, buttonData, x, y, 0, 0);
|
||||
}
|
||||
void Mouse::feed(char actionButtonId, char buttonData, short x, short y, short dx, short dy) {
|
||||
//LOGI("Mouse::feed: %d, %d, xy: %d, %d\n", actionButtonId, buttonData, x, y);
|
||||
return _instance.feed(actionButtonId, buttonData, x, y, dx, dy);
|
||||
}
|
||||
|
||||
|
||||
MouseDevice Mouse::_instance;
|
||||
|
||||
Reference in New Issue
Block a user