This commit is contained in:
nastys
2019-07-30 13:48:28 +02:00
parent 17b6c02aee
commit d1349cfebe
157 changed files with 0 additions and 0 deletions
@@ -0,0 +1,135 @@
#include "Mouse.h"
#include "../../framework.h"
#include "../../Constants.h"
namespace TLAC::Input
{
Mouse* Mouse::instance;
Mouse::Mouse()
{
directInputMouse = new DirectInputMouse();
}
Mouse::~Mouse()
{
if (directInputMouse != nullptr)
delete directInputMouse;
}
Mouse* Mouse::GetInstance()
{
if (instance == nullptr)
instance = new Mouse();
return instance;
}
POINT Mouse::GetPosition()
{
return currentState.Position;
}
POINT Mouse::GetRelativePosition()
{
return currentState.RelativePosition;
}
POINT Mouse::GetDeltaPosition()
{
return
{
currentState.Position.x - lastState.Position.x,
currentState.Position.y - lastState.Position.y
};
}
long Mouse::GetMouseWheel()
{
return currentState.MouseWheel;
}
long Mouse::GetDeltaMouseWheel()
{
return currentState.MouseWheel - lastState.MouseWheel;
}
bool Mouse::HasMoved()
{
POINT delta = GetDeltaPosition();
return delta.x != 0 || delta.y != 0;
}
bool Mouse::GetIsScrolledUp()
{
return currentState.ScrolledUp;
}
bool Mouse::GetIsScrolledDown()
{
return currentState.ScrolledDown;
}
bool Mouse::GetWasScrolledUp()
{
return lastState.ScrolledUp;
}
bool Mouse::GetWasScrolledDown()
{
return lastState.ScrolledDown;
}
void Mouse::SetPosition(int x, int y)
{
lastState.Position.x = x;
lastState.Position.y = y;
SetCursorPos(x, y);
}
bool Mouse::PollInput()
{
lastState = currentState;
GetCursorPos(&currentState.Position);
currentState.RelativePosition = currentState.Position;
if (framework::DivaWindowHandle != NULL)
ScreenToClient(framework::DivaWindowHandle, &currentState.RelativePosition);
RECT hWindow;
GetClientRect(TLAC::framework::DivaWindowHandle, &hWindow);
gameHeight = (int*)RESOLUTION_HEIGHT_ADDRESS;
gameWidth = (int*)RESOLUTION_WIDTH_ADDRESS;
fbWidth = (int*)FB_WIDTH_ADDRESS;
fbHeight = (int*)FB_HEIGHT_ADDRESS;
if (directInputMouse != nullptr)
{
if (directInputMouse->Poll())
currentState.MouseWheel += directInputMouse->GetMouseWheel();
currentState.ScrolledUp = (GetDeltaMouseWheel() > 0);
currentState.ScrolledDown = (GetDeltaMouseWheel() < 0);
}
if ((fbWidth != gameWidth) && (fbHeight != gameHeight)) {
xoffset = ((float)16 / (float)9) * (hWindow.bottom - hWindow.top);
if (xoffset != (hWindow.right - hWindow.left))
{
scale = xoffset / (hWindow.right - hWindow.left);
xoffset = ((hWindow.right - hWindow.left) / 2) - (xoffset / 2);
}
else {
xoffset = 0;
scale = 1;
}
currentState.RelativePosition.x = ((currentState.RelativePosition.x - round(xoffset)) * *gameWidth / (hWindow.right - hWindow.left)) / scale;
currentState.RelativePosition.y = currentState.RelativePosition.y * *gameHeight / (hWindow.bottom - hWindow.top);
}
return true;
}
}
@@ -0,0 +1,49 @@
#pragma once
#include "../IInputDevice.h"
#include "../DirectInput/DirectInputMouse.h"
#include "MouseState.h"
namespace TLAC::Input
{
class Mouse : public IInputDevice
{
public:
~Mouse();
static Mouse* GetInstance();
bool PollInput() override;
POINT GetPosition();
POINT GetRelativePosition();
POINT GetDeltaPosition();
long GetMouseWheel();
long GetDeltaMouseWheel();
bool HasMoved();
bool GetIsScrolledUp();
bool GetIsScrolledDown();
bool GetWasScrolledUp();
bool GetWasScrolledDown();
void SetPosition(int x, int y);
private:
Mouse();
MouseState lastState;
MouseState currentState;
DirectInputMouse* directInputMouse = nullptr;
int* gameWidth;
int* gameHeight;
int* fbWidth;
int* fbHeight;
float xoffset;
float scale;
static Mouse* instance;
};
}
@@ -0,0 +1,15 @@
#pragma once
#include <windows.h>
namespace TLAC::Input
{
struct MouseState
{
POINT Position;
POINT RelativePosition;
long MouseWheel;
bool ScrolledUp;
bool ScrolledDown;
};
}