/********************************************************************
	Minecraft: Pocket Edition - Decompilation Project
	Copyright (C) 2023 iProgramInCpp

	The following code is licensed under the BSD 1 clause license.
	SPDX-License-Identifier: BSD-1-Clause
 ********************************************************************/

#include "MouseDevice.hpp"

MouseDevice::MouseDevice()
{
	_index = -1;
	_x = 0;
	_y = 0;
	_xOld = 0;
	_yOld = 0;

	for (int i = 0; i < BUTTON_COUNT; i++)
		_buttonStates[i] = 0;
}

void MouseDevice::feed(MouseButtonType buttonType, bool buttonState, int posX, int posY)
{
	if (buttonType != BUTTON_NONE)
		_inputs.push_back(MouseAction(buttonType, buttonState, posX, posY, 0));

	// Make sure button type is valid
	if (buttonType < BUTTON_COUNT)
	{
		// Check if we're processing a button-state update
		if (buttonType != BUTTON_NONE)
			_buttonStates[buttonType] = buttonState;

		_xOld = _x;
		_yOld = _y;
		_x = posX;
		_y = posY;
	}
}

short MouseDevice::getX()
{
	return short(_x);
}

short MouseDevice::getY()
{
	return short(_y);
}

bool MouseDevice::next()
{
	if (_index + 1 >= _inputs.size())
		return false;

	_index++;
	return true;
}

MouseButtonType MouseDevice::getEventButton()
{
	return _inputs[_index]._buttonType;
}

bool MouseDevice::isButtonDown(MouseButtonType btn)
{
	return getButtonState(btn);
}

void MouseDevice::reset()
{
	_inputs.clear();
	_index = -1;
}

MouseAction* MouseDevice::getEvent()
{
	return &_inputs[_index];
}

bool MouseDevice::getButtonState(MouseButtonType btn)
{
	if (btn < BUTTON_MIN || btn >= BUTTON_COUNT)
		return false;

	return _buttonStates[btn];
}
/*
void MouseDevice::setX(int x)
{
	_x = x;
}

void MouseDevice::setY(int y)
{
	_y = y;
}
*/
void MouseDevice::reset2()
{
	_xOld = _x;
	_yOld = _y;
}

bool MouseDevice::getEventButtonState()
{
	return _inputs[_index]._buttonState;
}
