-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGUIComponent.cpp
More file actions
102 lines (82 loc) · 3.19 KB
/
GUIComponent.cpp
File metadata and controls
102 lines (82 loc) · 3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "GUIComponent.h"
#include "GraphicsSystem.h"
void GUIComponent::SetScreenPositionTL(const XMFLOAT2 &screenPosition)
{
float dx = screenPosition.x - mScreenPositionTL.x;
float dy = screenPosition.y - mScreenPositionTL.y;
float deltaRelX;
float deltaRelY;
if (mParent)
{
deltaRelX = dx / mParent->GetScreenDimensions().x;
deltaRelY = dy / mParent->GetScreenDimensions().y;
}
else
{
deltaRelX = dx / GraphicsSystem::GetInstance().GetDisplayWidth();
deltaRelY = dy / GraphicsSystem::GetInstance().GetDisplayHeight();
}
SetRelativePositionTL(XMFLOAT2(mRelativePositionTL.x + deltaRelX, mRelativePositionTL.y + deltaRelY));
}
void GUIComponent::SetScreenDimensions(const XMFLOAT2 &screenDimensions)
{
float dx = screenDimensions.x - mScreenDimensions.x;
float dy = screenDimensions.y - mScreenDimensions.y;
float deltaRelWidth;
float deltaRelHeight;
if (mParent)
{
deltaRelWidth = dx / mParent->GetScreenDimensions().x;
deltaRelHeight = dy / mParent->GetScreenDimensions().y;
}
else
{
deltaRelWidth = dx / GraphicsSystem::GetInstance().GetDisplayWidth();
deltaRelHeight = dy / GraphicsSystem::GetInstance().GetDisplayHeight();
}
SetRelativeDimensions(XMFLOAT2(mRelativeDimensions.x + deltaRelWidth, mRelativeDimensions.y + deltaRelHeight));
}
bool GUIComponent::IsInside(float x, float y)
{
return (x >= GetScreenPositionTL().x && x <= GetScreenPositionTR().x &&
y >= GetScreenPositionTL().y && y <= GetScreenPositionBL().y);
}
void GUIComponent::Update_()
{
XMFLOAT2 parentNormalizedPositionTL;
XMFLOAT2 parentNormalizedDimensions;
if (!mParent)
{
parentNormalizedPositionTL = XMFLOAT2(-1.0f, 1.0f);
parentNormalizedDimensions = XMFLOAT2(2.0f, 2.0f);
}
else
{
parentNormalizedPositionTL = mParent->mNormalizedPositionTL;
parentNormalizedDimensions = mParent->mNormalizedDimensions;
}
float normalizedPositionX = parentNormalizedPositionTL.x + parentNormalizedDimensions.x * mRelativePositionTL.x;
float normalizedPositionY = parentNormalizedPositionTL.y - parentNormalizedDimensions.y * mRelativePositionTL.y;
float normalizedWidth = parentNormalizedDimensions.x * mRelativeDimensions.x;
float normalizedHeight = parentNormalizedDimensions.y * mRelativeDimensions.y;
mNormalizedPositionTL = XMFLOAT2(normalizedPositionX, normalizedPositionY);
mNormalizedDimensions = XMFLOAT2(normalizedWidth, normalizedHeight);
XMFLOAT2 parentScreenPositionTL;
XMFLOAT2 parentScreenDimensions;
if (!mParent)
{
parentScreenPositionTL = XMFLOAT2(0.0f, 0.0f);
parentScreenDimensions = XMFLOAT2(GraphicsSystem::GetInstance().GetDisplayWidth(), GraphicsSystem::GetInstance().GetDisplayHeight());
}
else
{
parentScreenPositionTL = mParent->mScreenPositionTL;
parentScreenDimensions = mParent->mScreenDimensions;
}
float screenPositionX = parentScreenPositionTL.x + parentScreenDimensions.x * mRelativePositionTL.x;
float screenPositionY = parentScreenPositionTL.y + parentScreenDimensions.y * mRelativePositionTL.y;
float screenWidth = parentScreenDimensions.x * mRelativeDimensions.x;
float screenHeight = parentScreenDimensions.y * mRelativeDimensions.y;
mScreenPositionTL = XMFLOAT2(screenPositionX, screenPositionY);
mScreenDimensions = XMFLOAT2(screenWidth, screenHeight);
}