diff --git a/resources/Schema/Components/Indicator.xml b/resources/Schema/Components/Indicator.xml
index 3aab2d1b..1dfc0077 100644
--- a/resources/Schema/Components/Indicator.xml
+++ b/resources/Schema/Components/Indicator.xml
@@ -1,7 +1,4 @@
- 10
- 10
- 1
- 1
+ 10
\ No newline at end of file
diff --git a/resources/Schema/Components/Indicator.xsd b/resources/Schema/Components/Indicator.xsd
index 69e47821..5015b13c 100644
--- a/resources/Schema/Components/Indicator.xsd
+++ b/resources/Schema/Components/Indicator.xsd
@@ -9,14 +9,7 @@
-
- After this distance between the camera and the sprite, the sprite will not get any smaller on the screen
-
-
- Smaller distance between the camera and the sprite, the sprite will not get any bigger on the screen
-
-
diff --git a/resources/Schema/Entities/Player.xml b/resources/Schema/Entities/Player.xml
index 64ebbf54..dfc8855c 100644
--- a/resources/Schema/Entities/Player.xml
+++ b/resources/Schema/Entities/Player.xml
@@ -349,7 +349,7 @@
Idle
- 0.30516549779527224
+ 1.9902125899398158
1
@@ -370,8 +370,8 @@
true
-
-
+
+
@@ -477,7 +477,7 @@
Idle
- 1.9204144556290004
+ 1.7887947062665859
1
@@ -501,8 +501,8 @@
Models/Weapons/Blue/AssaultWeaponBlue.mesh
-
-
+
+
@@ -575,7 +575,7 @@
- 30
+ 80
Textures/Icons/Arrow.png
@@ -585,7 +585,7 @@
-
+
diff --git a/resources/Schema/Entities/PlayerRed.xml b/resources/Schema/Entities/PlayerRed.xml
index a6c6d077..fc8dea66 100644
--- a/resources/Schema/Entities/PlayerRed.xml
+++ b/resources/Schema/Entities/PlayerRed.xml
@@ -349,7 +349,7 @@
Idle
- 0.73262309029003347
+ 1.5972608217572741
1
@@ -370,8 +370,8 @@
true
-
-
+
+
@@ -477,7 +477,7 @@
Idle
- 0.031207590802594609
+ 1.0291785284465931
1
@@ -501,8 +501,8 @@
Models/Weapons/Red/AssaultWeaponRed.mesh
-
-
+
+
@@ -575,7 +575,7 @@
- 30
+ 80
Textures/Icons/Arrow.png
@@ -584,7 +584,7 @@
-
+
diff --git a/src/Engine/Rendering/RenderSystem.cpp b/src/Engine/Rendering/RenderSystem.cpp
index c05b3681..a0534fed 100644
--- a/src/Engine/Rendering/RenderSystem.cpp
+++ b/src/Engine/Rendering/RenderSystem.cpp
@@ -67,16 +67,26 @@ void RenderSystem::fillSprites(std::list>& jobs, Worl
fillColor = (glm::vec4)fillComponent["Color"];
}
- glm::mat4 modelMatrix = glm::mat4(1);
+ glm::mat4 modelMatrix;
bool isIndicator = false;
if (world->HasComponent(entity.ID, "Indicator") || entity.FirstParentWithComponent("Indicator").Valid())
{
+ EntityWrapper EntityWithIndicator;
+ if (world->HasComponent(entity.ID, "Indicator")) {
+ EntityWithIndicator = entity;
+ }
+ else {
+ EntityWithIndicator = entity.FirstParentWithComponent("Indicator");
+ }
+ auto indicator = EntityWithIndicator["Indicator"];
+
+ float minScale = (float)(double)indicator["MinScale"];
isIndicator = true;
glm::vec3 pos = Transform::AbsolutePosition(entity);
- // Code for shcneking if sprite is inside or outside of screen
+ // Code for check if sprite is inside or outside of screen
//glm::vec4 projectedPos = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix() * glm::vec4(pos, 1.0f);
//projectedPos /= projectedPos.w;
//// Check if inside of outside of screen.
@@ -89,6 +99,13 @@ void RenderSystem::fillSprites(std::list>& jobs, Worl
glm::vec3 zAxis = glm::vec3(0.0f, 1.0f, 0.0f);
glm::vec3 normal = pos - m_Camera->Position();
+
+ //float distance = glm::length(normal);
+ //if (distance < minDistance) {
+ // pos = pos - glm::normalize(normal) * (distance - minDistance);
+ //} else if (distance > maxDistance) {
+ // pos = pos - glm::normalize(normal) * (distance - maxDistance);
+ //}
normal.y = 0;
normal = glm::normalize(normal);
glm::vec3 right = glm::cross(normal, zAxis);
@@ -97,21 +114,34 @@ void RenderSystem::fillSprites(std::list>& jobs, Worl
modelMatrix[0][0] = right.x;
modelMatrix[0][1] = right.y;
modelMatrix[0][2] = right.z;
+ modelMatrix[0][3] = 0.0f;
modelMatrix[1][0] = zAxis.x;
modelMatrix[1][1] = zAxis.y;
modelMatrix[1][2] = zAxis.z;
+ modelMatrix[1][3] = 0.0f;
modelMatrix[2][0] = normal.x;
modelMatrix[2][1] = normal.y;
modelMatrix[2][2] = normal.z;
+ modelMatrix[2][3] = 0.0f;
modelMatrix[3][0] = pos.x;
modelMatrix[3][1] = pos.y;
modelMatrix[3][2] = pos.z;
+ modelMatrix[3][3] = 1.0f;
- modelMatrix = modelMatrix * glm::scale(Transform::AbsoluteScale(entity));
-
+ glm::mat4 tranformationMatrix = modelMatrix * glm::scale(Transform::AbsoluteScale(entity));
+ glm::vec4 tmp = tranformationMatrix * glm::vec4(glm::vec3(0.5, 0.5, 0), 1.0f);
+ glm::vec2 projectedTopRight = m_Camera->WorldToScreen(glm::vec3(tmp), m_Renderer->GetViewportSize());
+ tmp = tranformationMatrix * glm::vec4(glm::vec3(-0.5, -0.5, 0), 1.0f);
+ glm::vec2 projectedBottomLeft = m_Camera->WorldToScreen(glm::vec3(tmp), m_Renderer->GetViewportSize());
+
+ float diag = glm::length(projectedBottomLeft - projectedTopRight);
+ if (diag < minScale) {
+ tranformationMatrix = tranformationMatrix * glm::scale(glm::vec3(minScale / diag, minScale / diag, minScale / diag));
+ }
+ modelMatrix = tranformationMatrix;
} else {
modelMatrix = Transform::ModelMatrix(entity.ID, world);
}