Files
mcpe/source/client/player/input/PolygonArea.cpp
iProgramInCpp 60b21356a1 Integrate touch related development. (#90)
* * Add BuildActionIntention crap

* * Set Client and World projects to use MP compilation

* asd

* * Use the new BuildActionIntention to break and place blocks.

* * Reverse engineer the IArea system.

* * Copy break logic from survival into creative conditionally

* * Reverse IBuildInput and MouseHandler
* Replace the new relative paths in the client project with $(MC_ROOT) again

* * Reverse Multitouch, MouseDevice

* * Reverse a bunch of auxiliary classes for input.

* * Use CustomInputHolder instead of holding inputs manually.

* * Reverse a whole BUNCH of things!

* * Add feedback textures to the gitignore.

* * D-pad now renders! Also loads of other work.

* * More Stuff

* * Finish touch control bug fixing.

* * Finalize work.

* * One last thing..

* * Add a "cramped" mode to the options screen and start menu.

* * Oh, forgot to do something
2023-11-02 00:49:11 +02:00

44 lines
803 B
C++

#include "PolygonArea.hpp"
#include "common/Utils.hpp"
PolygonArea::PolygonArea(int count, const float* x, const float* y)
{
m_count = count;
m_xPos = new float[count];
m_yPos = new float[count];
for (int i = 0; i < count; i++)
{
m_xPos[i] = x[i];
m_yPos[i] = y[i];
}
}
PolygonArea::~PolygonArea()
{
SAFE_DELETE_ARRAY(m_xPos);
SAFE_DELETE_ARRAY(m_yPos);
}
bool PolygonArea::isInside(float x, float y)
{
bool result = false;
int idx = 0, idx2 = m_count - 1;
while (idx < m_count)
{
// horrible ass condition
if ((m_yPos[idx] <= y && m_yPos[idx2] > y || m_yPos[idx2] <= y && m_yPos[idx] > y)
&& ((((m_xPos[idx2] - m_xPos[idx]) * (y - m_yPos[idx]))
/ (m_yPos[idx2] - m_yPos[idx]))
+ m_xPos[idx]) > x)
{
result = !result;
}
idx2 = idx++;
}
return result;
}