diff --git a/resources/Schema/Components.xsd b/resources/Schema/Components.xsd
index c97f2a06..42abed82 100644
--- a/resources/Schema/Components.xsd
+++ b/resources/Schema/Components.xsd
@@ -44,6 +44,6 @@
-
+
\ No newline at end of file
diff --git a/resources/Schema/Components/Indicator.xml b/resources/Schema/Components/Indicator.xml
deleted file mode 100644
index 1dfc0077..00000000
--- a/resources/Schema/Components/Indicator.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- 10
-
\ No newline at end of file
diff --git a/resources/Schema/Components/SpriteIndicator.xml b/resources/Schema/Components/SpriteIndicator.xml
new file mode 100644
index 00000000..cbed22f0
--- /dev/null
+++ b/resources/Schema/Components/SpriteIndicator.xml
@@ -0,0 +1,5 @@
+
+
+ 10
+ false
+
\ No newline at end of file
diff --git a/resources/Schema/Components/Indicator.xsd b/resources/Schema/Components/SpriteIndicator.xsd
similarity index 59%
rename from resources/Schema/Components/Indicator.xsd
rename to resources/Schema/Components/SpriteIndicator.xsd
index 5015b13c..bd8c1038 100644
--- a/resources/Schema/Components/Indicator.xsd
+++ b/resources/Schema/Components/SpriteIndicator.xsd
@@ -3,13 +3,16 @@
-
+
Billbord a Sprite around global Y axis
+
+ Add a Team component to this Entity or Parent to make it visible only for that team
+
diff --git a/resources/Schema/Entities/Player.xml b/resources/Schema/Entities/Player.xml
index d4485112..e68c0dd8 100644
--- a/resources/Schema/Entities/Player.xml
+++ b/resources/Schema/Entities/Player.xml
@@ -13,6 +13,7 @@
+
@@ -60,6 +61,7 @@
Textures/Weapons/Crosshair/SmallThickHoleDot.png
false
+
@@ -110,6 +112,7 @@
Textures/HealthHUD3.png
+
@@ -135,6 +138,7 @@
Textures/Core/UnitHexagon.png
+
@@ -152,6 +156,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -167,6 +172,7 @@
Textures/Core/UnitHexagon.png
+
@@ -185,6 +191,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -200,6 +207,7 @@
Textures/Core/UnitHexagon.png
+
@@ -217,6 +225,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -232,6 +241,7 @@
Textures/Core/UnitHexagon.png
+
@@ -249,6 +259,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -264,6 +275,7 @@
Textures/Core/UnitHexagon.png
+
@@ -279,6 +291,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -304,6 +317,7 @@
+
Fonts/DroidSans.ttf,64
@@ -316,6 +330,7 @@
+
Fonts/DroidSans.ttf,64
@@ -330,6 +345,7 @@
+
Fonts/DroidSans.ttf,64
@@ -349,8 +365,10 @@
Idle
- 1.8314163732853146
+ 1.1964538350402378
1
+
+
Models/Characters/Assault/FirstPerson.mesh
@@ -368,8 +386,8 @@
Models/Weapons/Blue/AssaultWeaponBlue.mesh
-
-
+
+
@@ -406,6 +424,7 @@
Textures/Core/UnitHexagon.png
+
@@ -475,8 +494,10 @@
Idle
- 0.16333512901638159
+ 0.59503633283673452
1
+
+
AimRifle
@@ -499,8 +520,8 @@
Models/Weapons/Blue/AssaultWeaponBlue.mesh
-
-
+
+
@@ -570,6 +591,25 @@
+
+
+
+ Textures/Icons/Arrow.png
+ false
+
+
+
+
+
+ 30
+ true
+
+
+
+
+
+
+
diff --git a/resources/Schema/Entities/PlayerRed.xml b/resources/Schema/Entities/PlayerRed.xml
index 4be8fc26..c45f9280 100644
--- a/resources/Schema/Entities/PlayerRed.xml
+++ b/resources/Schema/Entities/PlayerRed.xml
@@ -13,6 +13,7 @@
+
@@ -60,6 +61,7 @@
Textures/Weapons/Crosshair/SmallThickHoleDot.png
false
+
@@ -110,6 +112,7 @@
Textures/HealthHUD3.png
+
@@ -135,6 +138,7 @@
Textures/Core/UnitHexagon.png
+
@@ -152,6 +156,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -167,6 +172,7 @@
Textures/Core/UnitHexagon.png
+
@@ -185,6 +191,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -200,6 +207,7 @@
Textures/Core/UnitHexagon.png
+
@@ -217,6 +225,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -232,6 +241,7 @@
Textures/Core/UnitHexagon.png
+
@@ -249,6 +259,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -264,6 +275,7 @@
Textures/Core/UnitHexagon.png
+
@@ -279,6 +291,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -304,6 +317,7 @@
+
Fonts/DroidSans.ttf,64
@@ -316,6 +330,7 @@
+
Fonts/DroidSans.ttf,64
@@ -330,6 +345,7 @@
+
Fonts/DroidSans.ttf,64
@@ -349,8 +365,10 @@
Idle
- 0.018170670865885086
+ 1.9065361003781902
1
+
+
Models/Characters/Assault/FirstPerson.mesh
@@ -368,8 +386,8 @@
Models/Weapons/Red/AssaultWeaponRed.mesh
-
-
+
+
@@ -406,6 +424,7 @@
Textures/Core/UnitHexagon.png
+
@@ -475,8 +494,10 @@
Idle
- 0.11675631578762591
+ 0.62178782386743592
1
+
+
AimRifle
@@ -499,8 +520,8 @@
Models/Weapons/Red/AssaultWeaponRed.mesh
-
-
+
+
@@ -570,6 +591,32 @@
+
+
+
+
+
+
+
+
+
+
+ Textures/Icons/Arrow.png
+ false
+
+
+
+
+
+ 30
+ true
+
+
+
+
+
+
+
diff --git a/src/Engine/Rendering/RenderSystem.cpp b/src/Engine/Rendering/RenderSystem.cpp
index a0534fed..7b0ea84f 100644
--- a/src/Engine/Rendering/RenderSystem.cpp
+++ b/src/Engine/Rendering/RenderSystem.cpp
@@ -52,40 +52,39 @@ void RenderSystem::fillSprites(std::list>& jobs, Worl
continue;
}
- std::string diffuseResource = cSprite["DiffuseTexture"];
- std::string glowResource = cSprite["GlowMap"];
- bool depthSorted = cSprite["DepthSort"];
- if (diffuseResource.empty() && glowResource.empty()) {
- continue;
- }
-
- float fillPercentage = 0.f;
- glm::vec4 fillColor = glm::vec4(0);
- if (world->HasComponent(entity.ID, "Fill")) {
- auto fillComponent = world->GetComponent(entity.ID, "Fill");
- fillPercentage = (float)(double)fillComponent["Percentage"];
- fillColor = (glm::vec4)fillComponent["Color"];
- }
-
glm::mat4 modelMatrix;
-
+
+ // See a sprite is an SpriteIndicator
bool isIndicator = false;
- if (world->HasComponent(entity.ID, "Indicator") || entity.FirstParentWithComponent("Indicator").Valid())
+ if (world->HasComponent(entity.ID, "SpriteIndicator"))
{
- EntityWrapper EntityWithIndicator;
- if (world->HasComponent(entity.ID, "Indicator")) {
- EntityWithIndicator = entity;
- }
- else {
- EntityWithIndicator = entity.FirstParentWithComponent("Indicator");
- }
- auto indicator = EntityWithIndicator["Indicator"];
+ auto indicator = entity["SpriteIndicator"];
float minScale = (float)(double)indicator["MinScale"];
+ bool hasTeam = indicator["VisibleForSingleTeamOnly"];
isIndicator = true;
glm::vec3 pos = Transform::AbsolutePosition(entity);
+ EntityWrapper entityTeam;
+ if (hasTeam && (entity.HasComponent("Team") || entity.FirstParentWithComponent("Team").Valid()) && m_LocalPlayer.World != nullptr) {
+ if (!entity.HasComponent("Team")) {
+ entityTeam = entity.FirstParentWithComponent("Team");
+ }
+ else {
+ entityTeam = entity;
+ }
+
+ ComponentWrapper& entityTeamComponent = entityTeam["Team"];
+ ComponentWrapper& localComponent = m_LocalPlayer["Team"];
+ int entityTeamInt = entityTeamComponent["Team"];
+ int localComponentInt = localComponent["Team"];
+ int SpectatorInt = localComponent["Team"].Enum("Spectator");
+ if (entityTeamInt != localComponentInt && localComponentInt != SpectatorInt) {
+ continue;
+ }
+ }
+
// 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;
@@ -142,10 +141,27 @@ void RenderSystem::fillSprites(std::list>& jobs, Worl
tranformationMatrix = tranformationMatrix * glm::scale(glm::vec3(minScale / diag, minScale / diag, minScale / diag));
}
modelMatrix = tranformationMatrix;
- } else {
+ }
+ else {
modelMatrix = Transform::ModelMatrix(entity.ID, world);
}
+
+ std::string diffuseResource = cSprite["DiffuseTexture"];
+ std::string glowResource = cSprite["GlowMap"];
+ bool depthSorted = cSprite["DepthSort"];
+ if (diffuseResource.empty() && glowResource.empty()) {
+ continue;
+ }
+
+ float fillPercentage = 0.f;
+ glm::vec4 fillColor = glm::vec4(0);
+ if (world->HasComponent(entity.ID, "Fill")) {
+ auto fillComponent = world->GetComponent(entity.ID, "Fill");
+ fillPercentage = (float)(double)fillComponent["Percentage"];
+ fillColor = (glm::vec4)fillComponent["Color"];
+ }
+
std::shared_ptr spriteJob = std::shared_ptr(new SpriteJob(cSprite, m_Camera, modelMatrix, world, fillColor, fillPercentage, depthSorted, isIndicator));
jobs.push_back(spriteJob);
@@ -168,30 +184,6 @@ bool RenderSystem::isEntityVisible(EntityWrapper& entity)
) {
return false;
}
-
- // If a sprite is an Indicator, it's not local on player and object is in the same team, then dispaly it
- if (
- entity.HasComponent("Indicator")
- && !entity.IsChildOf(m_LocalPlayer)
- && (entity.HasComponent("Team") || entity.FirstParentWithComponent("Team").Valid())
- && entity.HasComponent("Sprite")
- && m_LocalPlayer.World != nullptr
- ) {
- EntityWrapper entityTeam;
- if (!entity.HasComponent("Team")) {
- entityTeam = entity.FirstParentWithComponent("Team");
- } else {
- entityTeam = entity;
- }
- ComponentWrapper& entityTeamComponent = entityTeam["Team"];
- ComponentWrapper& localComponent = m_LocalPlayer["Team"];
- int entityTeamInt = entityTeamComponent["Team"];
- int localComponentInt = localComponent["Team"];
- int SpectatorInt = localComponent["Team"].Enum("Spectator");
- if (entityTeamInt != localComponentInt && localComponentInt != SpectatorInt) {
- return false;
- }
- }
return true;
}