From 8a04e874945e73ceb0259de5f95101e4b7510f0a Mon Sep 17 00:00:00 2001 From: stiffly Date: Tue, 23 Feb 2016 14:31:35 +0100 Subject: [PATCH 01/68] The serverlist is displayed when pressing connect button. --- include/Engine/GUI/MainMenuSystem.h | 5 +++- include/Engine/Network/Client.h | 13 +-------- include/Engine/Network/EDisplayServerlist.h | 29 +++++++++++++++++++++ src/Engine/GUI/MainMenuSystem.cpp | 20 ++++++++++++-- src/Engine/Network/Client.cpp | 12 +++------ 5 files changed, 56 insertions(+), 23 deletions(-) create mode 100644 include/Engine/Network/EDisplayServerlist.h diff --git a/include/Engine/GUI/MainMenuSystem.h b/include/Engine/GUI/MainMenuSystem.h index ba69ff0d..dbba55ad 100644 --- a/include/Engine/GUI/MainMenuSystem.h +++ b/include/Engine/GUI/MainMenuSystem.h @@ -5,7 +5,8 @@ #include "../Rendering/IRenderer.h" #include "../Core/ResourceManager.h" #include "../Core/Event.h" - +#include "../Network/ESearchForServers.h" +#include "../Network/EDisplayServerlist.h" #include "EButtonClicked.h" #include "EButtonPressed.h" @@ -27,6 +28,8 @@ private: bool OnButtonRelease(const Events::ButtonReleased& e); EventRelay m_EPressed; bool OnButtonPress(const Events::ButtonPressed& e); + EventRelay m_EDisplayServerlist; + bool OnDisplayServerlist(const Events::DisplayServerlist& e); }; diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index d08b863a..a7ac89fa 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -25,18 +25,7 @@ #include "Network/SnapshotFilter.h" #include "Core/EPlayerSpawned.h" #include "Network/ESearchForServers.h" - -struct ServerInfo -{ - ServerInfo(std::string a, int b, std::string c, int d) - { - Address = a; Port = b; Name = c; PlayersConnected = d; - } - std::string Address = ""; - int Port = 0; - std::string Name = ""; - int PlayersConnected = 0; -}; +#include "Network/EDisplayServerlist.h" class Client : public Network { diff --git a/include/Engine/Network/EDisplayServerlist.h b/include/Engine/Network/EDisplayServerlist.h new file mode 100644 index 00000000..d80ad1ba --- /dev/null +++ b/include/Engine/Network/EDisplayServerlist.h @@ -0,0 +1,29 @@ +#ifndef Events_DisplayServerlist_h__ +#define Events_DisplayServerlist_h__ + +#include +#include +#include "Core/Event.h" + +struct ServerInfo +{ + ServerInfo(std::string address, int port, std::string name, int players) + { + Address = address; Port = port; Name = name; PlayersConnected = players; + } + std::string Address = ""; + int Port = 0; + std::string Name = ""; + int PlayersConnected = 0; +}; + +namespace Events +{ + +struct DisplayServerlist : public Event +{ + std::vector Serverlist; +}; + +} +#endif diff --git a/src/Engine/GUI/MainMenuSystem.cpp b/src/Engine/GUI/MainMenuSystem.cpp index f8bf032b..946decde 100644 --- a/src/Engine/GUI/MainMenuSystem.cpp +++ b/src/Engine/GUI/MainMenuSystem.cpp @@ -8,6 +8,7 @@ MainMenuSystem::MainMenuSystem(SystemParams params, IRenderer* renderer) EVENT_SUBSCRIBE_MEMBER(m_EPressed, &MainMenuSystem::OnButtonPress); EVENT_SUBSCRIBE_MEMBER(m_EReleased, &MainMenuSystem::OnButtonRelease); EVENT_SUBSCRIBE_MEMBER(m_EClicked, &MainMenuSystem::OnButtonClick); + EVENT_SUBSCRIBE_MEMBER(m_EDisplayServerlist, &MainMenuSystem::OnDisplayServerlist); } void MainMenuSystem::Update(double dt) @@ -19,8 +20,9 @@ bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e) { if(e.EntityName == "Play") { //Run play code - } else if(e.EntityName == "Connect") { - //Run connect code + } else if(e.EntityName == "Connecting") { + LOG_INFO("Searching for LAN servers..."); + m_EventBroker->Publish(Events::SearchForServers()); } else if(e.EntityName == "Host") { //Run host code } else if(e.EntityName == "Quit") { @@ -55,3 +57,17 @@ bool MainMenuSystem::OnButtonPress(const Events::ButtonPressed& e) return true; } +bool MainMenuSystem::OnDisplayServerlist(const Events::DisplayServerlist& e) +{ + LOG_INFO("This is a serverlist V2!"); + for (int i = 0; i < e.Serverlist.size(); i++) { + LOG_INFO("%s:%i\t%s\t%i/8" + , e.Serverlist[i].Address + , e.Serverlist[i].Port + , e.Serverlist[i].Name + , e.Serverlist[i].PlayersConnected + ); + } + return true; +} + diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 903cd929..5dbeaf30 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -80,7 +80,10 @@ void Client::Update() if (m_SearchingForServers) { if (m_SearchingTime < (1000* (std::clock() - m_StartSearchTime) / (double)CLOCKS_PER_SEC)) { m_SearchingForServers = false; - displayServerlist(); + //displayServerlist(); + Events::DisplayServerlist e; + e.Serverlist = m_Serverlist; + m_EventBroker->Publish(e); } } @@ -419,12 +422,6 @@ void Client::disconnect() bool Client::OnInputCommand(const Events::InputCommand & e) { - // TEMP - if (e.Command == "SearchForServers" && e.Value > 0) { - Events::SearchForServers e; - m_EventBroker->Publish(e); - } - if (e.PlayerID != -1) { return false; } @@ -492,7 +489,6 @@ bool Client::OnSearchForServers(const Events::SearchForServers& e) m_SearchingForServers = true; m_StartSearchTime = std::clock(); m_Serverlist.clear(); - LOG_INFO("Searching for LAN servers...\n"); Packet packet(MessageType::ServerlistRequest); m_ServerlistRequest.Broadcast(packet, 13); // TODO: Config return true; From b3038ef713920a1b5840aa970ffe82a35284fab8 Mon Sep 17 00:00:00 2001 From: Tleety Date: Fri, 26 Feb 2016 16:33:55 +0100 Subject: [PATCH 02/68] Includes are now supported in shader with the key #GLSL --- include/Engine/Rendering/ShaderProgram.h | 2 + resources/Shaders/ForwardPlus.frag.glsl | 3 ++ resources/Shaders/Util/CommonUniforms.glsl | 1 + src/Engine/Rendering/ShaderProgram.cpp | 47 +++++++++++++++++----- 4 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 resources/Shaders/Util/CommonUniforms.glsl diff --git a/include/Engine/Rendering/ShaderProgram.h b/include/Engine/Rendering/ShaderProgram.h index ad01c029..af90ff78 100644 --- a/include/Engine/Rendering/ShaderProgram.h +++ b/include/Engine/Rendering/ShaderProgram.h @@ -21,6 +21,8 @@ public: std::string GetFileName() const; GLuint GetHandle() const; bool IsCompiled() const; + static std::string ReadFile(std::string fileName); +private: protected: GLenum m_ShaderType; std::string m_FileName; diff --git a/resources/Shaders/ForwardPlus.frag.glsl b/resources/Shaders/ForwardPlus.frag.glsl index 6fbc9c27..fc5e7009 100644 --- a/resources/Shaders/ForwardPlus.frag.glsl +++ b/resources/Shaders/ForwardPlus.frag.glsl @@ -2,6 +2,8 @@ #define MIN_AMBIENT_LIGHT 0.3 +#GLSL "Shaders/Util/CommonUniforms.glsl" + uniform mat4 M; uniform mat4 V; uniform mat4 P; @@ -180,6 +182,7 @@ void main() color_result += FillColor; } sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1)); + //sceneColor = CommonUniforms.testColour; //sceneColor = vec4(reflectionColor.xyz, 1); color_result += glowTexel*GlowIntensity; diff --git a/resources/Shaders/Util/CommonUniforms.glsl b/resources/Shaders/Util/CommonUniforms.glsl new file mode 100644 index 00000000..046693f2 --- /dev/null +++ b/resources/Shaders/Util/CommonUniforms.glsl @@ -0,0 +1 @@ +#define testtest1234; \ No newline at end of file diff --git a/src/Engine/Rendering/ShaderProgram.cpp b/src/Engine/Rendering/ShaderProgram.cpp index ae536bc0..9d441f13 100644 --- a/src/Engine/Rendering/ShaderProgram.cpp +++ b/src/Engine/Rendering/ShaderProgram.cpp @@ -4,22 +4,29 @@ GLuint Shader::CompileShader(GLenum shaderType, std::string fileName) { LOG_INFO("Compiling shader \"%s\"", fileName.c_str()); - std::string shaderFile; - std::ifstream in(fileName, std::ios::in); - if (!in) { - LOG_ERROR("Error: Failed to open shader file \"%s\"", fileName.c_str()); - return 0; - } - in.seekg(0, std::ios::end); - shaderFile.resize((int)in.tellg()); - in.seekg(0, std::ios::beg); - in.read(&shaderFile[0], shaderFile.size()); - in.close(); + std::string shaderFile = ReadFile(fileName); GLuint shader = glCreateShader(shaderType); if (GLERROR("glCreateShader")) return 0; + std::size_t startPos = 0; + std::size_t SEofNewFile[2]; + while((startPos = shaderFile.find("#GLSL", startPos)) != std::string::npos) + { + SEofNewFile[0] = shaderFile.find('"', startPos+5)+1; + SEofNewFile[1] = shaderFile.find('"', SEofNewFile[0]); + if (SEofNewFile[0] == std::string::npos || SEofNewFile[1] == std::string::npos) + { + return 0; + } + + std::string replacementFileName = shaderFile.substr(SEofNewFile[0], SEofNewFile[1] - SEofNewFile[0]); + std::string replacementString = ReadFile(replacementFileName); + shaderFile.replace(startPos, SEofNewFile[1]+2 - startPos, replacementString + "\n"); + startPos += replacementString.length(); //This might not be wanted. + } + const GLchar* shaderFiles = shaderFile.c_str(); const GLint length = static_cast(shaderFile.length()); glShaderSource(shader, 1, &shaderFiles, &length); @@ -46,6 +53,24 @@ GLuint Shader::CompileShader(GLenum shaderType, std::string fileName) return shader; } +std::string Shader::ReadFile(std::string fileName) +{ + std::string shaderFile; + std::ifstream in(fileName, std::ios::in); + if (!in) { + LOG_ERROR("Error: Failed to open shader file \"%s\"", fileName.c_str()); + return 0; + } + + in.seekg(0, std::ios::end); + shaderFile.resize((int)in.tellg()); + in.seekg(0, std::ios::beg); + in.read(&shaderFile[0], shaderFile.size()); + in.close(); + return shaderFile; +} + + Shader::Shader(GLenum shaderType, std::string fileName) : m_ShaderType(shaderType), m_FileName(fileName) { m_ShaderHandle = 0; From b1a59e0ed2f9f9393c37891ba96a4c8586eec39c Mon Sep 17 00:00:00 2001 From: Tleety Date: Fri, 26 Feb 2016 17:46:18 +0100 Subject: [PATCH 03/68] Includes now use the key #include. Fixed a bug where it would crash if the file is not found. Fixed a bug where null terminators where included from the included file, causing it to stop reading after the first included file. --- resources/Shaders/ForwardPlus.frag.glsl | 9 +-------- resources/Shaders/Util/CommonUniforms.glsl | 7 ++++++- src/Engine/Rendering/ShaderProgram.cpp | 13 ++++++++----- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/resources/Shaders/ForwardPlus.frag.glsl b/resources/Shaders/ForwardPlus.frag.glsl index fc5e7009..1516e2a4 100644 --- a/resources/Shaders/ForwardPlus.frag.glsl +++ b/resources/Shaders/ForwardPlus.frag.glsl @@ -2,8 +2,6 @@ #define MIN_AMBIENT_LIGHT 0.3 -#GLSL "Shaders/Util/CommonUniforms.glsl" - uniform mat4 M; uniform mat4 V; uniform mat4 P; @@ -118,12 +116,7 @@ LightResult CalcDirectionalLightSource(vec4 direction, vec4 color, float intensi return result; } -vec4 CalcNormalMappedValue(vec3 normal, vec3 tangent, vec3 bitangent, vec2 textureCoordinate, sampler2D normalMap) -{ - mat3 TBN = mat3(tangent, bitangent, normal); - vec3 NormalMap = texture(normalMap, textureCoordinate).xyz * 2.0 - vec3(1.0); - return vec4(TBN * normalize(NormalMap), 0.0); -} +#include "Shaders/Util/CommonUniforms.glsl" void main() { diff --git a/resources/Shaders/Util/CommonUniforms.glsl b/resources/Shaders/Util/CommonUniforms.glsl index 046693f2..de6700ae 100644 --- a/resources/Shaders/Util/CommonUniforms.glsl +++ b/resources/Shaders/Util/CommonUniforms.glsl @@ -1 +1,6 @@ -#define testtest1234; \ No newline at end of file +vec4 CalcNormalMappedValue(vec3 normal, vec3 tangent, vec3 bitangent, vec2 textureCoordinate, sampler2D normalMap) +{ + mat3 TBN = mat3(tangent, bitangent, normal); + vec3 NormalMap = texture(normalMap, textureCoordinate).xyz * 2.0 - vec3(1.0); + return vec4(TBN * normalize(NormalMap), 0.0); +} \ No newline at end of file diff --git a/src/Engine/Rendering/ShaderProgram.cpp b/src/Engine/Rendering/ShaderProgram.cpp index 9d441f13..d2a45888 100644 --- a/src/Engine/Rendering/ShaderProgram.cpp +++ b/src/Engine/Rendering/ShaderProgram.cpp @@ -12,17 +12,20 @@ GLuint Shader::CompileShader(GLenum shaderType, std::string fileName) std::size_t startPos = 0; std::size_t SEofNewFile[2]; - while((startPos = shaderFile.find("#GLSL", startPos)) != std::string::npos) + std::string key = "#include"; + while((startPos = shaderFile.find(key, startPos)) != std::string::npos) { - SEofNewFile[0] = shaderFile.find('"', startPos+5)+1; + SEofNewFile[0] = shaderFile.find('"', startPos+key.length())+1; SEofNewFile[1] = shaderFile.find('"', SEofNewFile[0]); if (SEofNewFile[0] == std::string::npos || SEofNewFile[1] == std::string::npos) - { return 0; - } std::string replacementFileName = shaderFile.substr(SEofNewFile[0], SEofNewFile[1] - SEofNewFile[0]); std::string replacementString = ReadFile(replacementFileName); + size_t firstof = replacementString.find_first_of((char)0); + replacementString.erase(firstof, replacementString.size() - firstof); + if (replacementString.length() <= 0) + return 0; shaderFile.replace(startPos, SEofNewFile[1]+2 - startPos, replacementString + "\n"); startPos += replacementString.length(); //This might not be wanted. } @@ -59,7 +62,7 @@ std::string Shader::ReadFile(std::string fileName) std::ifstream in(fileName, std::ios::in); if (!in) { LOG_ERROR("Error: Failed to open shader file \"%s\"", fileName.c_str()); - return 0; + return ""; } in.seekg(0, std::ios::end); From 06614aa9078f3facedcf1ea02d9dc9e39b612d92 Mon Sep 17 00:00:00 2001 From: William Moberg Date: Fri, 4 Mar 2016 05:41:29 +0100 Subject: [PATCH 04/68] SpectatorCameraSystem handles the overwatch cameras. Set camera to a class pick screen when connecting. Cannot spawn until both team and class has been picked. Preparations for class aware PlayerSpawnSystem. --- include/Game/Systems/PlayerSpawnSystem.h | 1 + include/Game/Systems/SpectatorCameraSystem.h | 22 + resources/DefaultInput.ini | 3 +- .../Schema/Entities/NewMapWSpectatorCam.xml | 3473 +++++++++-------- resources/Schema/Entities/OverwatchCamera.xml | 99 +- src/Game/Game.cpp | 2 + src/Game/Systems/PlayerSpawnSystem.cpp | 71 +- src/Game/Systems/SpectatorCameraSystem.cpp | 66 + 8 files changed, 1995 insertions(+), 1742 deletions(-) create mode 100644 include/Game/Systems/SpectatorCameraSystem.h create mode 100644 src/Game/Systems/SpectatorCameraSystem.cpp diff --git a/include/Game/Systems/PlayerSpawnSystem.h b/include/Game/Systems/PlayerSpawnSystem.h index 70f94807..17364a81 100644 --- a/include/Game/Systems/PlayerSpawnSystem.h +++ b/include/Game/Systems/PlayerSpawnSystem.h @@ -19,6 +19,7 @@ private: { int PlayerID; ComponentInfo::EnumType Team; + ComponentInfo::EnumType Class; }; bool m_NetworkEnabled = false; diff --git a/include/Game/Systems/SpectatorCameraSystem.h b/include/Game/Systems/SpectatorCameraSystem.h new file mode 100644 index 00000000..5a00279b --- /dev/null +++ b/include/Game/Systems/SpectatorCameraSystem.h @@ -0,0 +1,22 @@ +#ifndef SpectatorCameraSystem_h__ +#define SpectatorCameraSystem_h__ + +#include "Core/System.h" +#include "Input/EInputCommand.h" + +class SpectatorCameraSystem : public ImpureSystem +{ +public: + SpectatorCameraSystem(SystemParams params); + + virtual void Update(double dt) override; + +private: + int m_PickedTeam; + bool m_CamSetToTeamPick; + + EventRelay m_EInputCommand; + bool OnInputCommand(const Events::InputCommand& e); +}; + +#endif \ No newline at end of file diff --git a/resources/DefaultInput.ini b/resources/DefaultInput.ini index b47c1e9b..18fb943f 100644 --- a/resources/DefaultInput.ini +++ b/resources/DefaultInput.ini @@ -28,4 +28,5 @@ P=SwitchToPlayer K=TakeDamage,1500 F2=PerformanceTimingResetAllTimers F3=PerformanceTimingCreateExcelData -F4=SwapToClassPick \ No newline at end of file +Comma=SwapToClassPick +Period=SwapToTeamPick \ No newline at end of file diff --git a/resources/Schema/Entities/NewMapWSpectatorCam.xml b/resources/Schema/Entities/NewMapWSpectatorCam.xml index 395eb1de..2305c008 100644 --- a/resources/Schema/Entities/NewMapWSpectatorCam.xml +++ b/resources/Schema/Entities/NewMapWSpectatorCam.xml @@ -23,6 +23,18 @@ + + + + + Models/Props/Highground2.mesh + + + + + + + @@ -75,18 +87,6 @@ - - - - - Models/Props/Highground2.mesh - - - - - - - @@ -1843,6 +1843,1006 @@ + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + @@ -3229,88 +4229,6 @@ - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - @@ -3366,6 +4284,60 @@ + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + @@ -3380,6 +4352,34 @@ + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + @@ -3396,1011 +4396,24 @@ - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + @@ -4479,19 +4492,6 @@ - - - - - Models/Props/SciFiHolder1.mesh - - - - - - - - @@ -4519,35 +4519,8 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - + + @@ -4574,36 +4547,8 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - + + @@ -4629,36 +4574,8 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - + + @@ -4677,47 +4594,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - @@ -4732,6 +4608,130 @@ + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + @@ -4750,434 +4750,11 @@ - - - - - - - - - 10 - - - - - - - - - - - 1 - - - - - - - - - 10 - - - - - - - - - - - 10 - - - - - - - - - - 10 - - - - - - - - - - - - - 10 - - - - - - - - - - - 1 - - - - - - - - - - - - - - Schema/Entities/Player.xml - - - - - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - - - - - - - - Models/Props/CapturePoint/CapturePointNeutral.mesh - - - - - - - - - - 2 - - - - Models/Core/UnitCylinder.mesh - - true - - - - - - - - - - - - - - - - Models/Props/CapturePoint/CapturePointRed.mesh - - - - - - - - - - - - - - - - Models/Core/UnitCylinder.mesh - - true - - - - - - - - - - - - - - - - - - - - Models/Props/CapturePoint/CapturePointNeutral.mesh - - - - - - - - - - 3 - - - - Models/Core/UnitCylinder.mesh - - true - - - - - - - - - - - - - - - - Models/Props/CapturePoint/CapturePointNeutral.mesh - - - - - - - - - - 1.5498908015879351 - 1 - - - - Models/Core/UnitCylinder.mesh - - true - - - - - - - - - - - - - - - - Models/Props/CapturePoint/CapturePointBlue.mesh - - - - - - - - - - - - - 4 - - - - Models/Core/UnitCylinder.mesh - - true - - - - - - - - - - - - - - - - - - - - - - Schema/Entities/PlayerRed.xml - - - - - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - @@ -5209,8 +4786,8 @@ Models/Props/PickUps/AmmoPickUp.mesh - - + + @@ -5228,27 +4805,8 @@ Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - + + @@ -5285,8 +4843,8 @@ Models/Props/PickUps/HealthPickUp.mesh - - + + @@ -5304,13 +4862,455 @@ Models/Props/PickUps/AmmoPickUp.mesh - - + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + + + + + Schema/Entities/Player.xml + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + 10 + + + + + + + + + + + + + 1 + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 2 + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointRed.mesh + + + + + + + + + + + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 3 + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 1.5498908015879351 + 1 + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointBlue.mesh + + + + + + + + + + + + + 4 + + + + + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + + + + + + + + Schema/Entities/PlayerRed.xml + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + @@ -5367,12 +5367,12 @@ - - 2 - + + 2 + Textures/Core/UnitHexagon_Rotated.png @@ -5401,12 +5401,12 @@ - - 3 - + + 3 + Textures/Core/UnitHexagon_Rotated.png @@ -5435,12 +5435,12 @@ - - 4 - + + 4 + Textures/Core/UnitHexagon_Rotated.png @@ -5469,13 +5469,13 @@ - - 1 - 0.10332605343919568 + + 1 + Textures/Core/UnitHexagon_Rotated.png @@ -5504,10 +5504,10 @@ - + Textures/Core/UnitHexagon_Rotated.png @@ -5613,6 +5613,79 @@ + + + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 2 + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 3 + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + PickTeam + 1 + + + + + + + + + + + + diff --git a/resources/Schema/Entities/OverwatchCamera.xml b/resources/Schema/Entities/OverwatchCamera.xml index a2b774d3..a6ef1f74 100644 --- a/resources/Schema/Entities/OverwatchCamera.xml +++ b/resources/Schema/Entities/OverwatchCamera.xml @@ -55,12 +55,12 @@ - - 2 - + + 2 + Textures/Core/UnitHexagon_Rotated.png @@ -89,12 +89,12 @@ - - 3 - + + 3 + Textures/Core/UnitHexagon_Rotated.png @@ -123,12 +123,12 @@ - - 4 - + + 4 + Textures/Core/UnitHexagon_Rotated.png @@ -157,13 +157,13 @@ - - 1 - 0.10332605343919568 + + 1 + Textures/Core/UnitHexagon_Rotated.png @@ -192,10 +192,10 @@ - + Textures/Core/UnitHexagon_Rotated.png @@ -301,6 +301,79 @@ + + + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 2 + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 3 + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + PickTeam + 1 + + + + + + + + + + + + diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index 0629fbd5..d3972f94 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -34,6 +34,7 @@ #include "Game/Systems/KillFeedSystem.h" #include "Game/Systems/BoostSystem.h" #include "Game/Systems/BoostIconsHUDSystem.h" +#include "Game/Systems/SpectatorCameraSystem.h" #include "GUI/ButtonSystem.h" #include "GUI/MainMenuSystem.h" @@ -155,6 +156,7 @@ Game::Game(int argc, char* argv[]) m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer); m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer); m_SystemPipeline->AddSystem(updateOrderLevel); + m_SystemPipeline->AddSystem(updateOrderLevel); // Populate Octree with collidables ++updateOrderLevel; m_SystemPipeline->AddSystem(updateOrderLevel, m_OctreeCollision, "Collidable"); diff --git a/src/Game/Systems/PlayerSpawnSystem.cpp b/src/Game/Systems/PlayerSpawnSystem.cpp index 39fa1606..56ace14c 100644 --- a/src/Game/Systems/PlayerSpawnSystem.cpp +++ b/src/Game/Systems/PlayerSpawnSystem.cpp @@ -59,7 +59,7 @@ void PlayerSpawnSystem::Update(double dt) } int numSpawnedPlayers = 0; - for (auto& req : m_SpawnRequests) { + for (auto it = m_SpawnRequests.begin(); it != m_SpawnRequests.end(); ++it) { for (auto& cPlayerSpawn : *playerSpawns) { EntityWrapper spawner(m_World, cPlayerSpawn.EntityID); if (!spawner.HasComponent("Spawner")) { @@ -69,10 +69,12 @@ void PlayerSpawnSystem::Update(double dt) // If the spawner has a team affiliation, check it if (spawner.HasComponent("Team")) { auto cSpawnerTeam = spawner["Team"]; - if ((int)cSpawnerTeam["Team"] != req.Team) { - // Increase num spawned players if someone picks spectator, since it is valid to pick spectator + if ((int)cSpawnerTeam["Team"] != it->Team) { + // Increase num spawned players if someone picks spectator or didn't + // pick a class yet, since it is valid // but don't spawn anything, goto next spawnrequest. - if (req.Team == (int)cSpawnerTeam["Team"].Enum("Spectator")) { + // TODO: -1 Signifies no class picked, enum here later? + if (it->Class == -1 || it->Team == (int)cSpawnerTeam["Team"].Enum("Spectator")) { ++numSpawnedPlayers; break; } @@ -80,18 +82,24 @@ void PlayerSpawnSystem::Update(double dt) } } + // TODO: Choose a different spawner depending on class picked? + // Spawn the player! EntityWrapper player = SpawnerSystem::Spawn(spawner, EntityWrapper::Invalid, "Player"); // Set the player team affiliation - player["Team"]["Team"] = req.Team; + player["Team"]["Team"] = it->Team; // Publish a PlayerSpawned event Events::PlayerSpawned e; - e.PlayerID = req.PlayerID; + e.PlayerID = it->PlayerID; e.Player = player; e.Spawner = spawner; m_EventBroker->Publish(e); ++numSpawnedPlayers; + it = m_SpawnRequests.erase(it); + break; + } + if (it == m_SpawnRequests.end()) { break; } } @@ -100,12 +108,12 @@ void PlayerSpawnSystem::Update(double dt) } else { LOG_DEBUG("%i players were spawned or set as spectator.", numSpawnedPlayers); } - m_SpawnRequests.clear(); } bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) { - if (e.Command != "PickTeam" && e.Command != "SwapToClassPick") { + bool removeRequest = e.Command == "SwapToClassPick" || e.Command == "SwapToTeamPick"; + if (e.Command != "PickTeam" && e.Command != "PickClass" && !removeRequest) { return false; } @@ -113,19 +121,6 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) return false; } - // A dead client should be able to swap to the overwatch camera. - if (IsClient && !LocalPlayer.Valid()) { - // Set the camera as active, if it exists. - // Find the respawn camera or class pick camera. - std::string camName = e.Command == "SwapToClassPick" ? "PickClassCamera" : "SpectatorCamera"; - EntityWrapper spectatorCam = m_World->GetFirstEntityByName(camName); - if (spectatorCam.Valid() && spectatorCam.HasComponent("Camera")) { - Events::SetCamera eSetCamera; - eSetCamera.CameraEntity = spectatorCam; - m_EventBroker->Publish(eSetCamera); - } - } - // Team picks should be processed ONLY server-side! // Don't make a spawn request if we're the client. if (!IsServer && m_NetworkEnabled) { @@ -137,26 +132,38 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) for (; iter != m_SpawnRequests.end(); ++iter) { if (iter->PlayerID == e.PlayerID) { // If player wants to switch class, remove their spawn request. - if (e.Command == "SwapToClassPick") { + if (removeRequest) { m_SpawnRequests.erase(iter); } break; } } - if (e.Command == "SwapToClassPick") { + // Return if we were only supposed to remove a request, not add one. + if (removeRequest) { return true; } + //If we get here, add or alter a spawn request. if (iter != m_SpawnRequests.end()) { - // If player is in queue to spawn, then change their team affiliation in the request. - iter->Team = (ComponentInfo::EnumType)e.Value; + // If player is in queue to spawn, then change their team affiliation or class in the request. + if (e.Command == "PickTeam") { + iter->Team = (ComponentInfo::EnumType)e.Value; + } else { + iter->Class = (ComponentInfo::EnumType)e.Value; + } } else if (m_PlayerEntities.count(e.PlayerID) == 0 || !m_PlayerEntities[e.PlayerID].Valid()) { // If player is not in queue to spawn, then create a spawn request, // but only if they are spectating and/or just connected. SpawnRequest req; req.PlayerID = e.PlayerID; - req.Team = (ComponentInfo::EnumType)e.Value; + if (e.Command == "PickTeam") { + req.Team = (ComponentInfo::EnumType)e.Value; + req.Class = -1; // TODO: -1 Signifies no class picked, enum here later? + } else { + req.Team = 1; // TODO: 1 Signifies spectator, should probably have real enum here later. + req.Class = (ComponentInfo::EnumType)e.Value; + } m_SpawnRequests.push_back(req); } else { return false; @@ -210,7 +217,7 @@ bool PlayerSpawnSystem::OnPlayerSpawned(Events::PlayerSpawned& e) bool PlayerSpawnSystem::OnPlayerDeath(Events::PlayerDeath& e) { - //Only spawn request if network is disabled or we are server. + // Only spawn request if network is disabled or we are server. if (!IsServer && m_NetworkEnabled) { return false; } @@ -218,7 +225,7 @@ bool PlayerSpawnSystem::OnPlayerDeath(Events::PlayerDeath& e) return false; } ComponentWrapper cTeam = e.Player["Team"]; - //A spectator can't die anyway + // A spectator can't die anyway if ((ComponentInfo::EnumType)cTeam["Team"] == cTeam["Team"].Enum("Spectator")) { return false; } @@ -230,6 +237,14 @@ bool PlayerSpawnSystem::OnPlayerDeath(Events::PlayerDeath& e) SpawnRequest req; req.PlayerID = m_PlayerIDs.at(e.Player.ID); req.Team = cTeam["Team"]; + // TODO: Better than temp class state code. + if (e.Player.HasComponent("DashAbility")) { + req.Class = 1; // Assault + } else if (e.Player.HasComponent("SprintAbility")) { + req.Class = 3; // Sniper + } else { + req.Class = 2; // Defender + } m_SpawnRequests.push_back(req); return true; diff --git a/src/Game/Systems/SpectatorCameraSystem.cpp b/src/Game/Systems/SpectatorCameraSystem.cpp new file mode 100644 index 00000000..bf78cfb0 --- /dev/null +++ b/src/Game/Systems/SpectatorCameraSystem.cpp @@ -0,0 +1,66 @@ +#include "Systems/SpectatorCameraSystem.h" +#include "Rendering/ESetCamera.h" + +SpectatorCameraSystem::SpectatorCameraSystem(SystemParams params) + : System(params) + , m_CamSetToTeamPick(false) + , m_PickedTeam(-1) +{ + EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &SpectatorCameraSystem::OnInputCommand); +} + +void SpectatorCameraSystem::Update(double dt) +{ + if (!m_CamSetToTeamPick && IsClient) { + // Find the class pick camera and set them to it, since they need to pick a team before they can leave the screen. + EntityWrapper spectatorCam = m_World->GetFirstEntityByName("PickTeamCamera"); + if (spectatorCam.Valid() && spectatorCam.HasComponent("Camera")) { + m_CamSetToTeamPick = true; + Events::SetCamera eSetCamera; + eSetCamera.CameraEntity = spectatorCam; + m_EventBroker->Publish(eSetCamera); + } + } +} + +bool SpectatorCameraSystem::OnInputCommand(const Events::InputCommand& e) +{ + // Only the client should do this, and only if player is not spawned. + if (!IsClient || LocalPlayer.Valid()) { + return false; + } + bool swapToClass = e.Command == "PickTeam" || e.Command == "SwapToClassPick"; + if (e.Value == 0 || !swapToClass && e.Command != "SwapToTeamPick" && e.Command != "PickClass") { + return false; + } + + if (e.Command == "PickTeam") { + m_PickedTeam = e.Value; + } + + // If a team has not been picked, they may not exit the pick team screen. + if (m_PickedTeam == -1) { + return false; + } + + // A dead client should be able to swap to and between the overwatch cameras. + std::string camName; + // TODO: 1 Signifies spectator, should probably have real enum here later. + // Spectators should never end up at the class select, instead put them at the SpectatorCamera. + if (swapToClass && m_PickedTeam != 1) { + camName = "PickClassCamera"; + } else if (e.Command == "SwapToTeamPick") { + camName = "PickTeamCamera"; + } else { + camName = "SpectatorCamera"; + } + EntityWrapper spectatorCam = m_World->GetFirstEntityByName(camName); + // Set the camera as active, if it exists. + if (spectatorCam.Valid() && spectatorCam.HasComponent("Camera")) { + Events::SetCamera eSetCamera; + eSetCamera.CameraEntity = spectatorCam; + m_EventBroker->Publish(eSetCamera); + } + + return true; +} \ No newline at end of file From 03843774d7d8f4adb4ace9f825efc275bd5a8e25 Mon Sep 17 00:00:00 2001 From: William Moberg Date: Fri, 4 Mar 2016 07:01:47 +0100 Subject: [PATCH 05/68] Moved buttons and fixed so you can't spawn with no class. --- .../Schema/Entities/NewMapWSpectatorCam.xml | 2332 +++++++++-------- resources/Schema/Entities/OverwatchCamera.xml | 372 ++- src/Game/Systems/PlayerSpawnSystem.cpp | 17 +- 3 files changed, 1481 insertions(+), 1240 deletions(-) diff --git a/resources/Schema/Entities/NewMapWSpectatorCam.xml b/resources/Schema/Entities/NewMapWSpectatorCam.xml index 2305c008..fc4dd9a1 100644 --- a/resources/Schema/Entities/NewMapWSpectatorCam.xml +++ b/resources/Schema/Entities/NewMapWSpectatorCam.xml @@ -23,6 +23,18 @@ + + + + + Models/Props/Highground1.mesh + + + + + + + @@ -75,18 +87,6 @@ - - - - - Models/Props/Highground1.mesh - - - - - - - @@ -2843,6 +2843,178 @@ + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + @@ -3229,6 +3401,125 @@ + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + + Models/Core/UnitPlane.mesh + + true + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + @@ -3283,96 +3574,6 @@ - - - - - Models/Props/Walls/MediumWall3.mesh - - - - - - - - - - - Models/Props/Walls/MediumWall3.mesh - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - @@ -3441,21 +3642,6 @@ - - - - Models/Core/UnitPlane.mesh - - true - - - - - - - - - @@ -3499,20 +3685,6 @@ - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - @@ -3520,6 +3692,35 @@ + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + @@ -3533,119 +3734,6 @@ - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - - Models/Props/Flora/TreeLog.mesh - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - @@ -3664,7 +3752,7 @@ true - + @@ -3676,7 +3764,7 @@ true - + @@ -3695,57 +3783,6 @@ - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - @@ -3757,18 +3794,6 @@ - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - @@ -3788,7 +3813,7 @@ true - + @@ -3800,7 +3825,19 @@ true - + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + @@ -3826,7 +3863,7 @@ true - + @@ -3837,11 +3874,37 @@ true - + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + @@ -3854,6 +3917,18 @@ + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + @@ -3868,6 +3943,20 @@ + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + @@ -3889,9 +3978,37 @@ true - - - + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + @@ -3931,9 +4048,135 @@ true - - - + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/TreeLog.mesh + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + @@ -3952,20 +4195,6 @@ - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - - @@ -3980,20 +4209,6 @@ - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - @@ -4007,20 +4222,6 @@ - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - @@ -4036,21 +4237,6 @@ - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - @@ -4066,20 +4252,6 @@ - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - - @@ -4107,36 +4279,8 @@ Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - + + @@ -4173,8 +4317,50 @@ Models/Props/PickUps/PickUpHolder.mesh - - + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + @@ -4194,20 +4380,6 @@ - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - @@ -4224,183 +4396,24 @@ - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + @@ -4479,19 +4492,6 @@ - - - - - Models/Props/SciFiHolder1.mesh - - - - - - - - @@ -4519,13 +4519,53 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + @@ -4547,8 +4587,8 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - + + @@ -4561,75 +4601,8 @@ Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - + + @@ -4656,8 +4629,8 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - + + @@ -4670,8 +4643,63 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + @@ -4691,20 +4719,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - @@ -4718,20 +4732,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - @@ -4750,6 +4750,159 @@ + + + + + + + + + + Schema/Entities/PlayerRed.xml + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + + + 10 + + + + + + + + + + 10 + + + + + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + @@ -4757,18 +4910,37 @@ - + 0.10000000149011612 - Models/Props/PickUps/AmmoPickUp.mesh + Models/Props/PickUps/HealthPickUp.mesh - - + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + @@ -4805,8 +4977,8 @@ Models/Props/PickUps/AmmoPickUp.mesh - - + + @@ -4814,18 +4986,37 @@ - + 0.10000000149011612 - Models/Props/PickUps/HealthPickUp.mesh + Models/Props/PickUps/AmmoPickUp.mesh - - + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + @@ -4850,25 +5041,6 @@ - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - @@ -4888,25 +5060,6 @@ - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - @@ -4946,7 +5099,7 @@ false - + @@ -4959,7 +5112,7 @@ false - + @@ -4979,89 +5132,6 @@ - - - - - - - - - 10 - - - - - - - - - - 10 - - - - - - - - - - - - - 1 - - - - - - - - - 10 - - - - - - - - - - - 10 - - - - - - - - - - - 10 - - - - - - - - - - - 1 - - - - - - - - - @@ -5071,28 +5141,35 @@ - Models/Props/CapturePoint/CapturePointNeutral.mesh + Models/Props/CapturePoint/CapturePointBlue.mesh - + - 2 + + + + 4 - + + + + + Models/Core/UnitCylinder.mesh - + true - - + + @@ -5137,6 +5214,39 @@ + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 1.5498908015879351 + 1 + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + @@ -5176,15 +5286,14 @@ Models/Props/CapturePoint/CapturePointNeutral.mesh - + - 1.5498908015879351 - 1 + 2 @@ -5194,123 +5303,14 @@ true - - + + - - - - - Models/Props/CapturePoint/CapturePointBlue.mesh - - - - - - - - - - - - - 4 - - - - - - - - - Models/Core/UnitCylinder.mesh - - true - - - - - - - - - - - - - - - - - - - - - - Schema/Entities/PlayerRed.xml - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - @@ -5332,6 +5332,136 @@ + + + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 1 + + + + + + + + + + + Spectator + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 2 + + + + + + + + + + + Red + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 3 + + + + + + + + + + + Blue + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + Pick Team + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + @@ -5358,10 +5488,10 @@ Textures/Core/UnitHexagon.png - + - + @@ -5371,7 +5501,7 @@ - 2 + 4 Textures/Core/UnitHexagon_Rotated.png @@ -5426,10 +5556,10 @@ Textures/Core/UnitHexagon.png - + - + @@ -5439,7 +5569,7 @@ - 4 + 2 Textures/Core/UnitHexagon_Rotated.png @@ -5455,6 +5585,38 @@ + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + @@ -5490,38 +5652,6 @@ - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - @@ -5551,28 +5681,10 @@ - + - - - - - Textures/Core/UnitHexagon.png - - - - PickClass - 2 - - - - - - - - @@ -5585,11 +5697,59 @@ 1 - + - + + + + + Assault + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + PickClass + 2 + + + + + + + + + + + Defender + Fonts/DroidSans.ttf,64 + + + + + + + + + + @@ -5603,81 +5763,37 @@ 3 - + - + + + + + Sniper + Fonts/DroidSans.ttf,64 + + + + + + + + + + - - - - - - - - - - - - - - - - - - + - - - Textures/Core/UnitHexagon.png - - - - - PickTeam - 2 - + + Pick Class + Fonts/DroidSans.ttf,64 + + - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - PickTeam - 3 - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - PickTeam - 1 - - - - + + diff --git a/resources/Schema/Entities/OverwatchCamera.xml b/resources/Schema/Entities/OverwatchCamera.xml index a6ef1f74..ee3c1cb1 100644 --- a/resources/Schema/Entities/OverwatchCamera.xml +++ b/resources/Schema/Entities/OverwatchCamera.xml @@ -20,6 +20,136 @@ + + + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 1 + + + + + + + + + + + Spectator + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 2 + + + + + + + + + + + Red + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + PickTeam + 3 + + + + + + + + + + + Blue + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + Pick Team + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + @@ -46,10 +176,10 @@ Textures/Core/UnitHexagon.png - + - + @@ -59,7 +189,7 @@ - 2 + 4 Textures/Core/UnitHexagon_Rotated.png @@ -114,10 +244,10 @@ Textures/Core/UnitHexagon.png - + - + @@ -127,7 +257,7 @@ - 4 + 2 Textures/Core/UnitHexagon_Rotated.png @@ -143,6 +273,38 @@ + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + @@ -178,38 +340,6 @@ - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - @@ -239,28 +369,10 @@ - + - - - - - Textures/Core/UnitHexagon.png - - - - PickClass - 2 - - - - - - - - @@ -273,11 +385,59 @@ 1 - + - + + + + + Assault + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + PickClass + 2 + + + + + + + + + + + Defender + Fonts/DroidSans.ttf,64 + + + + + + + + + + @@ -291,81 +451,37 @@ 3 - + - + + + + + Sniper + Fonts/DroidSans.ttf,64 + + + + + + + + + + - - - - - - - - - - - - - - - - - - + - - - Textures/Core/UnitHexagon.png - - - - - PickTeam - 2 - + + Pick Class + Fonts/DroidSans.ttf,64 + + - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - PickTeam - 3 - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - PickTeam - 1 - - - - + + diff --git a/src/Game/Systems/PlayerSpawnSystem.cpp b/src/Game/Systems/PlayerSpawnSystem.cpp index 56ace14c..10632c0a 100644 --- a/src/Game/Systems/PlayerSpawnSystem.cpp +++ b/src/Game/Systems/PlayerSpawnSystem.cpp @@ -60,6 +60,13 @@ void PlayerSpawnSystem::Update(double dt) int numSpawnedPlayers = 0; for (auto it = m_SpawnRequests.begin(); it != m_SpawnRequests.end(); ++it) { + // TODO: -1 Signifies no class picked, enum here later? + // Increase num spawned players if they didn't pick class yet since it is valid + // but don't spawn anything, goto next spawnrequest. + if (it->Class == -1) { + ++numSpawnedPlayers; + break; + } for (auto& cPlayerSpawn : *playerSpawns) { EntityWrapper spawner(m_World, cPlayerSpawn.EntityID); if (!spawner.HasComponent("Spawner")) { @@ -70,11 +77,9 @@ void PlayerSpawnSystem::Update(double dt) if (spawner.HasComponent("Team")) { auto cSpawnerTeam = spawner["Team"]; if ((int)cSpawnerTeam["Team"] != it->Team) { - // Increase num spawned players if someone picks spectator or didn't - // pick a class yet, since it is valid + // Increase num spawned players if someone picks spectator since it is valid // but don't spawn anything, goto next spawnrequest. - // TODO: -1 Signifies no class picked, enum here later? - if (it->Class == -1 || it->Team == (int)cSpawnerTeam["Team"].Enum("Spectator")) { + if (it->Team == (int)cSpawnerTeam["Team"].Enum("Spectator")) { ++numSpawnedPlayers; break; } @@ -149,8 +154,10 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) // If player is in queue to spawn, then change their team affiliation or class in the request. if (e.Command == "PickTeam") { iter->Team = (ComponentInfo::EnumType)e.Value; + LOG_INFO("old request swap Team"); } else { iter->Class = (ComponentInfo::EnumType)e.Value; + LOG_INFO("old request swap Class"); } } else if (m_PlayerEntities.count(e.PlayerID) == 0 || !m_PlayerEntities[e.PlayerID].Valid()) { // If player is not in queue to spawn, then create a spawn request, @@ -160,9 +167,11 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) if (e.Command == "PickTeam") { req.Team = (ComponentInfo::EnumType)e.Value; req.Class = -1; // TODO: -1 Signifies no class picked, enum here later? + LOG_INFO("new request set Team"); } else { req.Team = 1; // TODO: 1 Signifies spectator, should probably have real enum here later. req.Class = (ComponentInfo::EnumType)e.Value; + LOG_INFO("new request set Class"); } m_SpawnRequests.push_back(req); } else { From 0dfe00b406c92e3696e613f046c0bef58aae92b8 Mon Sep 17 00:00:00 2001 From: William Moberg Date: Fri, 4 Mar 2016 09:49:27 +0100 Subject: [PATCH 06/68] Unlocks mouse when changing to SpectatorCamera and locking when respawning. --- include/Game/Systems/PlayerDeathSystem.h | 1 + src/Game/Systems/PlayerDeathSystem.cpp | 24 ++++++++++++++-------- src/Game/Systems/PlayerSpawnSystem.cpp | 3 +++ src/Game/Systems/SpectatorCameraSystem.cpp | 5 +++++ 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/include/Game/Systems/PlayerDeathSystem.h b/include/Game/Systems/PlayerDeathSystem.h index e4f96114..5a82f999 100644 --- a/include/Game/Systems/PlayerDeathSystem.h +++ b/include/Game/Systems/PlayerDeathSystem.h @@ -25,6 +25,7 @@ private: EventRelay m_EEntityDeleted; bool OnEntityDeleted(Events::EntityDeleted& e); + void setSpectatorCamera(); void createDeathEffect(EntityWrapper player); }; diff --git a/src/Game/Systems/PlayerDeathSystem.cpp b/src/Game/Systems/PlayerDeathSystem.cpp index cbf0927f..bb9a807c 100644 --- a/src/Game/Systems/PlayerDeathSystem.cpp +++ b/src/Game/Systems/PlayerDeathSystem.cpp @@ -1,4 +1,5 @@ #include "Systems/PlayerDeathSystem.h" +#include "Core/ELockMouse.h" PlayerDeathSystem::PlayerDeathSystem(SystemParams params) : System(params) @@ -33,10 +34,10 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player) //components that we need from player auto playerModel = player.FirstChildByName("PlayerModel"); - if (!playerModel.Valid()) { - return; - } - if (!playerModel.HasComponent("Model") || !playerModel.HasComponent("Animation")) { + if (!playerModel.Valid() || !playerModel.HasComponent("Model") || !playerModel.HasComponent("Animation")) { + if (player == LocalPlayer) { + setSpectatorCamera(); + } return; } auto playerEntityModel = playerModel["Model"]; @@ -46,9 +47,7 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player) playerEntityModel.Copy(deathEffectEW["Model"]); playerEntityAnimation.Copy(deathEffectEW["Animation"]); //freeze the animation - deathEffectEW["Animation"]["Speed1"] = 0.0; - deathEffectEW["Animation"]["Speed2"] = 0.0; - deathEffectEW["Animation"]["Speed3"] = 0.0; + deathEffectEW["Animation"]["Speed"] = 0.0; //copy the models position,orientation deathEffectEW["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"]; @@ -73,13 +72,20 @@ bool PlayerDeathSystem::OnEntityDeleted(Events::EntityDeleted& e) return false; } + setSpectatorCamera(); + return true; +} + +void PlayerDeathSystem::setSpectatorCamera() +{ // Look for the spectator camera entity in the level. EntityWrapper spectatorCam = m_World->GetFirstEntityByName("SpectatorCamera"); if (!spectatorCam.Valid() || !spectatorCam.HasComponent("Camera") || LocalPlayer.Valid()) { - return false; + return; } Events::SetCamera eSetCamera; eSetCamera.CameraEntity = spectatorCam; m_EventBroker->Publish(eSetCamera); - return true; + Events::UnlockMouse unlock; + m_EventBroker->Publish(unlock); } diff --git a/src/Game/Systems/PlayerSpawnSystem.cpp b/src/Game/Systems/PlayerSpawnSystem.cpp index 10632c0a..7692b0a7 100644 --- a/src/Game/Systems/PlayerSpawnSystem.cpp +++ b/src/Game/Systems/PlayerSpawnSystem.cpp @@ -1,4 +1,5 @@ #include "Systems/PlayerSpawnSystem.h" +#include "Core/ELockMouse.h" PlayerSpawnSystem::PlayerSpawnSystem(SystemParams params) : System(params) @@ -100,6 +101,8 @@ void PlayerSpawnSystem::Update(double dt) e.Player = player; e.Spawner = spawner; m_EventBroker->Publish(e); + Events::LockMouse lock; + m_EventBroker->Publish(lock); ++numSpawnedPlayers; it = m_SpawnRequests.erase(it); break; diff --git a/src/Game/Systems/SpectatorCameraSystem.cpp b/src/Game/Systems/SpectatorCameraSystem.cpp index bf78cfb0..58f25155 100644 --- a/src/Game/Systems/SpectatorCameraSystem.cpp +++ b/src/Game/Systems/SpectatorCameraSystem.cpp @@ -1,5 +1,6 @@ #include "Systems/SpectatorCameraSystem.h" #include "Rendering/ESetCamera.h" +#include "Core/ELockMouse.h" SpectatorCameraSystem::SpectatorCameraSystem(SystemParams params) : System(params) @@ -19,6 +20,8 @@ void SpectatorCameraSystem::Update(double dt) Events::SetCamera eSetCamera; eSetCamera.CameraEntity = spectatorCam; m_EventBroker->Publish(eSetCamera); + Events::UnlockMouse unlock; + m_EventBroker->Publish(unlock); } } } @@ -60,6 +63,8 @@ bool SpectatorCameraSystem::OnInputCommand(const Events::InputCommand& e) Events::SetCamera eSetCamera; eSetCamera.CameraEntity = spectatorCam; m_EventBroker->Publish(eSetCamera); + Events::UnlockMouse unlock; + m_EventBroker->Publish(unlock); } return true; From 282e0bf7c47d3d0b1b4e219f26079ee1769d9420 Mon Sep 17 00:00:00 2001 From: William Moberg Date: Mon, 7 Mar 2016 15:05:37 +0100 Subject: [PATCH 07/68] Only set spectator camera if player haven't spawned already. Don't spawn player if they switch to class pick screen. --- src/Game/Systems/PlayerDeathSystem.cpp | 16 ++++++-- src/Game/Systems/PlayerSpawnSystem.cpp | 53 +++++++++++++++----------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/Game/Systems/PlayerDeathSystem.cpp b/src/Game/Systems/PlayerDeathSystem.cpp index bb9a807c..95709e88 100644 --- a/src/Game/Systems/PlayerDeathSystem.cpp +++ b/src/Game/Systems/PlayerDeathSystem.cpp @@ -18,6 +18,8 @@ bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e) return false; } + LOG_DEBUG("------ Player #%i died.", e.Player.ID); + createDeathEffect(e.Player); // Delete player @@ -36,6 +38,7 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player) auto playerModel = player.FirstChildByName("PlayerModel"); if (!playerModel.Valid() || !playerModel.HasComponent("Model") || !playerModel.HasComponent("Animation")) { if (player == LocalPlayer) { + LOG_DEBUG("------ LocalPlayer's death effect could not be spawned, setting to spectator instead of death cam."); setSpectatorCamera(); } return; @@ -57,6 +60,7 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player) //camera (with lifetime) behind the player if (player == LocalPlayer) { + LOG_DEBUG("------ LocalPlayer's death effect spawning, setting to death camera."); m_LocalPlayerDeathEffect = deathEffectEW; auto cam = deathEffectEW.FirstChildByName("Camera"); Events::SetCamera eSetCamera; @@ -71,8 +75,14 @@ bool PlayerDeathSystem::OnEntityDeleted(Events::EntityDeleted& e) if (m_LocalPlayerDeathEffect.ID != e.DeletedEntity) { return false; } - - setSpectatorCamera(); + + // If the player hasn't spawned already, activate the spectator camera. + if (!LocalPlayer.Valid()) { + LOG_DEBUG("------ LocalPlayer's death effect removed, setting to spectator."); + setSpectatorCamera(); + } else { + LOG_DEBUG("------ LocalPlayer's death effect removed, player is already spawned, not setting spectator."); + } return true; } @@ -80,7 +90,7 @@ void PlayerDeathSystem::setSpectatorCamera() { // Look for the spectator camera entity in the level. EntityWrapper spectatorCam = m_World->GetFirstEntityByName("SpectatorCamera"); - if (!spectatorCam.Valid() || !spectatorCam.HasComponent("Camera") || LocalPlayer.Valid()) { + if (!spectatorCam.Valid() || !spectatorCam.HasComponent("Camera")) { return; } Events::SetCamera eSetCamera; diff --git a/src/Game/Systems/PlayerSpawnSystem.cpp b/src/Game/Systems/PlayerSpawnSystem.cpp index 7692b0a7..2e55965e 100644 --- a/src/Game/Systems/PlayerSpawnSystem.cpp +++ b/src/Game/Systems/PlayerSpawnSystem.cpp @@ -59,13 +59,15 @@ void PlayerSpawnSystem::Update(double dt) return; } - int numSpawnedPlayers = 0; + int numHandledRequests = 0; + int playersStillPickingClass = 0; + const int numRequestsToHandle = (int)m_SpawnRequests.size(); for (auto it = m_SpawnRequests.begin(); it != m_SpawnRequests.end(); ++it) { // TODO: -1 Signifies no class picked, enum here later? - // Increase num spawned players if they didn't pick class yet since it is valid + // It is valid if they didn't pick class yet // but don't spawn anything, goto next spawnrequest. if (it->Class == -1) { - ++numSpawnedPlayers; + ++playersStillPickingClass; break; } for (auto& cPlayerSpawn : *playerSpawns) { @@ -78,10 +80,11 @@ void PlayerSpawnSystem::Update(double dt) if (spawner.HasComponent("Team")) { auto cSpawnerTeam = spawner["Team"]; if ((int)cSpawnerTeam["Team"] != it->Team) { - // Increase num spawned players if someone picks spectator since it is valid + // It is valid if someone picks spectator // but don't spawn anything, goto next spawnrequest. if (it->Team == (int)cSpawnerTeam["Team"].Enum("Spectator")) { - ++numSpawnedPlayers; + ++numHandledRequests; + it = m_SpawnRequests.erase(it); break; } continue; @@ -103,7 +106,7 @@ void PlayerSpawnSystem::Update(double dt) m_EventBroker->Publish(e); Events::LockMouse lock; m_EventBroker->Publish(lock); - ++numSpawnedPlayers; + ++numHandledRequests; it = m_SpawnRequests.erase(it); break; } @@ -111,17 +114,18 @@ void PlayerSpawnSystem::Update(double dt) break; } } - if (numSpawnedPlayers != (int)m_SpawnRequests.size()) { - LOG_DEBUG("%i players were supposed to be spawned or set as spectator, but only %i was handled.", (int)m_SpawnRequests.size(), numSpawnedPlayers); + if (numHandledRequests != numRequestsToHandle - playersStillPickingClass) { + LOG_DEBUG("%i players were supposed to be spawned or set as spectator, but only %i was handled.", numRequestsToHandle, numHandledRequests); } else { - LOG_DEBUG("%i players were spawned or set as spectator.", numSpawnedPlayers); + std::string dbg = numHandledRequests != 0 ? std::to_string(numHandledRequests) + " players were spawned or set as spectator. " : ""; + dbg += playersStillPickingClass != 0 ? std::to_string(playersStillPickingClass) + " players are still picking class and will be spawned later." : ""; + LOG_DEBUG(dbg.c_str()); } } bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) { - bool removeRequest = e.Command == "SwapToClassPick" || e.Command == "SwapToTeamPick"; - if (e.Command != "PickTeam" && e.Command != "PickClass" && !removeRequest) { + if (e.Command != "PickTeam" && e.Command != "PickClass" && e.Command != "SwapToTeamPick" && e.Command != "SwapToClassPick") { return false; } @@ -139,28 +143,29 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) auto iter = m_SpawnRequests.begin(); for (; iter != m_SpawnRequests.end(); ++iter) { if (iter->PlayerID == e.PlayerID) { - // If player wants to switch class, remove their spawn request. - if (removeRequest) { + // If player wants to switch team, remove their spawn request. + if (e.Command == "SwapToTeamPick") { m_SpawnRequests.erase(iter); + } else if (e.Command == "SwapToClassPick") { + // If player wants to switch class, remove their selected class so they don't spawn. + iter->Class = -1; + } else { + break; } - break; + return true; } } - // Return if we were only supposed to remove a request, not add one. - if (removeRequest) { - return true; - } - //If we get here, add or alter a spawn request. + //If we get here we got a PickTeam or PickClass, so add or alter a spawn request. if (iter != m_SpawnRequests.end()) { // If player is in queue to spawn, then change their team affiliation or class in the request. if (e.Command == "PickTeam") { iter->Team = (ComponentInfo::EnumType)e.Value; - LOG_INFO("old request swap Team"); + LOG_DEBUG("old spawn request setting Team"); } else { iter->Class = (ComponentInfo::EnumType)e.Value; - LOG_INFO("old request swap Class"); + LOG_DEBUG("old spawn request setting Class"); } } else if (m_PlayerEntities.count(e.PlayerID) == 0 || !m_PlayerEntities[e.PlayerID].Valid()) { // If player is not in queue to spawn, then create a spawn request, @@ -170,11 +175,13 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) if (e.Command == "PickTeam") { req.Team = (ComponentInfo::EnumType)e.Value; req.Class = -1; // TODO: -1 Signifies no class picked, enum here later? - LOG_INFO("new request set Team"); + LOG_DEBUG("new spawn request setting Team"); } else { + // Should never get here, since you should have picked a team before you ever get a chance to pick class. + LOG_WARNING("Sequence error: Should not be able to pick class before team"); req.Team = 1; // TODO: 1 Signifies spectator, should probably have real enum here later. req.Class = (ComponentInfo::EnumType)e.Value; - LOG_INFO("new request set Class"); + LOG_DEBUG("new spawn request setting Class"); } m_SpawnRequests.push_back(req); } else { From f585f9ada962f7be7aec5adaca339417a9c0d4e2 Mon Sep 17 00:00:00 2001 From: stiffly Date: Mon, 7 Mar 2016 16:11:19 +0100 Subject: [PATCH 08/68] Created the NetworkComponent xml file --- resources/Schema/Components.xsd | 1 + resources/Schema/Components/NetworkComponent.xml | 3 +++ resources/Schema/Components/NetworkComponent.xsd | 10 ++++++++++ resources/Schema/Types/Entity.xsd | 1 + 4 files changed, 15 insertions(+) create mode 100644 resources/Schema/Components/NetworkComponent.xml create mode 100644 resources/Schema/Components/NetworkComponent.xsd diff --git a/resources/Schema/Components.xsd b/resources/Schema/Components.xsd index cf282eec..a5bedada 100644 --- a/resources/Schema/Components.xsd +++ b/resources/Schema/Components.xsd @@ -65,4 +65,5 @@ + \ No newline at end of file diff --git a/resources/Schema/Components/NetworkComponent.xml b/resources/Schema/Components/NetworkComponent.xml new file mode 100644 index 00000000..7d5dda6f --- /dev/null +++ b/resources/Schema/Components/NetworkComponent.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/Schema/Components/NetworkComponent.xsd b/resources/Schema/Components/NetworkComponent.xsd new file mode 100644 index 00000000..19cfeb92 --- /dev/null +++ b/resources/Schema/Components/NetworkComponent.xsd @@ -0,0 +1,10 @@ + + + + + + + If an entity has this component, it will be broadcasted to clients in a snapshot. + + + \ No newline at end of file diff --git a/resources/Schema/Types/Entity.xsd b/resources/Schema/Types/Entity.xsd index 4865b936..3d73f970 100644 --- a/resources/Schema/Types/Entity.xsd +++ b/resources/Schema/Types/Entity.xsd @@ -68,6 +68,7 @@ + From 7de95d4cb5ea4d5d92488151688b05295f5a455d Mon Sep 17 00:00:00 2001 From: Tleety Date: Mon, 7 Mar 2016 16:34:56 +0100 Subject: [PATCH 09/68] Mainmenu entity --- resources/Schema/Entities/MainMenu.xml | 168 +++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 resources/Schema/Entities/MainMenu.xml diff --git a/resources/Schema/Entities/MainMenu.xml b/resources/Schema/Entities/MainMenu.xml new file mode 100644 index 00000000..a88c1407 --- /dev/null +++ b/resources/Schema/Entities/MainMenu.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + + + + + + + + + + + + Play + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + + + + + + + + + + + + Option + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + + + + + + + + + + + + Credits + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + + + + + + + + + + + + Quit + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + From 13c3bcb2908fc48b0a976dcbe3994bec0a4957b5 Mon Sep 17 00:00:00 2001 From: stiffly Date: Mon, 7 Mar 2016 16:52:51 +0100 Subject: [PATCH 10/68] Now only entities with NetworkComponent will be send in Snapshots. --- src/Engine/Network/Server.cpp | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/Engine/Network/Server.cpp b/src/Engine/Network/Server.cpp index 5bfb4000..113db808 100644 --- a/src/Engine/Network/Server.cpp +++ b/src/Engine/Network/Server.cpp @@ -641,21 +641,7 @@ void Server::parsePlayerTransform(Packet& packet) bool Server::shouldSendToClient(EntityWrapper childEntity) { - auto children = m_World->GetDirectChildren(childEntity.ID); - for (auto it = children.first; it != children.second; it++) { - EntityWrapper child(m_World, it->second); - if (child.HasComponent("CapturePoint") || child.HasComponent("HealthPickup") - || child.HasComponent("AmmoPickup")) { - return true; - } - } - return childEntity.HasComponent("Player") - || childEntity.FirstParentWithComponent("Player").Valid() - || childEntity.HasComponent("CapturePoint") - || childEntity.HasComponent("HealthPickup") - || childEntity.HasComponent("AmmoPickup") - || childEntity.HasComponent("ScoreScreen") - || childEntity.FirstParentWithComponent("ScoreScreen").Valid(); + return childEntity.HasComponent("NetworkComponent") ||childEntity.FirstParentWithComponent("Player").Valid(); } PlayerID Server::getPlayerIDFromEndpoint() From f00fb836fba43d0386fcc6665bf29e9e4587647c Mon Sep 17 00:00:00 2001 From: stiffly Date: Mon, 7 Mar 2016 17:10:13 +0100 Subject: [PATCH 11/68] Oops. --- src/Engine/Network/Server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Engine/Network/Server.cpp b/src/Engine/Network/Server.cpp index 113db808..46dce167 100644 --- a/src/Engine/Network/Server.cpp +++ b/src/Engine/Network/Server.cpp @@ -641,7 +641,7 @@ void Server::parsePlayerTransform(Packet& packet) bool Server::shouldSendToClient(EntityWrapper childEntity) { - return childEntity.HasComponent("NetworkComponent") ||childEntity.FirstParentWithComponent("Player").Valid(); + return childEntity.HasComponent("NetworkComponent") || childEntity.FirstParentWithComponent("NetworkComponent").Valid(); } PlayerID Server::getPlayerIDFromEndpoint() From b629ed5e2badc8617ccdae6536c27827629dde65 Mon Sep 17 00:00:00 2001 From: stiffly Date: Mon, 7 Mar 2016 17:11:10 +0100 Subject: [PATCH 12/68] Updated some known xml entities that should be send in snapshots. --- resources/Schema/Entities/AmmoPickup.xml | 1 + resources/Schema/Entities/HealthPickup.xml | 1 + resources/Schema/Entities/Player.xml | 1 + resources/Schema/Entities/PlayerAssaultBlue.xml | 1 + resources/Schema/Entities/PlayerAssaultFallbackBlue.xml | 1 + resources/Schema/Entities/PlayerAssaultFallbackRed.xml | 1 + resources/Schema/Entities/PlayerAssaultRed.xml | 1 + resources/Schema/Entities/PlayerDefenderBlue.xml | 1 + resources/Schema/Entities/PlayerRed.xml | 1 + resources/Schema/Entities/ScoreBoard.xml | 1 + 10 files changed, 10 insertions(+) diff --git a/resources/Schema/Entities/AmmoPickup.xml b/resources/Schema/Entities/AmmoPickup.xml index bebde467..ee3704f1 100644 --- a/resources/Schema/Entities/AmmoPickup.xml +++ b/resources/Schema/Entities/AmmoPickup.xml @@ -2,6 +2,7 @@ + Models/Props/PickUps/AmmoPickUp.mesh diff --git a/resources/Schema/Entities/HealthPickup.xml b/resources/Schema/Entities/HealthPickup.xml index b4b83392..6474426f 100644 --- a/resources/Schema/Entities/HealthPickup.xml +++ b/resources/Schema/Entities/HealthPickup.xml @@ -2,6 +2,7 @@ + Models/Props/PickUps/HealthPickUp.mesh diff --git a/resources/Schema/Entities/Player.xml b/resources/Schema/Entities/Player.xml index 475acf78..474d9dbc 100644 --- a/resources/Schema/Entities/Player.xml +++ b/resources/Schema/Entities/Player.xml @@ -2,6 +2,7 @@ + diff --git a/resources/Schema/Entities/PlayerAssaultBlue.xml b/resources/Schema/Entities/PlayerAssaultBlue.xml index 7773235b..8b5b3d11 100644 --- a/resources/Schema/Entities/PlayerAssaultBlue.xml +++ b/resources/Schema/Entities/PlayerAssaultBlue.xml @@ -2,6 +2,7 @@ + diff --git a/resources/Schema/Entities/PlayerAssaultFallbackBlue.xml b/resources/Schema/Entities/PlayerAssaultFallbackBlue.xml index 9650cfe8..c5360b10 100644 --- a/resources/Schema/Entities/PlayerAssaultFallbackBlue.xml +++ b/resources/Schema/Entities/PlayerAssaultFallbackBlue.xml @@ -2,6 +2,7 @@ + diff --git a/resources/Schema/Entities/PlayerAssaultFallbackRed.xml b/resources/Schema/Entities/PlayerAssaultFallbackRed.xml index a32988c7..a7bcdef4 100644 --- a/resources/Schema/Entities/PlayerAssaultFallbackRed.xml +++ b/resources/Schema/Entities/PlayerAssaultFallbackRed.xml @@ -2,6 +2,7 @@ + diff --git a/resources/Schema/Entities/PlayerAssaultRed.xml b/resources/Schema/Entities/PlayerAssaultRed.xml index a198196e..db6e1cad 100644 --- a/resources/Schema/Entities/PlayerAssaultRed.xml +++ b/resources/Schema/Entities/PlayerAssaultRed.xml @@ -2,6 +2,7 @@ + diff --git a/resources/Schema/Entities/PlayerDefenderBlue.xml b/resources/Schema/Entities/PlayerDefenderBlue.xml index c3bfc074..24bfee2b 100644 --- a/resources/Schema/Entities/PlayerDefenderBlue.xml +++ b/resources/Schema/Entities/PlayerDefenderBlue.xml @@ -2,6 +2,7 @@ + diff --git a/resources/Schema/Entities/PlayerRed.xml b/resources/Schema/Entities/PlayerRed.xml index c46b9d79..9fa7be05 100644 --- a/resources/Schema/Entities/PlayerRed.xml +++ b/resources/Schema/Entities/PlayerRed.xml @@ -2,6 +2,7 @@ + diff --git a/resources/Schema/Entities/ScoreBoard.xml b/resources/Schema/Entities/ScoreBoard.xml index ce612800..b3798e72 100644 --- a/resources/Schema/Entities/ScoreBoard.xml +++ b/resources/Schema/Entities/ScoreBoard.xml @@ -2,6 +2,7 @@ + From 1516ed8e2df963a335bbb18a008c1e884a2e045a Mon Sep 17 00:00:00 2001 From: William Moberg Date: Mon, 7 Mar 2016 17:35:01 +0100 Subject: [PATCH 13/68] Removed debug logging. PlayerID in InputCommands from buttons is corrected. --- src/Engine/GUI/ButtonSystem.cpp | 4 +-- src/Game/Systems/PlayerDeathSystem.cpp | 7 ------ src/Game/Systems/PlayerSpawnSystem.cpp | 35 +++++++++----------------- 3 files changed, 14 insertions(+), 32 deletions(-) diff --git a/src/Engine/GUI/ButtonSystem.cpp b/src/Engine/GUI/ButtonSystem.cpp index b28c0119..44c8a13c 100644 --- a/src/Engine/GUI/ButtonSystem.cpp +++ b/src/Engine/GUI/ButtonSystem.cpp @@ -40,7 +40,7 @@ bool ButtonSystem::OnMousePress(const Events::MousePress& e) //You have clicked on a button entity, send pressed event. if (m_World->HasComponent(m_PickData.Entity, "InputCmdButton")) { Events::InputCommand eInputCmd; - eInputCmd.PlayerID = LocalPlayer.ID; + eInputCmd.PlayerID = -1; eInputCmd.Player = LocalPlayer; EntityWrapper button = EntityWrapper(m_World, m_PickData.Entity); eInputCmd.Command = (std::string)button["InputCmdButton"]["Command"]; @@ -68,7 +68,7 @@ bool ButtonSystem::OnMouseRelease(const Events::MouseRelease& e) if (m_World->HasComponent(m_PickData.Entity, "InputCmdButton")) { Events::InputCommand eInputCmd; - eInputCmd.PlayerID = LocalPlayer.ID; + eInputCmd.PlayerID = -1; eInputCmd.Player = LocalPlayer; EntityWrapper button = EntityWrapper(m_World, m_PickData.Entity); eInputCmd.Command = (std::string)button["InputCmdButton"]["Command"]; diff --git a/src/Game/Systems/PlayerDeathSystem.cpp b/src/Game/Systems/PlayerDeathSystem.cpp index 85daec9b..c562e530 100644 --- a/src/Game/Systems/PlayerDeathSystem.cpp +++ b/src/Game/Systems/PlayerDeathSystem.cpp @@ -18,8 +18,6 @@ bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e) return false; } - LOG_DEBUG("------ Player #%i died.", e.Player.ID); - createDeathEffect(e.Player); // Delete player @@ -38,7 +36,6 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player) auto playerModel = player.FirstChildByName("PlayerModel"); if (!playerModel.Valid() || !playerModel.HasComponent("Model") || !playerModel.HasComponent("Animation")) { if (player == LocalPlayer) { - LOG_DEBUG("------ LocalPlayer's death effect could not be spawned, setting to spectator instead of death cam."); setSpectatorCamera(); } return; @@ -58,7 +55,6 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player) //camera (with lifetime) behind the player if (player == LocalPlayer) { - LOG_DEBUG("------ LocalPlayer's death effect spawning, setting to death camera."); m_LocalPlayerDeathEffect = deathEffectEW; auto cam = deathEffectEW.FirstChildByName("Camera"); Events::SetCamera eSetCamera; @@ -76,10 +72,7 @@ bool PlayerDeathSystem::OnEntityDeleted(Events::EntityDeleted& e) // If the player hasn't spawned already, activate the spectator camera. if (!LocalPlayer.Valid()) { - LOG_DEBUG("------ LocalPlayer's death effect removed, setting to spectator."); setSpectatorCamera(); - } else { - LOG_DEBUG("------ LocalPlayer's death effect removed, player is already spawned, not setting spectator."); } return true; } diff --git a/src/Game/Systems/PlayerSpawnSystem.cpp b/src/Game/Systems/PlayerSpawnSystem.cpp index 2e55965e..e13f1bdc 100644 --- a/src/Game/Systems/PlayerSpawnSystem.cpp +++ b/src/Game/Systems/PlayerSpawnSystem.cpp @@ -59,16 +59,16 @@ void PlayerSpawnSystem::Update(double dt) return; } - int numHandledRequests = 0; - int playersStillPickingClass = 0; + int numSpawnedPlayers = 0; + int playersSpectating = 0; const int numRequestsToHandle = (int)m_SpawnRequests.size(); for (auto it = m_SpawnRequests.begin(); it != m_SpawnRequests.end(); ++it) { - // TODO: -1 Signifies no class picked, enum here later? + // TODO: -1 Signifies no class picked, or they are a spectator, enum here later? // It is valid if they didn't pick class yet // but don't spawn anything, goto next spawnrequest. if (it->Class == -1) { - ++playersStillPickingClass; - break; + ++playersSpectating; + continue; } for (auto& cPlayerSpawn : *playerSpawns) { EntityWrapper spawner(m_World, cPlayerSpawn.EntityID); @@ -80,13 +80,6 @@ void PlayerSpawnSystem::Update(double dt) if (spawner.HasComponent("Team")) { auto cSpawnerTeam = spawner["Team"]; if ((int)cSpawnerTeam["Team"] != it->Team) { - // It is valid if someone picks spectator - // but don't spawn anything, goto next spawnrequest. - if (it->Team == (int)cSpawnerTeam["Team"].Enum("Spectator")) { - ++numHandledRequests; - it = m_SpawnRequests.erase(it); - break; - } continue; } } @@ -104,9 +97,7 @@ void PlayerSpawnSystem::Update(double dt) e.Player = player; e.Spawner = spawner; m_EventBroker->Publish(e); - Events::LockMouse lock; - m_EventBroker->Publish(lock); - ++numHandledRequests; + ++numSpawnedPlayers; it = m_SpawnRequests.erase(it); break; } @@ -114,11 +105,11 @@ void PlayerSpawnSystem::Update(double dt) break; } } - if (numHandledRequests != numRequestsToHandle - playersStillPickingClass) { - LOG_DEBUG("%i players were supposed to be spawned or set as spectator, but only %i was handled.", numRequestsToHandle, numHandledRequests); + if (numSpawnedPlayers != numRequestsToHandle - playersSpectating) { + LOG_DEBUG("%i players were supposed to be spawned, but only %i was successfully.", numRequestsToHandle - playersSpectating, numSpawnedPlayers); } else { - std::string dbg = numHandledRequests != 0 ? std::to_string(numHandledRequests) + " players were spawned or set as spectator. " : ""; - dbg += playersStillPickingClass != 0 ? std::to_string(playersStillPickingClass) + " players are still picking class and will be spawned later." : ""; + std::string dbg = numSpawnedPlayers != 0 ? std::to_string(numSpawnedPlayers) + " players were spawned. " : ""; + dbg += playersSpectating != 0 ? std::to_string(playersSpectating) + " players are spectating/picking class. " : ""; LOG_DEBUG(dbg.c_str()); } } @@ -162,10 +153,8 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) // If player is in queue to spawn, then change their team affiliation or class in the request. if (e.Command == "PickTeam") { iter->Team = (ComponentInfo::EnumType)e.Value; - LOG_DEBUG("old spawn request setting Team"); } else { iter->Class = (ComponentInfo::EnumType)e.Value; - LOG_DEBUG("old spawn request setting Class"); } } else if (m_PlayerEntities.count(e.PlayerID) == 0 || !m_PlayerEntities[e.PlayerID].Valid()) { // If player is not in queue to spawn, then create a spawn request, @@ -175,13 +164,11 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) if (e.Command == "PickTeam") { req.Team = (ComponentInfo::EnumType)e.Value; req.Class = -1; // TODO: -1 Signifies no class picked, enum here later? - LOG_DEBUG("new spawn request setting Team"); } else { // Should never get here, since you should have picked a team before you ever get a chance to pick class. LOG_WARNING("Sequence error: Should not be able to pick class before team"); req.Team = 1; // TODO: 1 Signifies spectator, should probably have real enum here later. req.Class = (ComponentInfo::EnumType)e.Value; - LOG_DEBUG("new spawn request setting Class"); } m_SpawnRequests.push_back(req); } else { @@ -217,6 +204,8 @@ bool PlayerSpawnSystem::OnPlayerSpawned(Events::PlayerSpawned& e) Events::SetCamera e; e.CameraEntity = cameraEntity; m_EventBroker->Publish(e); + Events::LockMouse lock; + m_EventBroker->Publish(lock); } // HACK: Set the player model color to team color From fcf87104c35244a85d0dcdbbf0c6a229edb25b13 Mon Sep 17 00:00:00 2001 From: William Moberg Date: Mon, 7 Mar 2016 17:50:03 +0100 Subject: [PATCH 14/68] Replaced test textures for class picking with more proper icons. --- .../Schema/Entities/NewMapWSpectatorCam.xml | 3330 ++++++++--------- resources/Schema/Entities/OverwatchCamera.xml | 260 +- 2 files changed, 1795 insertions(+), 1795 deletions(-) diff --git a/resources/Schema/Entities/NewMapWSpectatorCam.xml b/resources/Schema/Entities/NewMapWSpectatorCam.xml index fc4dd9a1..456bee0e 100644 --- a/resources/Schema/Entities/NewMapWSpectatorCam.xml +++ b/resources/Schema/Entities/NewMapWSpectatorCam.xml @@ -23,6 +23,16 @@ + + + + + Models/Props/Highground2.mesh + + + + + @@ -77,16 +87,6 @@ - - - - - Models/Props/Highground2.mesh - - - - - @@ -2843,6 +2843,439 @@ + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + + + + Models/Core/UnitPlane.mesh + + true + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + Models/Core/UnitPlane.mesh + + true + + + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + @@ -3015,11 +3448,618 @@ + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/TreeLog.mesh + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + @@ -3314,19 +4354,6 @@ - - - - - Models/Props/Bridges/SciFiBridge1Blue.mesh - - - - - - - - @@ -3340,20 +4367,6 @@ - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - @@ -3367,19 +4380,6 @@ - - - - - Models/Props/Bridges/SciFiBridge1Red.mesh - - - - - - - - @@ -3396,1011 +4396,24 @@ - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - - - Models/Core/UnitPlane.mesh - - true - - - - - - - - - - - - - - Models/Props/Walls/MediumWall3.mesh - - - - - - - - - - - Models/Props/Walls/MediumWall3.mesh - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - - - - - - Models/Props/Walls/MediumWall2.mesh - - - - - - - - - - - Models/Props/Walls/MediumWall2.mesh - - - - - - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - - - Models/Core/UnitPlane.mesh - - true - - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/TreeLog.mesh - - - - - - - - - - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + @@ -4479,19 +4492,6 @@ - - - - - Models/Props/SciFiHolder1.mesh - - - - - - - - @@ -4519,8 +4519,49 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + @@ -4546,9 +4587,9 @@ Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - + + + @@ -4560,8 +4601,50 @@ Models/Props/Stones/ShinyStoneCrystalRed.mesh - - + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + @@ -4580,20 +4663,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - @@ -4608,20 +4677,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - @@ -4636,20 +4691,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - @@ -4663,20 +4704,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - @@ -4691,20 +4718,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - @@ -4719,19 +4732,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - @@ -4750,388 +4750,6 @@ - - - - - - - - - - Schema/Entities/PlayerRed.xml - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - - - - - - - 10 - - - - - - - - - - - 1 - - - - - - - - - 1 - - - - - - - - - - - 10 - - - - - - - - - - 10 - - - - - - - - - - - - - 10 - - - - - - - - - - - 10 - - - - - - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - - - - - - - Schema/Entities/Player.xml - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - @@ -5313,6 +4931,388 @@ + + + + + + + + + + Schema/Entities/PlayerRed.xml + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + + + 1 + + + + + + + + + 10 + + + + + + + + + + 10 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + + + + + Schema/Entities/Player.xml + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + @@ -5332,6 +5332,136 @@ + + + + + + + + + + + + + + + + + Pick Class + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + Textures/Icons/Classes/Assault-01.png + + + + PickClass + 1 + + + + + + + + + + + Assault + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + Textures/Icons/Classes/Sniper-01.png + + + + PickClass + 3 + + + + + + + + + + + Sniper + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + Textures/Icons/Classes/Defender-01.png + + + + PickClass + 2 + + + + + + + + + + + Defender + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + @@ -5672,136 +5802,6 @@ - - - - - - - - - - - - - - - - - - Textures/Core/UnitRaptor.png - - - - PickClass - 1 - - - - - - - - - - - Assault - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - PickClass - 2 - - - - - - - - - - - Defender - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - Textures/Test/aM4ME4GR.png - - - - PickClass - 3 - - - - - - - - - - - Sniper - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - Pick Class - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - diff --git a/resources/Schema/Entities/OverwatchCamera.xml b/resources/Schema/Entities/OverwatchCamera.xml index ee3c1cb1..55e9099c 100644 --- a/resources/Schema/Entities/OverwatchCamera.xml +++ b/resources/Schema/Entities/OverwatchCamera.xml @@ -20,6 +20,136 @@ + + + + + + + + + + + + + + + + + Pick Class + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + Textures/Icons/Classes/Assault-01.png + + + + PickClass + 1 + + + + + + + + + + + Assault + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + Textures/Icons/Classes/Sniper-01.png + + + + PickClass + 3 + + + + + + + + + + + Sniper + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + Textures/Icons/Classes/Defender-01.png + + + + PickClass + 2 + + + + + + + + + + + Defender + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + @@ -360,136 +490,6 @@ - - - - - - - - - - - - - - - - - - Textures/Core/UnitRaptor.png - - - - PickClass - 1 - - - - - - - - - - - Assault - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - PickClass - 2 - - - - - - - - - - - Defender - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - Textures/Test/aM4ME4GR.png - - - - PickClass - 3 - - - - - - - - - - - Sniper - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - Pick Class - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - From fd994ca93d1a1eea24b34adea94a4562512d0d2e Mon Sep 17 00:00:00 2001 From: Teejoon Date: Mon, 7 Mar 2016 17:52:47 +0100 Subject: [PATCH 15/68] Deleting texture thats getting rended too. --- assets | 2 +- include/Engine/Rendering/DrawBloomPass.h | 2 +- include/Engine/Rendering/DrawFinalPass.h | 2 +- include/Engine/Rendering/Renderer.h | 1 + include/Engine/Rendering/SSAOPass.h | 2 +- src/Engine/Rendering/DrawBloomPass.cpp | 5 +++++ src/Engine/Rendering/DrawFinalPass.cpp | 8 ++++++++ src/Engine/Rendering/PickingPass.cpp | 3 ++- src/Engine/Rendering/Renderer.cpp | 13 +++++++++++++ src/Engine/Rendering/SSAOPass.cpp | 7 +++++++ 10 files changed, 40 insertions(+), 5 deletions(-) diff --git a/assets b/assets index 52ea74c5..3a7f7829 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 52ea74c5d5996ebcd7b064e0a8be469c9f07926e +Subproject commit 3a7f7829586100fc56cc1ae4d61d6ff2d3ce1770 diff --git a/include/Engine/Rendering/DrawBloomPass.h b/include/Engine/Rendering/DrawBloomPass.h index ee3a8489..e6a87c11 100644 --- a/include/Engine/Rendering/DrawBloomPass.h +++ b/include/Engine/Rendering/DrawBloomPass.h @@ -13,7 +13,7 @@ class DrawBloomPass { public: DrawBloomPass(IRenderer* renderer, ConfigFile* config); - ~DrawBloomPass() { } + ~DrawBloomPass(); void InitializeTextures(); void InitializeFrameBuffers(); void InitializeShaderPrograms(); diff --git a/include/Engine/Rendering/DrawFinalPass.h b/include/Engine/Rendering/DrawFinalPass.h index cfddd5c6..b7ba96ad 100644 --- a/include/Engine/Rendering/DrawFinalPass.h +++ b/include/Engine/Rendering/DrawFinalPass.h @@ -16,7 +16,7 @@ class DrawFinalPass { public: DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCullingPass, CubeMapPass* cubeMapPass, SSAOPass* ssaoPass); - ~DrawFinalPass() { } + ~DrawFinalPass(); void InitializeTextures(); void InitializeFrameBuffers(); void InitializeShaderPrograms(); diff --git a/include/Engine/Rendering/Renderer.h b/include/Engine/Rendering/Renderer.h index a64a4aa3..4f74ad44 100644 --- a/include/Engine/Rendering/Renderer.h +++ b/include/Engine/Rendering/Renderer.h @@ -36,6 +36,7 @@ public: : m_EventBroker(eventBroker) , m_Config(config) { } + ~Renderer(); virtual void Initialize() override; virtual void Update(double dt) override; diff --git a/include/Engine/Rendering/SSAOPass.h b/include/Engine/Rendering/SSAOPass.h index 1cb28009..ba92b6dc 100644 --- a/include/Engine/Rendering/SSAOPass.h +++ b/include/Engine/Rendering/SSAOPass.h @@ -14,7 +14,7 @@ class SSAOPass { public: SSAOPass(IRenderer* renderer, ConfigFile* config); - ~SSAOPass() { }; + ~SSAOPass(); void ChangeQuality(int quality); diff --git a/src/Engine/Rendering/DrawBloomPass.cpp b/src/Engine/Rendering/DrawBloomPass.cpp index 73f73cc4..2230e99a 100644 --- a/src/Engine/Rendering/DrawBloomPass.cpp +++ b/src/Engine/Rendering/DrawBloomPass.cpp @@ -9,6 +9,11 @@ DrawBloomPass::DrawBloomPass(IRenderer* renderer, ConfigFile* config) ChangeQuality(m_Config->Get("GLOW.Quality", 2)); } +DrawBloomPass::~DrawBloomPass() { + CommonFunctions::DeleteTexture(&m_GaussianTexture_horiz); + CommonFunctions::DeleteTexture(&m_GaussianTexture_vert); +} + void DrawBloomPass::InitializeTextures() { m_BlackTexture = CommonFunctions::LoadTexture("Textures/Core/Black.png", false); diff --git a/src/Engine/Rendering/DrawFinalPass.cpp b/src/Engine/Rendering/DrawFinalPass.cpp index a610fab1..1bd0b82b 100644 --- a/src/Engine/Rendering/DrawFinalPass.cpp +++ b/src/Engine/Rendering/DrawFinalPass.cpp @@ -12,6 +12,14 @@ DrawFinalPass::DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCulling InitializeFrameBuffers(); } +DrawFinalPass::~DrawFinalPass(){ + CommonFunctions::DeleteTexture(&m_BloomTexture); + CommonFunctions::DeleteTexture(&m_SceneTexture); + CommonFunctions::DeleteTexture(&m_DepthBuffer); + CommonFunctions::DeleteTexture(&m_ShieldBuffer); + CommonFunctions::DeleteTexture(&m_CubeMapTexture); +} + void DrawFinalPass::InitializeTextures() { m_WhiteTexture = CommonFunctions::LoadTexture("Textures/Core/White.png", false); diff --git a/src/Engine/Rendering/PickingPass.cpp b/src/Engine/Rendering/PickingPass.cpp index 57e10aff..f21e3f94 100644 --- a/src/Engine/Rendering/PickingPass.cpp +++ b/src/Engine/Rendering/PickingPass.cpp @@ -12,7 +12,8 @@ PickingPass::PickingPass(IRenderer* renderer, EventBroker* eb) PickingPass::~PickingPass() { - + CommonFunctions::DeleteTexture(&m_PickingTexture); + CommonFunctions::DeleteTexture(&m_DepthBuffer); } diff --git a/src/Engine/Rendering/Renderer.cpp b/src/Engine/Rendering/Renderer.cpp index 7e11f3b2..7f6dd0cd 100644 --- a/src/Engine/Rendering/Renderer.cpp +++ b/src/Engine/Rendering/Renderer.cpp @@ -2,6 +2,19 @@ std::unordered_map Renderer::m_WindowToRenderer; +Renderer::~Renderer() { + delete m_PickingPass; + delete m_LightCullingPass; + delete m_ImGuiRenderPass; + delete m_DrawFinalPass; + delete m_DrawScreenQuadPass; + delete m_DrawBloomPass; + delete m_DrawColorCorrectionPass; + delete m_SSAOPass; + delete m_CubeMapPass; + delete m_TextPass; +} + void Renderer::Initialize() { m_SSAO_Quality = m_Config->Get("SSAO.Quality", 0); diff --git a/src/Engine/Rendering/SSAOPass.cpp b/src/Engine/Rendering/SSAOPass.cpp index 3b11535f..68c1678b 100644 --- a/src/Engine/Rendering/SSAOPass.cpp +++ b/src/Engine/Rendering/SSAOPass.cpp @@ -10,6 +10,13 @@ SSAOPass::SSAOPass(IRenderer* renderer, ConfigFile* config) } +SSAOPass::~SSAOPass() { + CommonFunctions::DeleteTexture(&m_SSAOTexture); + CommonFunctions::DeleteTexture(&m_SSAOViewSpaceZTexture); + CommonFunctions::DeleteTexture(&m_Gaussian_horiz); + CommonFunctions::DeleteTexture(&m_Gaussian_vert); +} + void SSAOPass::ChangeQuality(int quality) { if (m_Quality == quality) { From b000bb259754854e9091c95100cf5726ad262f38 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Mon, 7 Mar 2016 17:53:11 +0100 Subject: [PATCH 16/68] Cleaned up old entities --- resources/Schema/Entities/AmmoHUD | 98 -- resources/Schema/Entities/BlueRifle | 19 - resources/Schema/Entities/BoneMarker | 22 - resources/Schema/Entities/DeadGirl.xlm | 255 --- resources/Schema/Entities/FirstPersonArms | 57 - resources/Schema/Entities/Player.xml | 1235 --------------- .../Entities/PlayerAssaultFallbackBlue.xml | 698 --------- .../Entities/PlayerAssaultFallbackRed.xml | 698 --------- .../Schema/Entities/PlayerAssaultRed.xml | 1375 ----------------- .../Schema/Entities/WeaponAssaultRedView.xml | 109 -- .../Schema/Entities/WeaponAssaultRedWorld.xml | 34 - .../Schema/Entities/aaaatestremoveme.xml | 39 - resources/Schema/Entities/aim_rays.xml | 261 ---- resources/Schema/Entities/awdawd | 23 - resources/Schema/Entities/ble | 145 -- 15 files changed, 5068 deletions(-) delete mode 100644 resources/Schema/Entities/AmmoHUD delete mode 100644 resources/Schema/Entities/BlueRifle delete mode 100644 resources/Schema/Entities/BoneMarker delete mode 100644 resources/Schema/Entities/DeadGirl.xlm delete mode 100644 resources/Schema/Entities/FirstPersonArms delete mode 100644 resources/Schema/Entities/Player.xml delete mode 100644 resources/Schema/Entities/PlayerAssaultFallbackBlue.xml delete mode 100644 resources/Schema/Entities/PlayerAssaultFallbackRed.xml delete mode 100644 resources/Schema/Entities/PlayerAssaultRed.xml delete mode 100644 resources/Schema/Entities/WeaponAssaultRedView.xml delete mode 100644 resources/Schema/Entities/WeaponAssaultRedWorld.xml delete mode 100644 resources/Schema/Entities/aaaatestremoveme.xml delete mode 100644 resources/Schema/Entities/aim_rays.xml delete mode 100644 resources/Schema/Entities/awdawd delete mode 100644 resources/Schema/Entities/ble diff --git a/resources/Schema/Entities/AmmoHUD b/resources/Schema/Entities/AmmoHUD deleted file mode 100644 index 6cdb6568..00000000 --- a/resources/Schema/Entities/AmmoHUD +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - - - - 0 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - 360 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - - - - - 0 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - 360 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - diff --git a/resources/Schema/Entities/BlueRifle b/resources/Schema/Entities/BlueRifle deleted file mode 100644 index 194c7739..00000000 --- a/resources/Schema/Entities/BlueRifle +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - R_Arm_Weapon_Joint - - - Models/Weapons/Blue/AssaultWeaponBlue.mesh - - - - - - - - - - diff --git a/resources/Schema/Entities/BoneMarker b/resources/Schema/Entities/BoneMarker deleted file mode 100644 index eda56d56..00000000 --- a/resources/Schema/Entities/BoneMarker +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - R_Leg_Top - - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - diff --git a/resources/Schema/Entities/DeadGirl.xlm b/resources/Schema/Entities/DeadGirl.xlm deleted file mode 100644 index 90a0411d..00000000 --- a/resources/Schema/Entities/DeadGirl.xlm +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - - - - - 600 - - - - - - - - - 5 - - - - - - - - - - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,100 - - - - - - - - - - - - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - - - - - - - - 1 - - - - - Models/Core/UnitHexagon.mesh - - - - - - - - - - - - - - Textures/Weapons/Crosshair/SmallThickHoleDot.png - false - - - - - - - - - - - - - - Idle - 0.28963486380924053 - 1 - - - Models/Characters/Assault/FirstPerson.mesh - true - - - - - - - - R_Arm_Weapon_Joint - - - Models/Weapons/Blue/AssaultWeaponBlue.mesh - true - - - - - - - - - - - Schema/Entities/RayBlue.xml - - - - - - - - - - - - - Schema/Entities/WeaponReloadEffect.xml - - - - - - - - - - - - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - Idle - 0.42156525436696768 - 1 - - - AimRifle - - - - - Models/Characters/Assault/AssaultAnimations.mesh - - - - - - - - - R_Arm_Weapon_Joint - - - Models/Weapons/Blue/AssaultWeaponBlue.mesh - false - - - - - - - - - - - Schema/Entities/RayBlue.xml - - - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - diff --git a/resources/Schema/Entities/FirstPersonArms b/resources/Schema/Entities/FirstPersonArms deleted file mode 100644 index bf749a4e..00000000 --- a/resources/Schema/Entities/FirstPersonArms +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - Run - 0.5 - 0.97312056690160276 - 1 - 1 - ReloadSwitch - 0.91310356788604263 - LeftRight - 0 - 0.040207288496060478 - 1 - - - DownUp - - - - Models/Characters/Assault/FirstPerson.mesh - - true - - - - - - - - - - - R_Arm_Weapon_Joint - - - Models/Weapons/Blue/AssaultWeapon.mesh - - - - - - - - - - - - - - - - - - diff --git a/resources/Schema/Entities/Player.xml b/resources/Schema/Entities/Player.xml deleted file mode 100644 index 475acf78..00000000 --- a/resources/Schema/Entities/Player.xml +++ /dev/null @@ -1,1235 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - 5 - - - - - - - - - - - - 0.10000000149011612 - 300 - - - - - - - - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - - - - - - - - Textures/Weapons/Crosshair/SmallThickHoleDot.png - - false - - - - - - - - - - - - Schema/Entities/HitMarker.xml - - - - - - - - - - - - - - 1 - - - - - Textures/HealthHUD3.png - - - - - - - - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - 0.0 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - 1 - - - - 100/100 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - 2 - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - 3 - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 1 - - - - 4 - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - 1 - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 1 - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - - - - - Models/Widgets/Arrows/Arrow5.mesh - - - - - - - - - - - - - - - BlendTreeAssaultWeapon - BlendTreeSecondaryWeapon - 0 - true - - - Models/Characters/Defender/FirstPersonDefenderBlue.mesh - - - - - - - - R_Arm_Weapon_Joint - - - AssaultWeapon - - - Schema/Entities/WeaponAssaultBlueView.xml - - - - - - - - - - - - R_Arm_Weapon_Joint - - - SidearmWeapon - - - Schema/Entities/SidearmWeaponView.xml - - - - - - - - - - - - Idle - WeaponAction - 0 - true - - - - - - - - Fire - Reload - 1 - - - - - - - - ShootShotgunF - 1 - true - false - - - - - - - - - ReloadSwitchF - - 1 - true - - - - - - - - - - - IdleF - - 1 - true - - - - - - - - - - - - - - - - - - - - - 0.10000000149011612 - 300 - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - BlendTreeAim - BlendTreeAssault - - - - - Models/Characters/Assault/AssaultBlue.mesh - - - - - - - - - R_Arm_Weapon_Joint - - - AssaultWeapon - - - - - - Schema/Entities/WeaponAssaultBlueWorld.xml - - - - - - - - - - - - R_Arm_Weapon_Joint - - - SidearmWeapon - - - - - - Schema/Entities/SidearmWeaponWorld.xml - - - - - - - - - - - - AimPrimary - AimSecondary - 0 - true - - - - - - - - AimSecWepA - - false - true - - - - - - - - - AimRifleA - - false - true - - - - - - - - - - - ReloadSwitchBlend - FinalMovementBlend - - - - - - - - StandCrouchBlend - JumpDashBlend - 2.5146881298480398e-63 - true - - - - - - - - StandMovement - CrouchMovement - 0 - true - - - - - - - - MovementBlend - Idle - 1 - - - - - - - - Walk - StrafeLRBlend - 0 - - - - - - - - Left - Right - 0.033793529385008014 - - - - - - - - CrouchStrafeLeftF - - 1 - true - - - - - - - - - CrouchStrafeRightF - - 1 - true - - - - - - - - - - - CrouchWalkF - - 1 - true - - - - - - - - - - - CrouchF - - 1 - - - - - - - - - - - MovementBlend - Idle - 1 - - - - - - - - RunWalkBlend - StrafeLRBlend - 2.4565650245976452e-16 - - - - - - - - Walk - Run - 1.2938206818383024e-24 - - - - - - - - WalkF - - 1 - true - - - - - - - - - RunF - - 1 - true - - - - - - - - - - - Left - Right - 0.033793529385008014 - - - - - - - - StrafeRightF - - 1 - true - - - - - - - - - StrafeLeftF - - 1 - true - - - - - - - - - - - - - IdleF - - 1 - true - - - - - - - - - - - - - Jump - DashBlend - 1 - true - - - - - - - - JumpF - - 1 - false - - - - - - - - - DashFBBlend - DashLRBlend - 0.014621149736541383 - - - - - - - - DashForward - DashBackward - 0.014363533804961248 - - - - - - - - DashForwardF - - 2 - false - - - - - - - - - DashBackwardF - - 2 - false - - - - - - - - - - - DashLeft - DashRight - 4.3244885367500671e-16 - - - - - - - - DashLeftF - - 2 - false - - - - - - - - - DashRightF - - 2 - false - - - - - - - - - - - - - - - - - ReloadSwitch - WeaponActionBlend - 1 - true - - - - - - - - ReloadSwitchU - - 1 - - - - - - - - - IdleBlend - ShootBlend - 0 - - - - - - - - IdlePrimary - IdleSecondary - 0 - - - - - - - - IdleAssaultRifleU - - 1 - true - - - - - - - - - IdleSecWepU - - 1 - true - - - - - - - - - - - ShootPrimary - ShootSecondary - 0 - - - - - - - - ShootFastRifleU - - 1 - - - - - - - - - ShootSecWepFastU - - - - - - - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - - Insert name here - Fonts/DroidSans.ttf,100 - - - - - - - - - - - - - - Textures/Icons/Arrow.png - - false - - - - - 50 - true - - - - - - - - - - - - Schema/Entities/DefenderShield.xml - - - - - - - - - - diff --git a/resources/Schema/Entities/PlayerAssaultFallbackBlue.xml b/resources/Schema/Entities/PlayerAssaultFallbackBlue.xml deleted file mode 100644 index 9650cfe8..00000000 --- a/resources/Schema/Entities/PlayerAssaultFallbackBlue.xml +++ /dev/null @@ -1,698 +0,0 @@ - - - - - - - - - - - - - - - - - - 5 - - - - - - - - - - - - - - - - - 0.10000000149011612 - 300 - - - - - - - - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - - - - - - - - Textures/Weapons/Crosshair/SmallThickHoleDot.png - - false - - - - - - - - - - - - Schema/Entities/HitMarker.xml - - - - - - - - - - - - - - 1 - - - - - Textures/HealthHUD3.png - - - - - - - - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - 0.0 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - 1 - - - - 100/100 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 2 - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 3 - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 4 - - - 1 - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 1 - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - 1 - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - Models/Widgets/Arrows/Arrow5.mesh - - - - - - - - - - - - - - - - - - - - Idle - 1.8348644854054612 - 1 - - - - - Models/Characters/Assault/Test/FirstPerson.mesh - - - - - - - - - R_Arm_Weapon_Joint - - - AssaultWeapon - - - Schema/Entities/WeaponAssaultBlueView.xml - - - - - - - - - - - - R_Arm_Weapon_Joint - - - SidearmWeapon - - - Schema/Entities/SidearmWeaponView.xml - - - - - - - - - - - - - - - - 0.10000000149011612 - 300 - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - IdleF - 1 - - - - - AimRifle - - - - - - Models/Characters/Assault/AssaultBlue.mesh - - - - - - - - - R_Arm_Weapon_Joint - - - AssaultWeapon - - - - - - Schema/Entities/WeaponAssaultBlueWorld.xml - - - - - - - - - - - - R_Arm_Weapon_Joint - - - SidearmWeapon - - - - - - Schema/Entities/SidearmWeaponWorld.xml - - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - - Insert name here - Fonts/DroidSans.ttf,100 - - - - - - - - - - - - - - Textures/Icons/Arrow.png - - false - - - - - 50 - true - - - - - - - - - - - - Schema/Entities/DefenderShield.xml - - - - - - - - - - diff --git a/resources/Schema/Entities/PlayerAssaultFallbackRed.xml b/resources/Schema/Entities/PlayerAssaultFallbackRed.xml deleted file mode 100644 index a32988c7..00000000 --- a/resources/Schema/Entities/PlayerAssaultFallbackRed.xml +++ /dev/null @@ -1,698 +0,0 @@ - - - - - - - - - - - - - - - - - - 5 - - - - - - - - - - - - - - - - - 0.10000000149011612 - 300 - - - - - - - - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - - - - - - - - Textures/Weapons/Crosshair/SmallThickHoleDot.png - - false - - - - - - - - - - - - Schema/Entities/HitMarker.xml - - - - - - - - - - - - - - 1 - - - - - Textures/HealthHUD3.png - - - - - - - - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - - - - - - - - - Textures/Core/White.png - - false - - - - - - - - - - - 0.0 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - 1 - - - - 100/100 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 2 - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 3 - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 4 - - - 1 - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 1 - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - 1 - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - Models/Widgets/Arrows/Arrow5.mesh - - - - - - - - - - - - - - - - - - - - Idle - 1.8348644854054612 - 1 - - - - - Models/Characters/Assault/Test/FirstPerson.mesh - - - - - - - - - R_Arm_Weapon_Joint - - - AssaultWeapon - - - Schema/Entities/WeaponAssaultRedView.xml - - - - - - - - - - - - R_Arm_Weapon_Joint - - - SidearmWeapon - - - Schema/Entities/SidearmWeaponView.xml - - - - - - - - - - - - - - - - 0.10000000149011612 - 300 - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - IdleF - 1 - - - - - AimRifle - - - - - - Models/Characters/Assault/AssaultRed.mesh - - - - - - - - - R_Arm_Weapon_Joint - - - AssaultWeapon - - - - - - Schema/Entities/WeaponAssaultRedWorld.xml - - - - - - - - - - - - R_Arm_Weapon_Joint - - - SidearmWeapon - - - - - - Schema/Entities/SidearmWeaponWorld.xml - - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - - Insert name here - Fonts/DroidSans.ttf,100 - - - - - - - - - - - - - - Textures/Icons/Arrow.png - - false - - - - - 50 - true - - - - - - - - - - - - Schema/Entities/DefenderShield.xml - - - - - - - - - - diff --git a/resources/Schema/Entities/PlayerAssaultRed.xml b/resources/Schema/Entities/PlayerAssaultRed.xml deleted file mode 100644 index a198196e..00000000 --- a/resources/Schema/Entities/PlayerAssaultRed.xml +++ /dev/null @@ -1,1375 +0,0 @@ - - - - - - - - - - 0.5 - - - - - - - - - - - - - - - 5 - - - - - - - - - - - - - 0.10000000149011612 - 300 - - - - - - - - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - - - - - - - - Textures/Weapons/Crosshair/SmallThickHoleDot.png - - false - - - - - - - - - - - - Schema/Entities/HitMarker.xml - - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - 2 - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - 3 - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 1 - - - - 4 - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - 1 - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - 1 - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - - - - - Models/Widgets/Arrows/Arrow5.mesh - - - - - - - - - - - - - - - - - - - - - 1 - - - - 100/100 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - 1 - - - - - Textures/HealthHUD3.png - - - - - - - - - - - - - - - - - - - - - - - - Textures/Icons/Boosts/Assault-01.png - - false - - - - - - - - - - - - - - - - - Textures/Icons/Boosts/Defender-01.png - - false - - - - - - - - - - - - - - - - - Textures/Icons/Boosts/Sniper-01.png - - false - - - - - - - - - - - - - - - - - - - - Textures/Icons/Abilities/Superman-01.png - - false - - - - - - - - - - - - - 0.0 - Fonts/DroidSans.ttf,64 - - false - - - - - - - - - - - - - - - - - - - MovementBlend - FinalBlend - - - Models/Characters/Assault/FirstPersonAssaultRed.mesh - - - - - - - - R_Arm_Weapon_Joint - - - AssaultWeapon - - - Schema/Entities/WeaponAssaultRedView.xml - - - - - - - - - - - Models/Weapons/Red/AssaultWeaponRed.mesh - - - - - - - - - - - - - - Schema/Entities/RayRed.xml - - - - - - - - - - - - Schema/Entities/ReloadEffectView.xml - - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - - - - - 32 - Fonts/DroidSans.ttf,64 - - - - PlayerAssault - AssaultWeapon - MagazineAmmo - - - - - - - - - - - 320 - Fonts/DroidSans.ttf,64 - - - - PlayerAssault - AssaultWeapon - Ammo - - - - - - - - - - - - - - - - - - - - R_Arm_Weapon_Joint - - - SidearmWeapon - - - Schema/Entities/SidearmWeaponView.xml - - - - - - - - - - - - BlendTreeAssaultWeapon - BlendTreeSecondaryWeapon - 0 - true - - - - - - - - Fire - Reload - 0 - true - - - - - - - - ShootRifleF - 1 - false - - - - - - - - - ReloadSwitchF - 1 - false - - - - - - - - - - - - - - - - - - - Idle - Run - 0 - true - - - - - - - - RunF - 1 - true - true - - - - - - - - - IdleF - 1 - true - true - - - - - - - - - - - - - - - 0.10000000149011612 - 300 - - - Models/Widgets/Camera.mesh - false - - - - - - - - - - - - BlendTreeAim - BlendTreeAssault - - - - - Models/Characters/Assault/AssaultRed.mesh - - true - - - - - - - - R_Arm_Weapon_Joint - - - AssaultWeapon - - - - - - Schema/Entities/WeaponAssaultRedWorld.xml - - - - - - - - - - - - R_Arm_Weapon_Joint - - - SidearmWeapon - - - - - - Schema/Entities/SidearmWeaponWorld.xml - - - - - - - - - - - - AimPrimary - AimSecondary - 0 - true - - - - - - - - AimSecWepA - - false - true - - - - - - - - - AimRifleA - - false - true - - - - - - - - - - - ReloadSwitchBlend - FinalMovementBlend - - - - - - - - StandCrouchBlend - JumpDashBlend - 2.5146881298480398e-63 - true - - - - - - - - StandMovement - CrouchMovement - 0 - true - - - - - - - - MovementBlend - Idle - 1 - - - - - - - - Walk - StrafeLRBlend - 0 - - - - - - - - Left - Right - 0.033793529385008014 - - - - - - - - CrouchStrafeLeftF - - 1 - true - - - - - - - - - CrouchStrafeRightF - - 1 - true - - - - - - - - - - - CrouchWalkF - - 1 - true - - - - - - - - - - - CrouchF - - 1 - - - - - - - - - - - MovementBlend - Idle - 1 - - - - - - - - RunWalkBlend - StrafeLRBlend - 2.4565650245976452e-16 - - - - - - - - Left - Right - 0.033793529385008014 - - - - - - - - StrafeLeftF - - 1 - true - - - - - - - - - StrafeRightF - - 1 - true - - - - - - - - - - - Walk - Run - 1.2938206818383024e-24 - - - - - - - - WalkF - - 1 - true - - - - - - - - - RunF - - 1 - true - - - - - - - - - - - - - IdleF - - 1 - true - - - - - - - - - - - - - Jump - DashBlend - 1 - true - - - - - - - - JumpF - - 1 - false - - - - - - - - - DashFBBlend - DashLRBlend - 0.014621149736541383 - - - - - - - - DashForward - DashBackward - 0.014363533804961248 - - - - - - - - DashForwardF - - 2 - false - - - - - - - - - DashBackwardF - - 2 - false - - - - - - - - - - - DashLeft - DashRight - 4.3244885367500671e-16 - - - - - - - - DashLeftF - - 2 - false - - - - - - - - - DashRightF - - 2 - false - - - - - - - - - - - - - - - - - ReloadSwitch - WeaponActionBlend - 1 - true - - - - - - - - ReloadSwitchU - - 1 - - - - - - - - - IdleBlend - ShootBlend - 0 - - - - - - - - IdlePrimary - IdleSecondary - 0 - - - - - - - - IdleAssaultRifleU - - 1 - true - - - - - - - - - IdleSecWepU - - 1 - true - - - - - - - - - - - ShootPrimary - ShootSecondary - 0 - - - - - - - - ShootFastRifleU - - 1 - - - - - - - - - ShootSecWepFastU - - - - - - - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - - - Models/Core/UnitCube.mesh - - false - - - - - - - - - - - Insert name here - Fonts/DroidSans.ttf,100 - - - - - - - - - - - - - - Textures/Icons/Arrow.png - - false - - - - - 50 - true - - - - - - - - - - - - Schema/Entities/DefenderShield.xml - - - - - - - - - - diff --git a/resources/Schema/Entities/WeaponAssaultRedView.xml b/resources/Schema/Entities/WeaponAssaultRedView.xml deleted file mode 100644 index 0a9b65b2..00000000 --- a/resources/Schema/Entities/WeaponAssaultRedView.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - Models/Weapons/Red/AssaultWeaponRed.mesh - - - - - - - - - Schema/Entities/RayRed.xml - - - - - - - - - - - - Schema/Entities/ReloadEffectView.xml - - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - - - - - 32 - Fonts/DroidSans.ttf,64 - - - - Player - AssaultWeapon - MagazineAmmo - - - - - - - - - - - 320 - Fonts/DroidSans.ttf,64 - - - - Player - AssaultWeapon - Ammo - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/Schema/Entities/WeaponAssaultRedWorld.xml b/resources/Schema/Entities/WeaponAssaultRedWorld.xml deleted file mode 100644 index 68d78d03..00000000 --- a/resources/Schema/Entities/WeaponAssaultRedWorld.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - Models/Weapons/Red/AssaultWeaponRed.mesh - - - - - - - - - Schema/Entities/RayRed.xml - - - - - - - - - - - Schema/Entities/ReloadEffectWorld.xml - - - - - - - - diff --git a/resources/Schema/Entities/aaaatestremoveme.xml b/resources/Schema/Entities/aaaatestremoveme.xml deleted file mode 100644 index 8da40b58..00000000 --- a/resources/Schema/Entities/aaaatestremoveme.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - Models/Core/Unithexagon.mesh - - - - - - - - - - - - - - - - - - - 2.2000000476837158 - - - - - - - - diff --git a/resources/Schema/Entities/aim_rays.xml b/resources/Schema/Entities/aim_rays.xml deleted file mode 100644 index c8dac9a3..00000000 --- a/resources/Schema/Entities/aim_rays.xml +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - - - - - - - - models/core/unitcube.mesh - - - - - - - - - - - - - - - models/core/unitcube.mesh - - - - - - - - - - - - - - - - - - - - - - - - models/core/unitcube.mesh - - - - - - - - - - - - - - - models/core/unitcube.mesh - - - - - - - - - - - - - - - models/core/unitcube.mesh - - - - - - - - - - - - - - Schema/Entities/Player.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Schema/Entities/Player.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - models/core/unitcube.mesh - - - - - - - - - - - - - - - - - - Models\Core\UnitCube.mesh - - - - - - - - - - - - - - - - - - - - - - - 1 - - - Models\Core\UnitCube.mesh - - - - - - - - - - - - - - - - - - diff --git a/resources/Schema/Entities/awdawd b/resources/Schema/Entities/awdawd deleted file mode 100644 index d8dacb54..00000000 --- a/resources/Schema/Entities/awdawd +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - L_Foot - true - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - diff --git a/resources/Schema/Entities/ble b/resources/Schema/Entities/ble deleted file mode 100644 index 6518ee5b..00000000 --- a/resources/Schema/Entities/ble +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - 0.30000001192092896 - 3 - - - - - - - - - - - - - - - - - 0 - - - Models/Widgets/Lights/DirectionalLightWidget.mesh - - - - - - - - - - - - - 8 - 0.60000002384185791 - - - - - - - - - - - - - - - 5 - Models/Characters/Defender/DefenderBlue.mesh - - - - - - - - R_Arm_Weapon_Joint - - - Models/Weapons/Blue/AssaultWeaponBlue.mesh - - - - - - - - - - - AimPrimary - AimSecondary - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - Models/Core/UnitPlane.mesh - - - - - - - - - - - - 8 - 0.60000002384185791 - - - - - - - - - - - 8 - 0.80000001192092896 - - - - - - - - - - - - From 8bcb15a12821fc137290de291ca7fc31bf31ccc0 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Mon, 7 Mar 2016 17:53:32 +0100 Subject: [PATCH 17/68] Disabled InputCommand processing while you fiddle with editor UI elements --- src/Engine/Input/InputProxy.cpp | 14 +++++++++----- src/Game/Game.cpp | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Engine/Input/InputProxy.cpp b/src/Engine/Input/InputProxy.cpp index 6c3591e3..295cf1c4 100644 --- a/src/Engine/Input/InputProxy.cpp +++ b/src/Engine/Input/InputProxy.cpp @@ -45,7 +45,7 @@ void InputProxy::Update(double dt) } } -void InputProxy::Process() +void InputProxy::Process(bool suppressNewEvents /*= false*/) { for (auto& pair : m_CommandHandlers) { const std::string& command = pair.first; @@ -62,8 +62,10 @@ void InputProxy::Process() e.PlayerID = -1; e.Command = command; e.Value = currentValue; - m_EventBroker->Publish(e); - //LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, e.PlayerID); + if (!suppressNewEvents || e.Value == 0) { + m_EventBroker->Publish(e); + LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, e.PlayerID); + } m_LastCommandValues[command] = currentValue; } } @@ -78,8 +80,10 @@ void InputProxy::Process() e.Value += value; } //e.Value = std::max(-1.f, std::min(e.Value, 1.f)); - m_EventBroker->Publish(e); - //LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, e.PlayerID); + if (!suppressNewEvents || e.Value == 0) { + m_EventBroker->Publish(e); + LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, e.PlayerID); + } } m_CommandQueue.clear(); } diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index 8f589e34..d58c89e0 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -218,7 +218,7 @@ void Game::Tick() PerformanceTimer::StartTimerAndStopPrevious("InputProxy"); m_InputProxy->Update(dt); m_EventBroker->Swap(); - m_InputProxy->Process(); + m_InputProxy->Process(ImGui::GetIO().WantCaptureKeyboard || ImGui::GetIO().WantCaptureMouse); m_EventBroker->Swap(); PerformanceTimer::StartTimerAndStopPrevious("SoundManager"); From abc447b937c1a364fdf54080e31ab2461ed65dc7 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Mon, 7 Mar 2016 17:53:47 +0100 Subject: [PATCH 18/68] Updated snapshot filter to ignore the new animation components --- src/Game/Network/MultiplayerSnapshotFilter.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Game/Network/MultiplayerSnapshotFilter.cpp b/src/Game/Network/MultiplayerSnapshotFilter.cpp index 295cdd7a..1131424b 100644 --- a/src/Game/Network/MultiplayerSnapshotFilter.cpp +++ b/src/Game/Network/MultiplayerSnapshotFilter.cpp @@ -15,7 +15,9 @@ bool MultiplayerSnapshotFilter::FilterComponent(EntityWrapper entity, SharedComp || component.Info.Name == "AssaultWeapon" || component.Info.Name == "DefenderWeapon" || component.Info.Name == "Animation" - || component.Info.Name == "AnimationOffset" + || component.Info.Name == "Blend" + || component.Info.Name == "BlendAdditive" + || component.Info.Name == "BlendOverride" || entity.Name() == "PlayerName" ) { return false; From f923872e514f30d0538897351574a5f354326384 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Mon, 7 Mar 2016 17:54:01 +0100 Subject: [PATCH 19/68] fixup! Disabled InputCommand processing while you fiddle with editor UI elements --- include/Engine/Input/InputProxy.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Engine/Input/InputProxy.h b/include/Engine/Input/InputProxy.h index c9ba5ada..a38b8d24 100644 --- a/include/Engine/Input/InputProxy.h +++ b/include/Engine/Input/InputProxy.h @@ -18,7 +18,7 @@ public: void LoadBindings(std::string file); void Update(double dt); - void Process(); + void Process(bool suppressNewEvents = false); template void AddHandler(); void Publish(const Events::InputCommand& e); From 1a403b9b88f58c9f93e0d2c83464068f11b71612 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Mon, 7 Mar 2016 17:55:00 +0100 Subject: [PATCH 20/68] TextFieldReader now loops through parents if the entity field was empty and the current entity didn't have a component of that type. --- src/Game/Systems/TextFieldReader.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Game/Systems/TextFieldReader.cpp b/src/Game/Systems/TextFieldReader.cpp index c2e5c1e4..71218ef8 100644 --- a/src/Game/Systems/TextFieldReader.cpp +++ b/src/Game/Systems/TextFieldReader.cpp @@ -7,17 +7,21 @@ void TextFieldReader::UpdateComponent(EntityWrapper& entity, ComponentWrapper& c } // Find the entity to read from - const std::string& parentEntityName = cAmmunitionHUD["ParentEntityName"]; + const std::string& entityName = cAmmunitionHUD["ParentEntityName"]; + const std::string& componentType = cAmmunitionHUD["ComponentType"]; EntityWrapper readEntity = entity; - if (!parentEntityName.empty()) { - readEntity = entity.FirstParentByName(parentEntityName); - if (!readEntity.Valid()) { - return; + if (entityName.empty()) { + if (!readEntity.HasComponent(componentType)) { + readEntity = readEntity.FirstParentWithComponent(componentType); } + } else { + readEntity = entity.FirstParentByName(entityName); + } + if (!readEntity.Valid()) { + return; } // Find the component to read from - const std::string& componentType = cAmmunitionHUD["ComponentType"]; if (componentType.empty() || !readEntity.HasComponent(componentType)) { return; } From 67ce6c5ae6881e9fc852621321f4bd0898294632 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Mon, 7 Mar 2016 19:38:02 +0100 Subject: [PATCH 21/68] Added Speed and Delay fields to explosion effect. --- resources/Schema/Components/ExplosionEffect.xml | 2 ++ resources/Schema/Components/ExplosionEffect.xsd | 2 ++ src/Game/Systems/ExplosionEffectSystem.cpp | 16 ++++++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/resources/Schema/Components/ExplosionEffect.xml b/resources/Schema/Components/ExplosionEffect.xml index 22692729..0b4a44c4 100644 --- a/resources/Schema/Components/ExplosionEffect.xml +++ b/resources/Schema/Components/ExplosionEffect.xml @@ -3,6 +3,8 @@ 0 2 + 1 + 0 diff --git a/resources/Schema/Components/ExplosionEffect.xsd b/resources/Schema/Components/ExplosionEffect.xsd index cdde5e52..bd29b2ed 100644 --- a/resources/Schema/Components/ExplosionEffect.xsd +++ b/resources/Schema/Components/ExplosionEffect.xsd @@ -18,6 +18,8 @@ How many seconds the death animation should be + + diff --git a/src/Game/Systems/ExplosionEffectSystem.cpp b/src/Game/Systems/ExplosionEffectSystem.cpp index 2704d2da..71de192a 100644 --- a/src/Game/Systems/ExplosionEffectSystem.cpp +++ b/src/Game/Systems/ExplosionEffectSystem.cpp @@ -2,13 +2,17 @@ void ExplosionEffectSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) { - if ((double)component["TimeSinceDeath"] > (double)component["ExplosionDuration"]) { - (double)component["TimeSinceDeath"] = 0.f; + double& delay = (double)component["Delay"]; + if (delay > 0) { + delay = std::max(0.0, delay - dt); } - (double&)component["TimeSinceDeath"] += dt; - //if ((bool)Component["Gravity"] == true) { - // (bool)Component["ExponentialAccelaration"] = false; - //} + if (delay <= 0) { + double& timeSinceDeath = component["TimeSinceDeath"]; + timeSinceDeath += (double)component["Speed"] * dt; + if (timeSinceDeath < 0 || timeSinceDeath > (double)component["ExplosionDuration"]) { + timeSinceDeath = 0.0; + } + } } From 3fda25b604d3feb1c75787633531cff5157dbac0 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Mon, 7 Mar 2016 19:38:49 +0100 Subject: [PATCH 22/68] Working first person animations for AssaultWeapon and DefenderWeapon and reload effect for AssaultWeapon --- assets | 2 +- include/Game/Systems/Weapon/WeaponBehaviour.h | 45 +-- resources/Schema/Components/Animation.xml | 2 +- .../Entities/BlendTreeAssaultWeapon.xml | 207 +++++++++-- .../Entities/BlendTreeDefenderWeapon.xml | 159 +++++++++ resources/Schema/Entities/MovementTest.xml | 4 +- .../Schema/Entities/PlayerAssaultBlue.xml | 331 ++++-------------- .../Schema/Entities/ReloadEffectView.xml | 14 +- .../Schema/Entities/WeaponAssaultBlueView.xml | 175 +++++++-- .../Entities/WeaponAssaultBlueWorld.xml | 2 +- .../WeaponAssaultReloadEffectView.xml | 54 +++ .../Entities/WeaponDefenderBlueView.xml | 252 ++++++++++--- .../Systems/Weapon/AssaultWeaponBehaviour.cpp | 36 +- .../Weapon/DefenderWeaponBehaviour.cpp | 78 +++-- .../Systems/Weapon/SidearmWeaponBehaviour.cpp | 2 +- 15 files changed, 915 insertions(+), 448 deletions(-) create mode 100644 resources/Schema/Entities/BlendTreeDefenderWeapon.xml create mode 100644 resources/Schema/Entities/WeaponAssaultReloadEffectView.xml diff --git a/assets b/assets index 6451a3f5..0f9208a3 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 6451a3f5a5a86944a8457b533a2f4518b2191d2b +Subproject commit 0f9208a305b204cc9a7a9d6accfb084bc40e8095 diff --git a/include/Game/Systems/Weapon/WeaponBehaviour.h b/include/Game/Systems/Weapon/WeaponBehaviour.h index e2d5980b..a21ed6d5 100644 --- a/include/Game/Systems/Weapon/WeaponBehaviour.h +++ b/include/Game/Systems/Weapon/WeaponBehaviour.h @@ -32,20 +32,19 @@ public: virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cWeapon, double dt) override { - EntityWrapper firstPersonWeapon = entity.FirstChildByName("Hands").FirstChildByName("AssaultWeapon"); - EntityWrapper thirdPersonWeapon = entity.FirstChildByName("PlayerModel").FirstChildByName("AssaultWeapon"); - if (IsClient && (firstPersonWeapon.Valid() || thirdPersonWeapon.Valid())) { - if (m_ActiveWeapons.count(entity) == 0) { + /* EntityWrapper firstPersonWeapon = entity.FirstChildByName("Hands").FirstChildByName("AssaultWeapon"); + EntityWrapper thirdPersonWeapon = entity.FirstChildByName("PlayerModel").FirstChildByName("AssaultWeapon"); + if (IsClient && (firstPersonWeapon.Valid() || thirdPersonWeapon.Valid())) { + if (m_ActiveWeapons.count(entity) == 0) { + WeaponInfo& wi = m_ActiveWeapons[entity]; + wi.Player = entity; + wi.WeaponEntity = entity; + wi.FirstPersonEntity = firstPersonWeapon; + wi.ThirdPersonEntity = thirdPersonWeapon; - WeaponInfo& wi = m_ActiveWeapons[entity]; - wi.Player = entity; - wi.WeaponEntity = entity; - wi.FirstPersonEntity = firstPersonWeapon; - wi.ThirdPersonEntity = thirdPersonWeapon; - - OnEquip(cWeapon, wi); - } - } + OnEquip(cWeapon, wi); + } + }*/ auto weapon = getActiveWeapon(entity); if (!weapon) { @@ -89,7 +88,7 @@ protected: // Returns wi.FirstPersonEntity or wi.ThirdPersonEntity depending on // if the player is in first person mode or not. - EntityWrapper getRelevantWeaponModelEntity(WeaponInfo& wi) + EntityWrapper getRelevantWeaponEntity(WeaponInfo& wi) { if (isPlayerInFirstPerson(wi.Player)) { return wi.FirstPersonEntity; @@ -137,7 +136,7 @@ protected: void playAnimationAndReturn(EntityWrapper weaponModelEntity, const std::string& subTreeName, const std::string& animationNodeName) { - EntityWrapper root = weaponModelEntity.FirstParentWithComponent("Model"); + EntityWrapper root = weaponModelEntity; if (!root.Valid()) { return; } @@ -254,9 +253,9 @@ private: void selectWeapon(ComponentWrapper cWeapon, EntityWrapper player) { - if (!IsServer) { - return; - } + //if (!IsServer) { + // return; + //} // Don't reselect weapon if it's already active if (getActiveWeapon(player)) { @@ -287,13 +286,15 @@ private: // Spawn the weapon(s) EntityWrapper firstPersonWeapon; EntityWrapper thirdPersonWeapon; - //if (IsClient) { + if (IsClient) { if (firstPersonAttachment.Valid()) { firstPersonWeapon = SpawnerSystem::Spawn(firstPersonAttachment, firstPersonAttachment); } - //} - if (thirdPersonAttachment.Valid()) { - thirdPersonWeapon = SpawnerSystem::Spawn(thirdPersonAttachment, thirdPersonAttachment); + } + if (IsServer) { + if (thirdPersonAttachment.Valid()) { + thirdPersonWeapon = SpawnerSystem::Spawn(thirdPersonAttachment, thirdPersonAttachment); + } } WeaponInfo& wi = m_ActiveWeapons[player]; diff --git a/resources/Schema/Components/Animation.xml b/resources/Schema/Components/Animation.xml index 05de9f9f..8e7fd69b 100644 --- a/resources/Schema/Components/Animation.xml +++ b/resources/Schema/Components/Animation.xml @@ -4,7 +4,7 @@ false false - 0 + 1 true false \ No newline at end of file diff --git a/resources/Schema/Entities/BlendTreeAssaultWeapon.xml b/resources/Schema/Entities/BlendTreeAssaultWeapon.xml index a68175a2..2bdaa0bb 100644 --- a/resources/Schema/Entities/BlendTreeAssaultWeapon.xml +++ b/resources/Schema/Entities/BlendTreeAssaultWeapon.xml @@ -1,46 +1,102 @@ - + - - Idle - WeaponAction - 0 - true - + + MovementBlend + FinalBlend + + + Models/Characters/Assault/FirstPersonAssaultBlue.mesh + - + - Fire - Reload - 1 + BlendTreeAssaultWeapon + BlendTreeSecondaryWeapon + 0 + true - + + + + Fire + Reload + 0 + true + + + + + + + + ReloadSwitchF + 0.5 + false + + + + + + + + + ShootRifleF + 1 + false + + + + + + + + + + + + + + + + + + + Idle + Run + 0 + true + + + + + - ShootShotgunF + RunF 1 true - false + true - + - ReloadSwitchF - + IdleF 1 true + true @@ -48,17 +104,116 @@ - + - - IdleF - - 1 - true - - + + R_Arm_Weapon_Joint + + + Models/Weapons/Blue/AssaultWeaponBlue.mesh + + + + + - + + + + + Schema/Entities/RayBlue.xml + + + + + + + + + + + + Schema/Entities/WeaponAssaultReloadEffectView.xml + + + + + + + + + + + R_Ammo_Joint + + true + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + + + + + 32 + Fonts/DroidSans.ttf,64 + + + + PlayerAssault + AssaultWeapon + MagazineAmmo + + + + + + + + + + + 320 + Fonts/DroidSans.ttf,64 + + + + PlayerAssault + AssaultWeapon + Ammo + + + + + + + + + + + diff --git a/resources/Schema/Entities/BlendTreeDefenderWeapon.xml b/resources/Schema/Entities/BlendTreeDefenderWeapon.xml new file mode 100644 index 00000000..3f22d57f --- /dev/null +++ b/resources/Schema/Entities/BlendTreeDefenderWeapon.xml @@ -0,0 +1,159 @@ + + + + + + MovementBlend + FinalBlend + + + Models/Characters/Defender/FirstPersonDefenderBlue.mesh + + + + + + + + + BlendTreeDefenderWeapon + BlendTreeSecondaryWeapon + 0 + true + + + + + + + + ActionBlend + Shield + 0 + true + + + + + + + + ActivateDeactiveShieldF + + 1 + false + + + + + + + + + Idle + ActionBlend2 + 0 + true + + + + + + + + IdleF + + + + + + + + + Fire + Reload + 0 + + + + + + + + ShootShotgunF + + 1 + false + + + + + + + + + ShotgunReloadTwoF + + 1 + false + + + + + + + + + + + + + + + + + + + + + + + Idle + Run + 0 + true + + + + + + + + RunF + + 1 + true + true + + + + + + + + + IdleF + + 1 + true + true + + + + + + + + + + diff --git a/resources/Schema/Entities/MovementTest.xml b/resources/Schema/Entities/MovementTest.xml index 50f77401..47284d51 100644 --- a/resources/Schema/Entities/MovementTest.xml +++ b/resources/Schema/Entities/MovementTest.xml @@ -2,7 +2,9 @@ - + + + diff --git a/resources/Schema/Entities/PlayerAssaultBlue.xml b/resources/Schema/Entities/PlayerAssaultBlue.xml index 7773235b..8bceb701 100644 --- a/resources/Schema/Entities/PlayerAssaultBlue.xml +++ b/resources/Schema/Entities/PlayerAssaultBlue.xml @@ -16,6 +16,11 @@ + + + + + @@ -493,250 +498,34 @@ - + - - MovementBlend - FinalBlend - - - Models/Characters/Assault/FirstPersonAssaultBlue.mesh - - - R_Arm_Weapon_Joint - AssaultWeapon Schema/Entities/WeaponAssaultBlueView.xml - - - - - - - - - - Models/Weapons/Blue/AssaultWeaponBlue.mesh - - - - - - - - - - - - - - Schema/Entities/RayBlue.xml - - - - - - - - - - - - Schema/Entities/ReloadEffectView.xml - - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - - - - - 32 - Fonts/DroidSans.ttf,64 - - - - PlayerAssault - AssaultWeapon - MagazineAmmo - - - - - - - - - - - 320 - Fonts/DroidSans.ttf,64 - - - - PlayerAssault - AssaultWeapon - Ammo - - - - - - - - - - - - - - - - - - - - R_Arm_Weapon_Joint - - - SidearmWeapon - - - Schema/Entities/SidearmWeaponView.xml - - - - - + - + - - BlendTreeAssaultWeapon - BlendTreeSecondaryWeapon - 0 - true - + + DefenderWeapon + + + Schema/Entities/WeaponDefenderBlueView.xml + - - - - - Fire - Reload - 0 - true - - - - - - - - ShootRifleF - 1 - false - - - - - - - - - ReloadSwitchF - 1 - false - - - - - - - - - - - - - - - - - - - Idle - Run - 0 - true - - - - - - - - RunF - 1 - true - true - - - - - - - - - IdleF - 1 - true - true - - - - - - + @@ -769,8 +558,6 @@ Models/Characters/Assault/AssaultBlue.mesh - - true @@ -790,8 +577,8 @@ Schema/Entities/WeaponAssaultBlueWorld.xml - - + + @@ -811,8 +598,8 @@ Schema/Entities/SidearmWeaponWorld.xml - - + + @@ -832,7 +619,7 @@ AimSecWepA - + false true @@ -844,7 +631,7 @@ AimRifleA - + false true @@ -988,42 +775,6 @@ - - - - Left - Right - 0.033793529385008014 - - - - - - - - StrafeLeftF - - 1 - true - - - - - - - - - StrafeRightF - - 1 - true - - - - - - - @@ -1060,6 +811,42 @@ + + + + Left + Right + 0.033793529385008014 + + + + + + + + StrafeLeftF + + 1 + true + + + + + + + + + StrafeRightF + + 1 + true + + + + + + + @@ -1327,12 +1114,12 @@ - Insert name here + Fonts/DroidSans.ttf,100 - + diff --git a/resources/Schema/Entities/ReloadEffectView.xml b/resources/Schema/Entities/ReloadEffectView.xml index ca7e6e1a..8aa6b8ec 100644 --- a/resources/Schema/Entities/ReloadEffectView.xml +++ b/resources/Schema/Entities/ReloadEffectView.xml @@ -1,20 +1,20 @@ - + - 2 + 1 - true - - - true - + + + 1 + true Models/Weapons/Blue/AssaultWeaponBlue.mesh + true diff --git a/resources/Schema/Entities/WeaponAssaultBlueView.xml b/resources/Schema/Entities/WeaponAssaultBlueView.xml index 9b10618b..235a9480 100644 --- a/resources/Schema/Entities/WeaponAssaultBlueView.xml +++ b/resources/Schema/Entities/WeaponAssaultBlueView.xml @@ -1,44 +1,161 @@ - + + + MovementBlend + FinalBlend + - Models/Weapons/Blue/AssaultWeaponBlue.mesh + Models/Characters/Assault/FirstPersonAssaultBlue.mesh - + - - Schema/Entities/RayBlue.xml - - - - - - - - - - - - Schema/Entities/ReloadEffectView.xml - + + BlendTreeAssaultWeapon + BlendTreeSecondaryWeapon + 0 + true + - + + + + + Fire + Reload + 0 + true + + + + + + + + ReloadSwitchF + 0.5 + false + + + + + + + + + ShootRifleF + 1 + false + + + + + + + + + + + + + + - + + + Idle + Run + 0 + true + + + + + + + + IdleF + 1 + true + true + + + + + + + + + RunF + 1 + true + true + + + + + + + + + + + R_Arm_Weapon_Joint + + + Models/Weapons/Blue/AssaultWeaponBlue.mesh + - - + + - + + + + Schema/Entities/RayBlue.xml + + + + + + + + + + + + Schema/Entities/WeaponAssaultReloadEffectView.xml + + + + + + + + + + + R_Ammo_Joint + + true + + + + + + + + + Textures/Core/UnitHexagon.png @@ -52,7 +169,7 @@ - + @@ -65,7 +182,7 @@ - Player + AssaultWeapon MagazineAmmo @@ -83,7 +200,7 @@ - Player + AssaultWeapon Ammo @@ -98,12 +215,6 @@ - - - - - - diff --git a/resources/Schema/Entities/WeaponAssaultBlueWorld.xml b/resources/Schema/Entities/WeaponAssaultBlueWorld.xml index 9f33c8f2..cb1acae6 100644 --- a/resources/Schema/Entities/WeaponAssaultBlueWorld.xml +++ b/resources/Schema/Entities/WeaponAssaultBlueWorld.xml @@ -20,7 +20,7 @@ - + Schema/Entities/ReloadEffectWorld.xml diff --git a/resources/Schema/Entities/WeaponAssaultReloadEffectView.xml b/resources/Schema/Entities/WeaponAssaultReloadEffectView.xml new file mode 100644 index 00000000..fe33de28 --- /dev/null +++ b/resources/Schema/Entities/WeaponAssaultReloadEffectView.xml @@ -0,0 +1,54 @@ + + + + + + 2 + + + + + + + + + + + 1 + 1 + -1 + 1 + + true + + + Models/Weapons/Blue/AssaultWeaponBlue.mesh + true + + + + + + + + + 1 + + + + + 1 + + true + + + Models/Weapons/Blue/AssaultWeaponBlue.mesh + true + + + + + + + + diff --git a/resources/Schema/Entities/WeaponDefenderBlueView.xml b/resources/Schema/Entities/WeaponDefenderBlueView.xml index 24b18f68..493c7243 100644 --- a/resources/Schema/Entities/WeaponDefenderBlueView.xml +++ b/resources/Schema/Entities/WeaponDefenderBlueView.xml @@ -1,43 +1,209 @@ - + + + MovementBlend + FinalBlend + - Models/Weapons/Blue/DefenderWeaponBlue.mesh + Models/Characters/Defender/FirstPersonDefenderBlue.mesh - + - - Schema/Entities/RayBlue.xml - - - - - - - - - - - Schema/Entities/ReloadEffectView.xml - + + ActionBlend + Shield + 0 + true + - + + + + + ActivateDeactiveShieldF + + 1 + false + + + + + + + + + Fire + ReloadBlend + 0 + + + + + + + + ShootShotgunF + 1 + false + + + + + + + + + ReloadLoop + ReloadTransitionBlend + 1 + + + + + + + + ShotgunReloadTwoF + 1 + + + + + + + + + ReloadStart + ReloadEnd + 0 + + + + + + + + ShotgunReloadOneF + 1 + false + + + + + + + + + ShotgunReloadThreeF + 1 + false + + + + + + + + + + + + - + + + Idle + Run + 0 + true + + + + + + + + IdleF + 1 + true + true + + + + + + + + + RunF + 1 + true + true + + + + + + + + + + + R_Arm_Weapon_Joint + + + Models/Weapons/Blue/DefenderWeaponBlue.mesh + - - + + - + + + + Schema/Entities/RayBlue.xml + + + + + + + + + + + Schema/Entities/ReloadEffectView.xml + + + + + + + + + + + R_Ammo_Joint + true + + + + + + + + + Textures/Core/UnitHexagon.png @@ -51,38 +217,20 @@ - + - - - - 8 - Fonts/DroidSans.ttf,64 - - - - Player - DefenderWeapon - MagazineAmmo - - - - - - - - 64 + 38 Fonts/DroidSans.ttf,64 - Player + DefenderWeapon Ammo @@ -93,6 +241,24 @@ + + + + 5 + Fonts/DroidSans.ttf,64 + + + + + DefenderWeapon + MagazineAmmo + + + + + + + diff --git a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp index fc5334c9..13c3d8a3 100644 --- a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp @@ -40,12 +40,16 @@ void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& magAmmo = glm::min(magSize, ammo); isReloading = false; if (wi.FirstPersonEntity.Valid()) { - wi.FirstPersonEntity["Model"]["Visible"] = true; + wi.FirstPersonEntity.FirstChildByName("ViewModel")["Model"]["Visible"] = true; } if (wi.ThirdPersonEntity.Valid()) { wi.ThirdPersonEntity["Model"]["Visible"] = true; } } + double reloadTime = cWeapon["ReloadTime"]; + if (isReloading && reloadTimer <= reloadTime / 2) { + + } // Restore view angle if (IsClient) { @@ -122,18 +126,26 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) // Play animation playAnimationAndReturn(wi.FirstPersonEntity, "BlendTreeAssaultWeapon", "Reload"); - if (IsClient) { - // Spawn explosion effect - EntityWrapper reloadEffectSpawner = wi.FirstPersonEntity.FirstChildByName("FirstPersonReloadSpawner"); - if (reloadEffectSpawner.Valid()) { - SpawnerSystem::Spawn(reloadEffectSpawner, reloadEffectSpawner); + // Spawn explosion effect + if (wi.FirstPersonEntity.Valid()) { + if (IsClient) { + EntityWrapper reloadEffectSpawner = wi.FirstPersonEntity.FirstChildByName("ReloadSpawner"); + if (reloadEffectSpawner.Valid()) { + reloadEffectSpawner.DeleteChildren(); + SpawnerSystem::Spawn(reloadEffectSpawner, reloadEffectSpawner); + } } - if (wi.FirstPersonEntity.Valid()) { - wi.FirstPersonEntity["Model"]["Visible"] = false; - } - if (wi.ThirdPersonEntity.Valid()) { - wi.ThirdPersonEntity["Model"]["Visible"] = false; + wi.FirstPersonEntity.FirstChildByName("ViewModel")["Model"]["Visible"] = false; + } + if (wi.ThirdPersonEntity.Valid()) { + if (IsServer) { + EntityWrapper reloadEffectSpawner = wi.ThirdPersonEntity.FirstChildByName("ReloadSpawner"); + if (reloadEffectSpawner.Valid()) { + reloadEffectSpawner.DeleteChildren(); + SpawnerSystem::Spawn(reloadEffectSpawner, reloadEffectSpawner); + } } + wi.ThirdPersonEntity["Model"]["Visible"] = false; } // Sound @@ -190,7 +202,7 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi } // Get weapon model based on current person - EntityWrapper weaponModelEntity = getRelevantWeaponModelEntity(wi); + EntityWrapper weaponModelEntity = getRelevantWeaponEntity(wi); if (!weaponModelEntity.Valid()) { return; } diff --git a/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp b/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp index 2d6ab74b..c18f9397 100644 --- a/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp @@ -36,7 +36,7 @@ void DefenderWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& m_EventBroker->Publish(e); } else { isReloading = false; - playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Idle"); + playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "ReloadEnd"); } } @@ -99,7 +99,21 @@ void DefenderWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) reloadTimer = reloadTime; // Play animation - playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Reload"); + if (wi.FirstPersonEntity.Valid()) { + Events::AutoAnimationBlend eBlendStart; + eBlendStart.RootNode = wi.FirstPersonEntity; + eBlendStart.NodeName = "ReloadStart"; + eBlendStart.Restart = true; + eBlendStart.Start = true; + m_EventBroker->Publish(eBlendStart); + Events::AutoAnimationBlend eBlendLoop; + eBlendLoop.RootNode = wi.FirstPersonEntity; + eBlendLoop.NodeName = "ReloadLoop"; + eBlendLoop.Restart = true; + eBlendLoop.Start = true; + eBlendLoop.AnimationEntity = wi.FirstPersonEntity.FirstChildByName("ReloadStart"); + m_EventBroker->Publish(eBlendLoop); + } } void DefenderWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) @@ -114,42 +128,48 @@ void DefenderWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi bool DefenderWeaponBehaviour::OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) { - if (e.Command == "SpecialAbility" && IsServer) { + if (e.Command == "SpecialAbility") { EntityWrapper attachment = wi.Player.FirstChildByName("ShieldAttachment"); if (attachment.Valid()) { if (e.Value > 0) { - SpawnerSystem::Spawn(attachment, attachment); + if (IsServer) { + SpawnerSystem::Spawn(attachment, attachment); + } - EntityWrapper root = wi.FirstPersonEntity.FirstParentWithComponent("Model"); - if (root.Valid()) { - EntityWrapper subTree = root.FirstChildByName("FinalBlend"); - if (subTree.Valid()) { - EntityWrapper animationNode = subTree.FirstChildByName("Shield"); - if (animationNode.Valid()) { - Events::AutoAnimationBlend eFireBlend; - eFireBlend.RootNode = root; - eFireBlend.NodeName = "Shield"; - eFireBlend.Restart = true; - eFireBlend.Start = true; - m_EventBroker->Publish(eFireBlend); + if (IsClient) { + EntityWrapper root = wi.FirstPersonEntity; + if (root.Valid()) { + EntityWrapper subTree = root.FirstChildByName("FinalBlend"); + if (subTree.Valid()) { + EntityWrapper animationNode = subTree.FirstChildByName("Shield"); + if (animationNode.Valid()) { + Events::AutoAnimationBlend eFireBlend; + eFireBlend.RootNode = root; + eFireBlend.NodeName = "Shield"; + eFireBlend.Restart = true; + eFireBlend.Start = true; + m_EventBroker->Publish(eFireBlend); + } } } } } else { attachment.DeleteChildren(); - EntityWrapper root = wi.FirstPersonEntity.FirstParentWithComponent("Model"); - if (root.Valid()) { - EntityWrapper subTree = root.FirstChildByName("FinalBlend"); - if (subTree.Valid()) { - EntityWrapper animationNode = subTree.FirstChildByName("ActionBlend"); - if (animationNode.Valid()) { - Events::AutoAnimationBlend eFireBlend; - eFireBlend.RootNode = root; - eFireBlend.NodeName = "ActionBlend"; - eFireBlend.Restart = true; - eFireBlend.Start = true; - m_EventBroker->Publish(eFireBlend); + if (IsClient) { + EntityWrapper root = wi.FirstPersonEntity; + if (root.Valid()) { + EntityWrapper subTree = root.FirstChildByName("FinalBlend"); + if (subTree.Valid()) { + EntityWrapper animationNode = subTree.FirstChildByName("ActionBlend"); + if (animationNode.Valid()) { + Events::AutoAnimationBlend eFireBlend; + eFireBlend.RootNode = root; + eFireBlend.NodeName = "ActionBlend"; + eFireBlend.Restart = true; + eFireBlend.Start = true; + m_EventBroker->Publish(eFireBlend); + } } } } @@ -232,7 +252,7 @@ void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi } // Play animation - playAnimationAndReturn(wi.FirstPersonEntity, "BlendTreeDefenderWeapon", "Fire"); + playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Fire"); // Sound Events::PlaySoundOnEntity e; diff --git a/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp b/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp index d32b7d7e..cba3d5e8 100644 --- a/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp @@ -52,7 +52,7 @@ void SidearmWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi cWeapon["FireCooldown"] = 60.0 / (double)cWeapon["RPM"]; // Get weapon model based on current person - EntityWrapper weaponModelEntity = getRelevantWeaponModelEntity(wi); + EntityWrapper weaponModelEntity = getRelevantWeaponEntity(wi); if (!weaponModelEntity.Valid()) { return; } From 7b0f8873324e04fdb3c86a631d8d075ec053b563 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Mon, 7 Mar 2016 19:59:57 +0100 Subject: [PATCH 23/68] fixup! fixup! Disabled InputCommand processing while you fiddle with editor UI elements --- src/Engine/Input/InputProxy.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Engine/Input/InputProxy.cpp b/src/Engine/Input/InputProxy.cpp index 295cf1c4..662aea52 100644 --- a/src/Engine/Input/InputProxy.cpp +++ b/src/Engine/Input/InputProxy.cpp @@ -64,7 +64,7 @@ void InputProxy::Process(bool suppressNewEvents /*= false*/) e.Value = currentValue; if (!suppressNewEvents || e.Value == 0) { m_EventBroker->Publish(e); - LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, e.PlayerID); + //LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, e.PlayerID); } m_LastCommandValues[command] = currentValue; } @@ -82,7 +82,7 @@ void InputProxy::Process(bool suppressNewEvents /*= false*/) //e.Value = std::max(-1.f, std::min(e.Value, 1.f)); if (!suppressNewEvents || e.Value == 0) { m_EventBroker->Publish(e); - LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, e.PlayerID); + //LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, e.PlayerID); } } m_CommandQueue.clear(); From 77b9112f55685872371dde28c18209b2b2d132a2 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Mon, 7 Mar 2016 20:04:22 +0100 Subject: [PATCH 24/68] Since I overwrote the assets I was sent with a now reverted commit, Defender weapon reload animations won't work until it's exported properly --- assets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets b/assets index 0f9208a3..d7685a31 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 0f9208a305b204cc9a7a9d6accfb084bc40e8095 +Subproject commit d7685a31afeb4ede0a1a50799ad43c85f3efd104 From 5c0d9070c7b1b9743610d5640d82e38d2f9c34d0 Mon Sep 17 00:00:00 2001 From: Tleety Date: Mon, 7 Mar 2016 23:25:06 +0100 Subject: [PATCH 25/68] WIP --- include/Engine/Rendering/BlurHUD.h | 69 +++++ include/Engine/Rendering/DrawFinalPass.h | 9 +- include/Engine/Rendering/Renderer.h | 2 + include/Engine/Rendering/SpriteJob.h | 3 + resources/Schema/Components/Sprite.xml | 1 + resources/Schema/Components/Sprite.xsd | 3 + resources/Shaders/CombineTexture.frag.glsl | 25 ++ resources/Shaders/CombineTexture.vert.glsl | 13 + src/Engine/Rendering/BlurHUD.cpp | 280 +++++++++++++++++++++ src/Engine/Rendering/DrawFinalPass.cpp | 7 +- src/Engine/Rendering/Renderer.cpp | 14 +- 11 files changed, 421 insertions(+), 5 deletions(-) create mode 100644 include/Engine/Rendering/BlurHUD.h create mode 100644 resources/Shaders/CombineTexture.frag.glsl create mode 100644 resources/Shaders/CombineTexture.vert.glsl create mode 100644 src/Engine/Rendering/BlurHUD.cpp diff --git a/include/Engine/Rendering/BlurHUD.h b/include/Engine/Rendering/BlurHUD.h new file mode 100644 index 00000000..2d01673e --- /dev/null +++ b/include/Engine/Rendering/BlurHUD.h @@ -0,0 +1,69 @@ +#ifndef BlurHUD_h__ +#define BlurHUD_h__ + +#include "IRenderer.h" +#include "DrawBloomPassState.h" +//#include "LightCullingPass.h" Finalpass om den skall skickas in +#include "FrameBuffer.h" +#include "ShaderProgram.h" +//#include "Util/UnorderedMapVec2.h" +#include "Texture.h" + +class BlurHUD +{ +public: + BlurHUD(IRenderer* renderer); + ~BlurHUD() { } + void InitializeTextures(); + void InitializeFrameBuffers(); + void InitializeShaderPrograms(); + void InitializeBuffers(); + void ClearBuffer(); + + void FillGaussianBuffer(FrameBuffer* fb); + + GLuint Draw(GLuint texture, RenderScene& scene); + + void OnWindowResize(); + void FillStencil(RenderScene& scene); + GLuint CombineTextures(GLuint texture1, GLuint texture2); + + //Getters + //Return the blurred result of the texture that was sent into draw + GLuint GaussianTexture() const { + if (m_Quality == 0) { + return m_BlackTexture->m_Texture; + } else { + return m_GaussianTexture_vert; + } + } + + +private: + Texture* m_BlackTexture; + Model* m_ScreenQuad; + + const IRenderer* m_Renderer; + ConfigFile* m_Config; + //const LightCullingPass* m_LightCullingPass + int m_Iterations = 3; + int m_Quality = 0; + + GLuint m_GaussianTexture_horiz = 0; + GLuint m_GaussianTexture_vert = 0; + GLuint m_DepthStencil_horiz = 0; + GLuint m_DepthStencil_vert = 0; + GLuint m_CombinedTexture = 0; + + FrameBuffer m_GaussianFrameBuffer_horiz; + FrameBuffer m_GaussianFrameBuffer_vert; + FrameBuffer m_CombinedTextureBuffer; + + ShaderProgram* m_GaussianProgram_horiz; + ShaderProgram* m_GaussianProgram_vert; + ShaderProgram* m_FillDepthStencilProgram; + ShaderProgram* m_CombineTexturesProgram; + +}; + +#endif \ No newline at end of file diff --git a/include/Engine/Rendering/DrawFinalPass.h b/include/Engine/Rendering/DrawFinalPass.h index cfddd5c6..5d741256 100644 --- a/include/Engine/Rendering/DrawFinalPass.h +++ b/include/Engine/Rendering/DrawFinalPass.h @@ -11,6 +11,7 @@ #include "Util/UnorderedMapVec2.h" #include "Util/CommonFunctions.h" #include "Texture.h" +#include "BlurHUD.h" class DrawFinalPass { @@ -20,7 +21,7 @@ public: void InitializeTextures(); void InitializeFrameBuffers(); void InitializeShaderPrograms(); - void Draw(RenderScene& scene); + void Draw(RenderScene& scene, BlurHUD* blurHUDPass); void ClearBuffer(); void OnWindowResize(); @@ -28,6 +29,10 @@ public: GLuint BloomTexture() const { return m_BloomTexture; } //Return the texture with diffuse and lighting of the scene. GLuint SceneTexture() const { return m_SceneTexture; } + //Return the SceneTexture with the blurred HUD bits. + GLuint CombinedSceneTexture() const { return m_CombinedTexture; } + //Return the blurred scene texture. + GLuint FullBlurredTexture() const { return m_FullBlurredTexture; } //Return the framebuffer used in the scene rendering stage. FrameBuffer* FinalPassFrameBuffer() { return &m_FinalPassFrameBuffer; } @@ -57,6 +62,8 @@ private: GLuint m_DepthBuffer; GLuint m_ShieldBuffer; GLuint m_CubeMapTexture; + GLuint m_FullBlurredTexture; + GLuint m_CombinedTexture; //This can be removed for less memory usage, just set m_sceneTexture to the return from m_BlurHUDPass.CombineTextures //maqke this component based i guess? GLuint m_ShieldPixelRate = 16; diff --git a/include/Engine/Rendering/Renderer.h b/include/Engine/Rendering/Renderer.h index a64a4aa3..9983bae9 100644 --- a/include/Engine/Rendering/Renderer.h +++ b/include/Engine/Rendering/Renderer.h @@ -18,6 +18,7 @@ #include "DrawColorCorrectionPass.h" #include "SSAOPass.h" #include "CubeMapPass.h" +#include "BlurHUD.h" #include "../Core/EventBroker.h" #include "ImGuiRenderPass.h" #include "Camera.h" @@ -75,6 +76,7 @@ private: DrawColorCorrectionPass* m_DrawColorCorrectionPass; SSAOPass* m_SSAOPass; CubeMapPass* m_CubeMapPass; + BlurHUD* m_BlurHUDPass; //----------------------Functions----------------------// void InitializeWindow(); diff --git a/include/Engine/Rendering/SpriteJob.h b/include/Engine/Rendering/SpriteJob.h index 25c2d5cb..2533d4d4 100644 --- a/include/Engine/Rendering/SpriteJob.h +++ b/include/Engine/Rendering/SpriteJob.h @@ -32,6 +32,8 @@ struct SpriteJob : RenderJob EndIndex = matProp.material->EndIndex; Matrix = matrix; Color = cSprite["Color"]; + BlurBackground = (bool)cSprite["BlurBackground"]; + Entity = cSprite.EntityID; Position = Transform::AbsolutePosition(world, cSprite.EntityID); Depth = 0; @@ -65,6 +67,7 @@ struct SpriteJob : RenderJob bool Pickable; bool IsIndicator = false; + bool BlurBackground = false; glm::vec4 FillColor = glm::vec4(0); float FillPercentage = 0.0; diff --git a/resources/Schema/Components/Sprite.xml b/resources/Schema/Components/Sprite.xml index ce4a6e1b..e577ac96 100644 --- a/resources/Schema/Components/Sprite.xml +++ b/resources/Schema/Components/Sprite.xml @@ -5,4 +5,5 @@ true true + false diff --git a/resources/Schema/Components/Sprite.xsd b/resources/Schema/Components/Sprite.xsd index 3c3d124a..e26d71c9 100644 --- a/resources/Schema/Components/Sprite.xsd +++ b/resources/Schema/Components/Sprite.xsd @@ -24,6 +24,9 @@ Whether the sprite should be sorted with depth or not. Only use false for textures that are on HUD + + Wether the background should be blurred begind this sprite. + diff --git a/resources/Shaders/CombineTexture.frag.glsl b/resources/Shaders/CombineTexture.frag.glsl new file mode 100644 index 00000000..9d6a71c2 --- /dev/null +++ b/resources/Shaders/CombineTexture.frag.glsl @@ -0,0 +1,25 @@ +#version 430 + +uniform sampler2D Texture0; +uniform sampler2D Texture1; + + +in VertexData{ + vec2 TextureCoordinate; +}Input; + +out vec4 fragmentColor; + +void main() +{ + vec4 texel0 = texture(Texture0, Input.TextureCoordinate); + vec4 texel1 = texture(Texture1, Input.TextureCoordinate); + float texel1_total = (texel1.r + texel1.g + texel1.b) * texel1.a; + texel1_total = ceil(clamp(texel1_total, 0, 1)); + + vec4 final = texel0 * texel1_total + texel1 * (1 - texel1_total); + //vec4 final = vec4(texel1_total, texel1_total, texel1_total, 1.0); + fragmentColor = final; +} + + diff --git a/resources/Shaders/CombineTexture.vert.glsl b/resources/Shaders/CombineTexture.vert.glsl new file mode 100644 index 00000000..346bc141 --- /dev/null +++ b/resources/Shaders/CombineTexture.vert.glsl @@ -0,0 +1,13 @@ +#version 430 + +layout (location = 0) in vec3 Position; + +out VertexData{ + vec2 TextureCoordinate; +}Output; + +void main() +{ + gl_Position = vec4(Position, 1.0); + Output.TextureCoordinate = (vec2(Position) + 1) / 2; +} \ No newline at end of file diff --git a/src/Engine/Rendering/BlurHUD.cpp b/src/Engine/Rendering/BlurHUD.cpp new file mode 100644 index 00000000..bd9ef901 --- /dev/null +++ b/src/Engine/Rendering/BlurHUD.cpp @@ -0,0 +1,280 @@ +#include "Rendering/BlurHUD.h" + +BlurHUD::BlurHUD(IRenderer* renderer) + : m_Renderer(renderer) +{ + InitializeShaderPrograms(); + InitializeBuffers(); + InitializeTextures(); +} + +void BlurHUD::InitializeTextures() +{ + m_BlackTexture = CommonFunctions::LoadTexture("Textures/Core/Black.png", false); + m_ScreenQuad = ResourceManager::Load("Models/Core/ScreenQuad.mesh"); +} + +void BlurHUD::InitializeShaderPrograms() +{ + m_GaussianProgram_horiz = ResourceManager::Load("##GaussianProgramHoriz"); + if (m_GaussianProgram_horiz->GetHandle() == 0) { + m_GaussianProgram_horiz->AddShader(std::shared_ptr(new VertexShader("Shaders/Gaussian_horiz.vert.glsl"))); + m_GaussianProgram_horiz->AddShader(std::shared_ptr(new FragmentShader("Shaders/Gaussian_horiz.frag.glsl"))); + m_GaussianProgram_horiz->Compile(); + m_GaussianProgram_horiz->BindFragDataLocation(0, "fragmentColor"); + m_GaussianProgram_horiz->Link(); + } + + m_GaussianProgram_vert = ResourceManager::Load("##GaussianProgramVert"); + if (m_GaussianProgram_vert->GetHandle() == 0) { + m_GaussianProgram_vert->AddShader(std::shared_ptr(new VertexShader("Shaders/Gaussian_vert.vert.glsl"))); + m_GaussianProgram_vert->AddShader(std::shared_ptr(new FragmentShader("Shaders/Gaussian_vert.frag.glsl"))); + m_GaussianProgram_vert->Compile(); + m_GaussianProgram_vert->BindFragDataLocation(0, "fragmentColor"); + m_GaussianProgram_vert->Link(); + } + m_FillDepthStencilProgram = ResourceManager::Load("#FillDepthStencilProgram"); + if (m_FillDepthStencilProgram->GetHandle() == 0) { + m_FillDepthStencilProgram->AddShader(std::shared_ptr(new VertexShader("Shaders/FillDepthBuffer.vert.glsl"))); + m_FillDepthStencilProgram->Compile(); + m_FillDepthStencilProgram->Link(); + } + m_CombineTexturesProgram = ResourceManager::Load("#CombineTexturesProgram"); + if (m_CombineTexturesProgram->GetHandle() == 0) { + m_CombineTexturesProgram->AddShader(std::shared_ptr(new VertexShader("Shaders/CombineTexture.vert.glsl"))); + m_CombineTexturesProgram->AddShader(std::shared_ptr(new FragmentShader("Shaders/CombineTexture.frag.glsl"))); + m_CombineTexturesProgram->Compile(); + m_CombineTexturesProgram->BindFragDataLocation(0, "fragmentColor"); + m_CombineTexturesProgram->Link(); + } + GLERROR("Creating DepthFill program"); +} + +void BlurHUD::InitializeBuffers() +{ + glm::vec2 res = glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + + CommonFunctions::GenerateTexture(&m_DepthStencil_horiz, GL_CLAMP_TO_BORDER, GL_NEAREST, + res, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8); + CommonFunctions::GenerateTexture(&m_GaussianTexture_horiz, GL_CLAMP_TO_EDGE, GL_LINEAR, + res, GL_RGB16F, GL_RGB, GL_FLOAT); + + if (m_GaussianFrameBuffer_horiz.GetHandle() == 0) { + m_GaussianFrameBuffer_horiz.AddResource(std::shared_ptr(new Texture2D(&m_DepthStencil_horiz, GL_DEPTH_STENCIL_ATTACHMENT))); + m_GaussianFrameBuffer_horiz.AddResource(std::shared_ptr(new Texture2D(&m_GaussianTexture_horiz, GL_COLOR_ATTACHMENT0))); + } + m_GaussianFrameBuffer_horiz.Generate(); + + CommonFunctions::GenerateTexture(&m_DepthStencil_vert, GL_CLAMP_TO_BORDER, GL_NEAREST, + res, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8); + CommonFunctions::GenerateTexture(&m_GaussianTexture_vert, GL_CLAMP_TO_EDGE, GL_LINEAR, + res, GL_RGB16F, GL_RGB, GL_FLOAT); + + if (m_GaussianFrameBuffer_vert.GetHandle() == 0) { + m_GaussianFrameBuffer_vert.AddResource(std::shared_ptr(new Texture2D(&m_DepthStencil_vert, GL_DEPTH_STENCIL_ATTACHMENT))); + m_GaussianFrameBuffer_vert.AddResource(std::shared_ptr(new Texture2D(&m_GaussianTexture_vert, GL_COLOR_ATTACHMENT0))); + } + m_GaussianFrameBuffer_vert.Generate(); + + CommonFunctions::GenerateTexture(&m_CombinedTexture, GL_CLAMP_TO_BORDER, GL_NEAREST, + res, GL_RGB16F, GL_RGB, GL_FLOAT); + + if (m_CombinedTextureBuffer.GetHandle() == 0) { + m_CombinedTextureBuffer.AddResource(std::shared_ptr(new Texture2D(&m_CombinedTexture, GL_COLOR_ATTACHMENT0))); + } + m_CombinedTextureBuffer.Generate(); +} + + +void BlurHUD::ClearBuffer() +{ + GLERROR("PRE"); + m_GaussianFrameBuffer_horiz.Bind(); + glClearColor(0.f, 0.f, 0.f, 0.f); + glClearStencil(0x00); + glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + m_GaussianFrameBuffer_horiz.Unbind(); + m_GaussianFrameBuffer_vert.Bind(); + glClearColor(0.f, 0.f, 0.f, 0.f); + glClearStencil(0x00); + glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + m_GaussianFrameBuffer_vert.Unbind(); + + m_CombinedTextureBuffer.Bind(); + glClearColor(0.f, 0.f, 0.f, 0.f); + glClear(GL_COLOR_BUFFER_BIT); + m_CombinedTextureBuffer.Unbind(); + GLERROR("END"); +} + +//Returns the finished blurred texture +GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) +{ + GLERROR("DrawBloomPass::Draw: Pre"); + + FillStencil(scene); + + DrawBloomPassState state; + + GLuint shaderHandle_horiz = m_GaussianProgram_horiz->GetHandle(); + GLuint shaderHandle_vert = m_GaussianProgram_vert->GetHandle(); + + + + //Horizontal pass, first use the given texture then save it to the horizontal framebuffer. + m_GaussianFrameBuffer_horiz.Bind(); + state.Enable(GL_STENCIL_TEST); + state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + state.StencilFunc(GL_EQUAL, 1, 0xFF); + state.StencilMask(0x00); + state.DepthMask(GL_FALSE); + m_GaussianProgram_horiz->Bind(); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, texture); + glBindVertexArray(m_ScreenQuad->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ScreenQuad->ElementBuffer); + glDrawElementsBaseVertex(GL_TRIANGLES, m_ScreenQuad->MaterialGroups()[0].material->EndIndex - m_ScreenQuad->MaterialGroups()[0].material->StartIndex +1 + , GL_UNSIGNED_INT, 0, m_ScreenQuad->MaterialGroups()[0].material->StartIndex); + //Iterate some times to make it more gaussian. + for (int i = 1; i < m_Iterations; i++) { + //Vertical pass + m_GaussianFrameBuffer_vert.Bind(); + state.Enable(GL_STENCIL_TEST); + state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + state.StencilFunc(GL_EQUAL, 1, 0xFF); + state.StencilMask(0x00); + state.DepthMask(GL_FALSE); + m_GaussianProgram_vert->Bind(); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, m_GaussianTexture_horiz); + + glBindVertexArray(m_ScreenQuad->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ScreenQuad->ElementBuffer); + glDrawElementsBaseVertex(GL_TRIANGLES, m_ScreenQuad->MaterialGroups()[0].material->EndIndex - m_ScreenQuad->MaterialGroups()[0].material->StartIndex +1 + , GL_UNSIGNED_INT, 0, m_ScreenQuad->MaterialGroups()[0].material->StartIndex); + //horizontal pass + m_GaussianFrameBuffer_vert.Unbind(); + + m_GaussianFrameBuffer_horiz.Bind(); + state.Enable(GL_STENCIL_TEST); + state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + state.StencilFunc(GL_EQUAL, 1, 0xFF); + state.StencilMask(0x00); + state.DepthMask(GL_FALSE); + m_GaussianProgram_horiz->Bind(); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, m_GaussianTexture_vert); + + glBindVertexArray(m_ScreenQuad->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ScreenQuad->ElementBuffer); + glDrawElementsBaseVertex(GL_TRIANGLES, m_ScreenQuad->MaterialGroups()[0].material->EndIndex - m_ScreenQuad->MaterialGroups()[0].material->StartIndex +1 + , GL_UNSIGNED_INT, 0, m_ScreenQuad->MaterialGroups()[0].material->StartIndex); + m_GaussianFrameBuffer_horiz.Unbind(); + } + + //final vertical gaussian after the iterations are done + + m_GaussianFrameBuffer_vert.Bind(); + state.Enable(GL_STENCIL_TEST); + state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + state.StencilFunc(GL_EQUAL, 1, 0xFF); + state.StencilMask(0x00); + state.DepthMask(GL_FALSE); + m_GaussianProgram_vert->Bind(); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, m_GaussianTexture_horiz); + glBindVertexArray(m_ScreenQuad->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ScreenQuad->ElementBuffer); + glDrawElementsBaseVertex(GL_TRIANGLES, m_ScreenQuad->MaterialGroups()[0].material->EndIndex - m_ScreenQuad->MaterialGroups()[0].material->StartIndex +1 + , GL_UNSIGNED_INT, 0, m_ScreenQuad->MaterialGroups()[0].material->StartIndex); + + GLERROR("DrawBloomPass::Draw: END"); + + return m_GaussianTexture_vert; +} + + +void BlurHUD::OnWindowResize() +{ + CommonFunctions::GenerateTexture(&m_GaussianTexture_vert, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height), GL_RGB16F, GL_RGB, GL_FLOAT); + m_GaussianFrameBuffer_vert.Generate(); + CommonFunctions::GenerateTexture(&m_GaussianTexture_horiz, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height), GL_RGB16F, GL_RGB, GL_FLOAT); + m_GaussianFrameBuffer_horiz.Generate(); +} + +void BlurHUD::FillStencil(RenderScene& scene) +{ + RenderState state; + + state.BindFramebuffer(m_GaussianFrameBuffer_horiz.GetHandle()); + state.Disable(GL_DEPTH_TEST); + state.Enable(GL_CULL_FACE); + state.Enable(GL_STENCIL_TEST); + state.StencilFunc(GL_ALWAYS, 1, 0xFF); + state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + state.StencilMask(0xFF); + + m_FillDepthStencilProgram->Bind(); + + GLuint shaderHandle = m_FillDepthStencilProgram->GetHandle(); + + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + + for (auto& job : scene.Jobs.SpriteJob) { + auto spriteJob = std::dynamic_pointer_cast(job); + if (!spriteJob) { + continue; + } + if (!spriteJob->BlurBackground) { + continue; + } + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(spriteJob->Matrix)); + + glBindVertexArray(spriteJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, spriteJob->Model->ElementBuffer); + glDrawElements(GL_TRIANGLES, spriteJob->EndIndex - spriteJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(spriteJob->StartIndex*sizeof(unsigned int))); + } + + state.BindFramebuffer(m_GaussianFrameBuffer_vert.GetHandle()); + for (auto& job : scene.Jobs.SpriteJob) { + auto spriteJob = std::dynamic_pointer_cast(job); + if (!spriteJob) { + continue; + } + if(!spriteJob->BlurBackground) { + continue; + } + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(spriteJob->Matrix)); + + glBindVertexArray(spriteJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, spriteJob->Model->ElementBuffer); + glDrawElements(GL_TRIANGLES, spriteJob->EndIndex - spriteJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(spriteJob->StartIndex*sizeof(unsigned int))); + } + +} + +//Texture 1 will be used if texture 2 is black at that texel, else texture 2 is used. +GLuint BlurHUD::CombineTextures(GLuint texture1, GLuint texture2) +{ + RenderState state; + state.BindFramebuffer(m_CombinedTextureBuffer.GetHandle()); + state.Disable(GL_DEPTH_TEST); + state.Disable(GL_STENCIL_TEST); + + m_CombineTexturesProgram->Bind(); + + glActiveTexture(GL_TEXTURE0); + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, texture1); + glBindTexture(GL_TEXTURE_2D, texture2); + glBindVertexArray(m_ScreenQuad->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ScreenQuad->ElementBuffer); + glDrawElementsBaseVertex(GL_TRIANGLES, m_ScreenQuad->MaterialGroups()[0].material->EndIndex - m_ScreenQuad->MaterialGroups()[0].material->StartIndex +1 + , GL_UNSIGNED_INT, 0, m_ScreenQuad->MaterialGroups()[0].material->StartIndex); + + return m_CombinedTexture; +} diff --git a/src/Engine/Rendering/DrawFinalPass.cpp b/src/Engine/Rendering/DrawFinalPass.cpp index a610fab1..b9aa8664 100644 --- a/src/Engine/Rendering/DrawFinalPass.cpp +++ b/src/Engine/Rendering/DrawFinalPass.cpp @@ -233,7 +233,7 @@ void DrawFinalPass::InitializeShaderPrograms() } -void DrawFinalPass::Draw(RenderScene& scene) +void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass) { GLERROR("Pre"); DrawFinalPassState* stateDethp = new DrawFinalPassState(m_ShieldDepthFrameBuffer.GetHandle()); @@ -280,6 +280,11 @@ void DrawFinalPass::Draw(RenderScene& scene) DrawModelRenderQueuesWithShieldCheck(scene.Jobs.TransparentObjects, scene); //might need changing GLERROR("Shielded Transparent objects"); + //Generate blur texture. + m_FullBlurredTexture = blurHUDPass->Draw(m_SceneTexture, scene); + //Combine nonblur and blur texture + m_CombinedTexture = blurHUDPass->CombineTextures(m_SceneTexture, m_FullBlurredTexture); + //Draw Transparen objects //state->BlendFunc(GL_ONE, GL_ONE); //state->StencilFunc(GL_EQUAL, 1, 0xFF); diff --git a/src/Engine/Rendering/Renderer.cpp b/src/Engine/Rendering/Renderer.cpp index 7e11f3b2..f58e6208 100644 --- a/src/Engine/Rendering/Renderer.cpp +++ b/src/Engine/Rendering/Renderer.cpp @@ -110,7 +110,7 @@ void Renderer::Draw(RenderFrame& frame) { GLERROR("PRE"); glBindFramebuffer(GL_FRAMEBUFFER, 0); - ImGui::Combo("Draw textures", &m_DebugTextureToDraw, "Final\0Scene\0Bloom\0Gaussian\0Picking\0Ambient Occlusion"); + ImGui::Combo("Draw textures", &m_DebugTextureToDraw, "Final\0Scene\0Bloom\0Gaussian\0Picking\0Ambient Occlusion\0Combined Scene Texture\0Full Blurred Texture"); ImGui::Combo("CubeMap", &m_CubeMapTexture, "Nevada(512)\0Sky(1024)"); if(m_CubeMapTexture == 0) { m_CubeMapPass->LoadTextures("Nevada"); @@ -133,6 +133,7 @@ void Renderer::Draw(RenderFrame& frame) m_DrawFinalPass->ClearBuffer(); m_DrawBloomPass->ClearBuffer(); m_SSAOPass->ClearBuffer(); + m_BlurHUDPass->ClearBuffer(); PerformanceTimer::StopTimer("Renderer-ClearBuffers"); GLERROR("ClearBuffers"); for (auto scene : frame.RenderScenes) { @@ -158,7 +159,7 @@ void Renderer::Draw(RenderFrame& frame) m_LightCullingPass->CullLights(*scene); GLERROR("LightCulling"); PerformanceTimer::StartTimerAndStopPrevious("Renderer-Draw Geometry+Light"); - m_DrawFinalPass->Draw(*scene); + m_DrawFinalPass->Draw(*scene, m_BlurHUDPass); GLERROR("Draw Geometry+Light"); //m_DrawScenePass->Draw(*scene); @@ -194,6 +195,12 @@ void Renderer::Draw(RenderFrame& frame) if (m_DebugTextureToDraw == 5) { m_DrawScreenQuadPass->Draw(m_SSAOPass->SSAOTexture()); } + if (m_DebugTextureToDraw == 6) { + m_DrawScreenQuadPass->Draw(m_DrawFinalPass->CombinedSceneTexture()); + } + if (m_DebugTextureToDraw == 7) { + m_DrawScreenQuadPass->Draw(m_DrawFinalPass->FullBlurredTexture()); + } PerformanceTimer::StopTimer("Renderer-Misc Debug Draws"); PerformanceTimer::StartTimer("Renderer-ImGuiRenderPass"); @@ -244,9 +251,10 @@ void Renderer::InitializeRenderPasses() m_LightCullingPass = new LightCullingPass(this); m_CubeMapPass = new CubeMapPass(this); m_SSAOPass = new SSAOPass(this, m_Config); + m_BlurHUDPass = new BlurHUD(this); m_DrawFinalPass = new DrawFinalPass(this, m_LightCullingPass, m_CubeMapPass, m_SSAOPass); m_DrawScreenQuadPass = new DrawScreenQuadPass(this); m_DrawBloomPass = new DrawBloomPass(this, m_Config); m_DrawColorCorrectionPass = new DrawColorCorrectionPass(this); - + } \ No newline at end of file From 6b7f598c4d19b1a3c492feef97d1857ce97f4cef Mon Sep 17 00:00:00 2001 From: Tleety Date: Mon, 7 Mar 2016 23:35:58 +0100 Subject: [PATCH 26/68] WIP --- include/Engine/Rendering/Renderer.h | 2 ++ src/Engine/Rendering/DrawFinalPass.cpp | 2 +- src/Engine/Rendering/Renderer.cpp | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/Engine/Rendering/Renderer.h b/include/Engine/Rendering/Renderer.h index 9983bae9..37385875 100644 --- a/include/Engine/Rendering/Renderer.h +++ b/include/Engine/Rendering/Renderer.h @@ -57,6 +57,8 @@ private: Texture* m_ErrorTexture; Texture* m_WhiteTexture; + GLuint m_CombinedTexture; + Model* m_ScreenQuad; Model* m_UnitQuad; Model* m_UnitSphere; diff --git a/src/Engine/Rendering/DrawFinalPass.cpp b/src/Engine/Rendering/DrawFinalPass.cpp index b9aa8664..ea6bce1d 100644 --- a/src/Engine/Rendering/DrawFinalPass.cpp +++ b/src/Engine/Rendering/DrawFinalPass.cpp @@ -283,7 +283,6 @@ void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass) //Generate blur texture. m_FullBlurredTexture = blurHUDPass->Draw(m_SceneTexture, scene); //Combine nonblur and blur texture - m_CombinedTexture = blurHUDPass->CombineTextures(m_SceneTexture, m_FullBlurredTexture); //Draw Transparen objects //state->BlendFunc(GL_ONE, GL_ONE); @@ -292,6 +291,7 @@ void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass) GLERROR("TransparentObjects"); //state->BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); DrawSprites(scene.Jobs.SpriteJob, scene); + GLERROR("SpriteJobs"); delete state; diff --git a/src/Engine/Rendering/Renderer.cpp b/src/Engine/Rendering/Renderer.cpp index f58e6208..63a89e9e 100644 --- a/src/Engine/Rendering/Renderer.cpp +++ b/src/Engine/Rendering/Renderer.cpp @@ -162,6 +162,7 @@ void Renderer::Draw(RenderFrame& frame) m_DrawFinalPass->Draw(*scene, m_BlurHUDPass); GLERROR("Draw Geometry+Light"); //m_DrawScenePass->Draw(*scene); + m_CombinedTexture = m_BlurHUDPass->CombineTextures(m_DrawFinalPass->SceneTexture(), m_DrawFinalPass->FullBlurredTexture()); PerformanceTimer::StartTimerAndStopPrevious("Renderer-Draw Text"); m_TextPass->Draw(*scene, *m_DrawFinalPass->FinalPassFrameBuffer()); From 01f29b6d4e34749a36574812ba2daced73e0de2c Mon Sep 17 00:00:00 2001 From: Tleety Date: Tue, 8 Mar 2016 11:14:09 +0100 Subject: [PATCH 27/68] Blur behind buttons/sprites should now be working as intended. --- include/Engine/Rendering/BlurHUD.h | 1 + include/Engine/Rendering/RenderQueue.h | 1 + include/Engine/Rendering/Renderer.h | 2 - .../Schema/Entities/QualityAssurance.xml | 394 +- .../Schema/Entities/aaaatestremoveme.xml | 5787 ++++++++++++++++- resources/Shaders/CombineTexture.frag.glsl | 16 +- resources/Shaders/Gaussian_horiz.frag.glsl | 12 +- resources/Shaders/Gaussian_vert.frag.glsl | 12 +- resources/Shaders/Sprite.frag.glsl | 3 +- src/Engine/Rendering/BlurHUD.cpp | 54 +- src/Engine/Rendering/DrawFinalPass.cpp | 19 +- src/Engine/Rendering/RenderSystem.cpp | 1 + src/Engine/Rendering/Renderer.cpp | 1 - 13 files changed, 6053 insertions(+), 250 deletions(-) diff --git a/include/Engine/Rendering/BlurHUD.h b/include/Engine/Rendering/BlurHUD.h index 2d01673e..ca3b7270 100644 --- a/include/Engine/Rendering/BlurHUD.h +++ b/include/Engine/Rendering/BlurHUD.h @@ -48,6 +48,7 @@ private: //const LightCullingPass* m_LightCullingPass int m_Iterations = 3; int m_Quality = 0; + float m_BlurQuality = 2.f; GLuint m_GaussianTexture_horiz = 0; GLuint m_GaussianTexture_vert = 0; diff --git a/include/Engine/Rendering/RenderQueue.h b/include/Engine/Rendering/RenderQueue.h index e3c46e85..f183b021 100644 --- a/include/Engine/Rendering/RenderQueue.h +++ b/include/Engine/Rendering/RenderQueue.h @@ -33,6 +33,7 @@ struct RenderScene Rectangle Viewport; bool ClearDepth = false; + bool ShouldBlur = false; glm::vec4 AmbientColor; void Clear() diff --git a/include/Engine/Rendering/Renderer.h b/include/Engine/Rendering/Renderer.h index 37385875..9983bae9 100644 --- a/include/Engine/Rendering/Renderer.h +++ b/include/Engine/Rendering/Renderer.h @@ -57,8 +57,6 @@ private: Texture* m_ErrorTexture; Texture* m_WhiteTexture; - GLuint m_CombinedTexture; - Model* m_ScreenQuad; Model* m_UnitQuad; Model* m_UnitSphere; diff --git a/resources/Schema/Entities/QualityAssurance.xml b/resources/Schema/Entities/QualityAssurance.xml index 04cc288a..7a8f657f 100644 --- a/resources/Schema/Entities/QualityAssurance.xml +++ b/resources/Schema/Entities/QualityAssurance.xml @@ -3,7 +3,7 @@ - 4.7473226580121377 + 0.8333591884066891 @@ -11,6 +11,104 @@ + + + + + + + + + + + + + + + Models/Characters/Assault/AssaultAnimated.mesh + + + + + + + + + + + + + + Models/Characters/Assault/AssaultAnimated.mesh + + + + + + + + + Animation test + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + + + + + + + + + + 0.5 + + + + + + + + + + + + + + Models/Characters/Assault/AssaultAnimated.mesh + + + + + + + + + + + + + @@ -43,7 +141,7 @@ - + @@ -96,115 +194,11 @@ - + - - - - - - - - - - - - - - - - - Models/Characters/Assault/AssaultAnimated.mesh - - - - - - - - - - - - - - - - Models/Characters/Assault/AssaultAnimated.mesh - - - - - - - - - Animation test - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - Models/Core/UnitCylinder.mesh - - - - - - - - - - - - - - - - - - - - 0.5 - - - - - - - - - - - - - - - - Models/Characters/Assault/AssaultAnimated.mesh - - - - - - - - - - - - - @@ -228,7 +222,7 @@ - + @@ -292,7 +286,7 @@ - + @@ -324,7 +318,7 @@ - + @@ -395,15 +389,15 @@ - - - Schema/Entities/Player.xml - + + + Schema/Entities/Player.xml + @@ -465,15 +459,15 @@ - - - Schema/Entities/Player.xml - + + + Schema/Entities/Player.xml + @@ -619,8 +613,8 @@ - + @@ -674,7 +668,7 @@ - + @@ -721,7 +715,7 @@ - + @@ -781,7 +775,7 @@ - + @@ -828,7 +822,7 @@ - + @@ -874,7 +868,7 @@ - + @@ -921,7 +915,7 @@ - + @@ -968,7 +962,7 @@ - + @@ -1023,22 +1017,22 @@ + 15 - 15 + + + + + Models/Core/UnitCube.mesh true - - - - - @@ -1054,8 +1048,8 @@ - + @@ -1078,13 +1072,13 @@ 1 + Models/Core/UnitCube.mesh true - @@ -1100,8 +1094,8 @@ - + @@ -1122,13 +1116,13 @@ 2 + Models/Core/UnitCube.mesh true - @@ -1144,8 +1138,8 @@ - + @@ -1168,13 +1162,13 @@ 3 + Models/Core/UnitCube.mesh true - @@ -1190,8 +1184,8 @@ - + @@ -1212,23 +1206,23 @@ + -15 - -15 4 + + + + + Models/Core/UnitCube.mesh true - - - - - @@ -1244,8 +1238,8 @@ - + @@ -1285,8 +1279,8 @@ - + @@ -1382,7 +1376,7 @@ - + @@ -1391,7 +1385,7 @@ true - 2.5396116058983438 + 0.66694876855613217 3.7999999523162842 true @@ -1438,7 +1432,7 @@ - + @@ -1447,7 +1441,7 @@ - 1.5396208215609732 + 2.0168132214141465 Models/Characters/Assault/AssaultTPose.mesh @@ -1490,22 +1484,20 @@ - + - - - + true - 1.5396208215609732 + 2.0168132214141465 true @@ -1550,7 +1542,7 @@ - + @@ -1560,7 +1552,7 @@ true - 4.4522528839264339 + 6.6002622626005092 10 3 @@ -1608,7 +1600,7 @@ - + @@ -1618,7 +1610,7 @@ true - 3.2362842141074992 + 0.1169253453956216 true 5 true @@ -1655,8 +1647,8 @@ - + @@ -1701,6 +1693,11 @@ + + + + + @@ -1711,11 +1708,6 @@ 5 - - - - - @@ -1738,8 +1730,8 @@ - + @@ -1777,8 +1769,8 @@ - + @@ -1790,8 +1782,8 @@ - + @@ -1801,7 +1793,7 @@ true - 2.5396116058983438 + 0.66694876855613217 3.7999999523162842 true @@ -1845,9 +1837,7 @@ - - - + @@ -1915,8 +1905,8 @@ - + @@ -1991,20 +1981,20 @@ - - 2 - + + 2 + Textures/Core/UnitHexagon_Rotated.png - + @@ -2025,20 +2015,20 @@ - - 3 - + + 3 + Textures/Core/UnitHexagon_Rotated.png - + @@ -2059,21 +2049,21 @@ - - 4 - 1 + + 4 + Textures/Core/UnitHexagon_Rotated.png - + @@ -2094,20 +2084,20 @@ - - 1 - + + 1 + Textures/Core/UnitHexagon_Rotated.png - + @@ -2128,19 +2118,19 @@ - 1 + Textures/Core/UnitHexagon_Rotated.png - + @@ -2173,7 +2163,7 @@ - + @@ -2374,7 +2364,9 @@ Textures/Core/ErrorTexture.png + true + @@ -2387,6 +2379,7 @@ Textures/Core/White.png + false @@ -2400,6 +2393,7 @@ 1920x1080 Fonts/DroidSans.ttf,64 + false @@ -2416,6 +2410,7 @@ Textures/Core/White.png + false @@ -2429,6 +2424,7 @@ 1280x720 Fonts/DroidSans.ttf,64 + false @@ -2540,20 +2536,20 @@ + + + + + 2 Models/Weapons/Blue/AssaultWeaponBlue.mesh - - - - - + - diff --git a/resources/Schema/Entities/aaaatestremoveme.xml b/resources/Schema/Entities/aaaatestremoveme.xml index 8da40b58..d44e4883 100644 --- a/resources/Schema/Entities/aaaatestremoveme.xml +++ b/resources/Schema/Entities/aaaatestremoveme.xml @@ -2,37 +2,5794 @@ + + 8.2999489298303502 + 15 + - + - - Models/Core/Unithexagon.mesh - - - + + + + + + Models/Props/Ground.mesh + + + + + + + + + Models/Props/Highground2.mesh + + + + + + + + + + + + Models/Props/Highground3.mesh + + + + + + + + + + Models/Props/Highground4.mesh + + + + + + + + + + Models/Props/Highground1.mesh + + + + + + + + + + Models/Props/Highground2.mesh + + + + + + + + + + Models/Props/Highground1.mesh + + + + + + + + + + + + Models/Props/Highground5.mesh + + + + + + + + + + + Models/Props/Highground6.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallTop.mesh + + + + + + + + + Models/Props/Walls/SciFiWallBig.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallMedium.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallSmall1.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallSmall2.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallBig.mesh + + + + + + + + + + + + Models/Props/Walls/SciFiWallMedium.mesh + + + + + + + + + + + + Models/Props/Walls/SciFiWallSmall3.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallSmall4.mesh + + + + + + + + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar1Blue.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar1Red.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar3Blue.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar1Blue.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar1Red.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar3Red.mesh + + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall4.mesh + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall4.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall4.mesh + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + Models/Props/Walls/SmallWall2.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + Models/Props/Walls/SmallWall4.mesh + + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Bridges/WoodenBridge.mesh + + + + + + + + + + + + + + Models/Props/Bridges/WoodenBridge.mesh + + + + + + + + + + + + + + Models/Props/Bridges/WoodenBridge.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + + Models/Props/Bridges/WoodenBridge.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + + Models/Core/UnitPlane.mesh + + true + + + + + + + + + + + + + Models/Core/UnitPlane.mesh + + true + + + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + + Models/Props/Flora/TreeLog.mesh + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + - + - + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + + + + + Schema/Entities/Player.xml + - + - + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + - + - - 2.2000000476837158 - - + + + + + 10 + + + + + + + + + + 10 + + + + + + + + + + + + + 1 + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 2 + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointRed.mesh + + + + + + + + + + + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 3 + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 1.5498908015879351 + 1 + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointBlue.mesh + + + + + + + + + + + + + 4 + + + + + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + + + + + + + + Schema/Entities/PlayerRed.xml + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + + 0.049999997019767761 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + 4 + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + 3 + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + 2 + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + 0.10332605343919568 + + + + 1 + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + + + + + + + 7 + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + Play + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + Option + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + Credits + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + Quit + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/UnitRaptor.png + + + + PickClass + 1 + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + PickClass + 2 + + + + + + + + + + + + + Textures/Test/aM4ME4GR.png + + + + PickClass + 3 + + + + + + + + + + + + + + + diff --git a/resources/Shaders/CombineTexture.frag.glsl b/resources/Shaders/CombineTexture.frag.glsl index 9d6a71c2..fd4acaac 100644 --- a/resources/Shaders/CombineTexture.frag.glsl +++ b/resources/Shaders/CombineTexture.frag.glsl @@ -1,14 +1,15 @@ #version 430 -uniform sampler2D Texture0; -uniform sampler2D Texture1; +layout (binding = 0) uniform sampler2D Texture0; +layout (binding = 1)uniform sampler2D Texture1; in VertexData{ vec2 TextureCoordinate; }Input; -out vec4 fragmentColor; +out vec4 sceneColor; +out vec4 bloomColor; void main() { @@ -17,9 +18,14 @@ void main() float texel1_total = (texel1.r + texel1.g + texel1.b) * texel1.a; texel1_total = ceil(clamp(texel1_total, 0, 1)); - vec4 final = texel0 * texel1_total + texel1 * (1 - texel1_total); + vec4 result0 = texel0 * (1.0 - texel1_total); + vec4 result1 = texel1 * texel1_total; + + //vec4 final = texel1 * texel1_total + texel0 * (1.0 - texel1_total); + //float res = 1.0 - texel1_total; //vec4 final = vec4(texel1_total, texel1_total, texel1_total, 1.0); - fragmentColor = final; + sceneColor = result1; + bloomColor = vec4(0.0, 0.0, 0.0, 0.0); } diff --git a/resources/Shaders/Gaussian_horiz.frag.glsl b/resources/Shaders/Gaussian_horiz.frag.glsl index 6a9572c2..8a306ec2 100644 --- a/resources/Shaders/Gaussian_horiz.frag.glsl +++ b/resources/Shaders/Gaussian_horiz.frag.glsl @@ -14,11 +14,15 @@ uniform float weight[5] = float[](0.227027, 0.1945946, 0.1216216, 0.054054, 0.01 void main() { vec2 tex_offset = 1.0 / textureSize2D(Texture, 0); - vec3 result = texture(Texture, Input.TextureCoordinate).rgb * weight[0]; - + vec3 center = texture(Texture, Input.TextureCoordinate).rgb; + vec3 result = center * weight[0]; for(int i = 1; i < 5; ++i) { - result += texture(Texture, Input.TextureCoordinate + vec2(tex_offset.x * i, 0.0)).rgb * weight[i]; - result += texture(Texture, Input.TextureCoordinate - vec2(tex_offset.x * i, 0.0)).rgb * weight[i]; + vec4 eastFragments = texture(Texture, Input.TextureCoordinate + vec2(tex_offset.x * i, 0.0)); + vec4 westFragments = texture(Texture, Input.TextureCoordinate - vec2(tex_offset.x * i, 0.0)); + result += eastFragments.rgb * weight[i] * eastFragments.a; + result += westFragments.rgb * weight[i] * westFragments.a; + result += center * weight[i] * (1.0 - westFragments.a); + result += center * weight[i] * (1.0 - eastFragments.a); } fragmentColor = vec4(result, 1.0); } \ No newline at end of file diff --git a/resources/Shaders/Gaussian_vert.frag.glsl b/resources/Shaders/Gaussian_vert.frag.glsl index 8b0e861a..921ba55a 100644 --- a/resources/Shaders/Gaussian_vert.frag.glsl +++ b/resources/Shaders/Gaussian_vert.frag.glsl @@ -14,11 +14,15 @@ uniform float weight[5] = float[](0.227027, 0.1945946, 0.1216216, 0.054054, 0.01 void main() { vec2 tex_offset = 1.0 / textureSize2D(Texture, 0); - vec3 result = texture(Texture, Input.TextureCoordinate).rgb * weight[0]; - + vec3 center = texture(Texture, Input.TextureCoordinate).rgb; + vec3 result = center * weight[0]; for(int i = 1; i < 5; ++i) { - result += texture(Texture, Input.TextureCoordinate + vec2(0.0, tex_offset.y * i)).rgb * weight[i]; - result += texture(Texture, Input.TextureCoordinate - vec2(0.0, tex_offset.y * i)).rgb * weight[i]; + vec4 northFragments = texture(Texture, Input.TextureCoordinate + vec2(0.0, tex_offset.y * i)); + vec4 southFragments = texture(Texture, Input.TextureCoordinate - vec2(0.0, tex_offset.y * i)); + result += northFragments.rgb * weight[i] * northFragments.a; + result += southFragments.rgb * weight[i] * southFragments.a; + result += center * weight[i] * (1.0 - northFragments.a); + result += center * weight[i] * (1.0 - southFragments.a); } fragmentColor = vec4(result, 1.0); } \ No newline at end of file diff --git a/resources/Shaders/Sprite.frag.glsl b/resources/Shaders/Sprite.frag.glsl index 754be6ac..266398da 100644 --- a/resources/Shaders/Sprite.frag.glsl +++ b/resources/Shaders/Sprite.frag.glsl @@ -35,7 +35,8 @@ void main() sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1)); //bloomColor = vec4(clamp((glowTexel.xyz*3) - 1.0, 0, 100), 1.0); - bloomColor = vec4(1.0, 1.0, 1.0, 0.0); + bloomColor = vec4(max(color_result.xyz - 1.0, 0.0), clamp(color_result.a, 0, 1)); + //bloomColor = vec4(1.0, 1.0, 1.0, 0.0); } diff --git a/src/Engine/Rendering/BlurHUD.cpp b/src/Engine/Rendering/BlurHUD.cpp index bd9ef901..4787510b 100644 --- a/src/Engine/Rendering/BlurHUD.cpp +++ b/src/Engine/Rendering/BlurHUD.cpp @@ -44,7 +44,8 @@ void BlurHUD::InitializeShaderPrograms() m_CombineTexturesProgram->AddShader(std::shared_ptr(new VertexShader("Shaders/CombineTexture.vert.glsl"))); m_CombineTexturesProgram->AddShader(std::shared_ptr(new FragmentShader("Shaders/CombineTexture.frag.glsl"))); m_CombineTexturesProgram->Compile(); - m_CombineTexturesProgram->BindFragDataLocation(0, "fragmentColor"); + m_CombineTexturesProgram->BindFragDataLocation(0, "sceneColor"); + m_CombineTexturesProgram->BindFragDataLocation(1, "bloomColor"); m_CombineTexturesProgram->Link(); } GLERROR("Creating DepthFill program"); @@ -53,11 +54,13 @@ void BlurHUD::InitializeShaderPrograms() void BlurHUD::InitializeBuffers() { glm::vec2 res = glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glm::vec2 res2 = glm::vec2(m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); + CommonFunctions::GenerateTexture(&m_DepthStencil_horiz, GL_CLAMP_TO_BORDER, GL_NEAREST, - res, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8); - CommonFunctions::GenerateTexture(&m_GaussianTexture_horiz, GL_CLAMP_TO_EDGE, GL_LINEAR, - res, GL_RGB16F, GL_RGB, GL_FLOAT); + res2, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8); + CommonFunctions::GenerateTexture(&m_GaussianTexture_horiz, GL_CLAMP_TO_EDGE, GL_NEAREST, + res2, GL_RGBA16F, GL_RGBA, GL_FLOAT); if (m_GaussianFrameBuffer_horiz.GetHandle() == 0) { m_GaussianFrameBuffer_horiz.AddResource(std::shared_ptr(new Texture2D(&m_DepthStencil_horiz, GL_DEPTH_STENCIL_ATTACHMENT))); @@ -66,9 +69,9 @@ void BlurHUD::InitializeBuffers() m_GaussianFrameBuffer_horiz.Generate(); CommonFunctions::GenerateTexture(&m_DepthStencil_vert, GL_CLAMP_TO_BORDER, GL_NEAREST, - res, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8); - CommonFunctions::GenerateTexture(&m_GaussianTexture_vert, GL_CLAMP_TO_EDGE, GL_LINEAR, - res, GL_RGB16F, GL_RGB, GL_FLOAT); + res2, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8); + CommonFunctions::GenerateTexture(&m_GaussianTexture_vert, GL_CLAMP_TO_EDGE, GL_NEAREST, + res2, GL_RGBA16F, GL_RGBA, GL_FLOAT); if (m_GaussianFrameBuffer_vert.GetHandle() == 0) { m_GaussianFrameBuffer_vert.AddResource(std::shared_ptr(new Texture2D(&m_DepthStencil_vert, GL_DEPTH_STENCIL_ATTACHMENT))); @@ -92,11 +95,15 @@ void BlurHUD::ClearBuffer() m_GaussianFrameBuffer_horiz.Bind(); glClearColor(0.f, 0.f, 0.f, 0.f); glClearStencil(0x00); + glStencilMask(~0); + glDisable(GL_SCISSOR_TEST); glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); m_GaussianFrameBuffer_horiz.Unbind(); m_GaussianFrameBuffer_vert.Bind(); glClearColor(0.f, 0.f, 0.f, 0.f); glClearStencil(0x00); + glStencilMask(~0); + glDisable(GL_SCISSOR_TEST); glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); m_GaussianFrameBuffer_vert.Unbind(); @@ -114,7 +121,10 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) FillStencil(scene); - DrawBloomPassState state; + RenderState state; + state.Disable(GL_BLEND); + state.Disable(GL_DEPTH_TEST); + state.Disable(GL_CULL_FACE); GLuint shaderHandle_horiz = m_GaussianProgram_horiz->GetHandle(); GLuint shaderHandle_vert = m_GaussianProgram_vert->GetHandle(); @@ -128,6 +138,10 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) state.StencilFunc(GL_EQUAL, 1, 0xFF); state.StencilMask(0x00); state.DepthMask(GL_FALSE); + state.Enable(GL_SCISSOR_TEST); + glViewport(0, 0, m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); + glScissor(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + m_GaussianProgram_horiz->Bind(); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture); @@ -144,6 +158,8 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) state.StencilFunc(GL_EQUAL, 1, 0xFF); state.StencilMask(0x00); state.DepthMask(GL_FALSE); + glViewport(0, 0, m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); + glScissor(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); m_GaussianProgram_vert->Bind(); glActiveTexture(GL_TEXTURE0); @@ -162,6 +178,8 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) state.StencilFunc(GL_EQUAL, 1, 0xFF); state.StencilMask(0x00); state.DepthMask(GL_FALSE); + glViewport(0, 0, m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); + glScissor(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); m_GaussianProgram_horiz->Bind(); glActiveTexture(GL_TEXTURE0); @@ -182,6 +200,8 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) state.StencilFunc(GL_EQUAL, 1, 0xFF); state.StencilMask(0x00); state.DepthMask(GL_FALSE); + glViewport(0, 0, m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); + glScissor(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); m_GaussianProgram_vert->Bind(); glActiveTexture(GL_TEXTURE0); @@ -192,6 +212,9 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) , GL_UNSIGNED_INT, 0, m_ScreenQuad->MaterialGroups()[0].material->StartIndex); GLERROR("DrawBloomPass::Draw: END"); + glViewport(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glScissor(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + return m_GaussianTexture_vert; } @@ -199,9 +222,9 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) void BlurHUD::OnWindowResize() { - CommonFunctions::GenerateTexture(&m_GaussianTexture_vert, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height), GL_RGB16F, GL_RGB, GL_FLOAT); + CommonFunctions::GenerateTexture(&m_GaussianTexture_vert, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality), GL_RGB16F, GL_RGB, GL_FLOAT); m_GaussianFrameBuffer_vert.Generate(); - CommonFunctions::GenerateTexture(&m_GaussianTexture_horiz, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height), GL_RGB16F, GL_RGB, GL_FLOAT); + CommonFunctions::GenerateTexture(&m_GaussianTexture_horiz, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality), GL_RGB16F, GL_RGB, GL_FLOAT); m_GaussianFrameBuffer_horiz.Generate(); } @@ -216,6 +239,7 @@ void BlurHUD::FillStencil(RenderScene& scene) state.StencilFunc(GL_ALWAYS, 1, 0xFF); state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); state.StencilMask(0xFF); + glViewport(0, 0, m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); m_FillDepthStencilProgram->Bind(); @@ -254,16 +278,16 @@ void BlurHUD::FillStencil(RenderScene& scene) glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, spriteJob->Model->ElementBuffer); glDrawElements(GL_TRIANGLES, spriteJob->EndIndex - spriteJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(spriteJob->StartIndex*sizeof(unsigned int))); } - + glViewport(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); } //Texture 1 will be used if texture 2 is black at that texel, else texture 2 is used. GLuint BlurHUD::CombineTextures(GLuint texture1, GLuint texture2) { - RenderState state; - state.BindFramebuffer(m_CombinedTextureBuffer.GetHandle()); - state.Disable(GL_DEPTH_TEST); - state.Disable(GL_STENCIL_TEST); + //RenderState state; + //state.BindFramebuffer(m_CombinedTextureBuffer.GetHandle()); + //state.Disable(GL_DEPTH_TEST); + //state.Disable(GL_STENCIL_TEST); m_CombineTexturesProgram->Bind(); diff --git a/src/Engine/Rendering/DrawFinalPass.cpp b/src/Engine/Rendering/DrawFinalPass.cpp index ea6bce1d..edde3ef5 100644 --- a/src/Engine/Rendering/DrawFinalPass.cpp +++ b/src/Engine/Rendering/DrawFinalPass.cpp @@ -281,20 +281,31 @@ void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass) GLERROR("Shielded Transparent objects"); //Generate blur texture. - m_FullBlurredTexture = blurHUDPass->Draw(m_SceneTexture, scene); - //Combine nonblur and blur texture + delete state; + if (scene.ShouldBlur) { + //This needs to be drawn only when the full scene is being renderd, and then let be, otherwise sprite and other shit will show on it. + m_FullBlurredTexture = blurHUDPass->Draw(m_SceneTexture, scene); + } + DrawFinalPassState* stateSprite = new DrawFinalPassState(m_FinalPassFrameBuffer.GetHandle()); + if(scene.ShouldBlur) { + //Combine nonblur and blur texture + stateSprite->Disable(GL_DEPTH_TEST); + stateSprite->Disable(GL_STENCIL_TEST); + m_CombinedTexture = blurHUDPass->CombineTextures(m_SceneTexture, m_FullBlurredTexture); + + } //Draw Transparen objects //state->BlendFunc(GL_ONE, GL_ONE); //state->StencilFunc(GL_EQUAL, 1, 0xFF); //DrawModelRenderQueues(scene.Jobs.TransparentObjects, scene); GLERROR("TransparentObjects"); //state->BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + stateSprite->Enable(GL_DEPTH_TEST); DrawSprites(scene.Jobs.SpriteJob, scene); - GLERROR("SpriteJobs"); - delete state; + delete stateSprite; GLERROR("END"); } diff --git a/src/Engine/Rendering/RenderSystem.cpp b/src/Engine/Rendering/RenderSystem.cpp index a1f00c88..114f432b 100644 --- a/src/Engine/Rendering/RenderSystem.cpp +++ b/src/Engine/Rendering/RenderSystem.cpp @@ -435,6 +435,7 @@ void RenderSystem::Update(double dt) } RenderScene scene; + scene.ShouldBlur = true; scene.Camera = m_Camera; scene.Viewport = Rectangle(1280, 720); diff --git a/src/Engine/Rendering/Renderer.cpp b/src/Engine/Rendering/Renderer.cpp index 63a89e9e..f58e6208 100644 --- a/src/Engine/Rendering/Renderer.cpp +++ b/src/Engine/Rendering/Renderer.cpp @@ -162,7 +162,6 @@ void Renderer::Draw(RenderFrame& frame) m_DrawFinalPass->Draw(*scene, m_BlurHUDPass); GLERROR("Draw Geometry+Light"); //m_DrawScenePass->Draw(*scene); - m_CombinedTexture = m_BlurHUDPass->CombineTextures(m_DrawFinalPass->SceneTexture(), m_DrawFinalPass->FullBlurredTexture()); PerformanceTimer::StartTimerAndStopPrevious("Renderer-Draw Text"); m_TextPass->Draw(*scene, *m_DrawFinalPass->FinalPassFrameBuffer()); From 13aa476656b37d135b6d5eff064f5b6b6902fc76 Mon Sep 17 00:00:00 2001 From: Teejoon Date: Tue, 8 Mar 2016 11:16:20 +0100 Subject: [PATCH 28/68] Sets most texture to 0 when variable is initialized --- assets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets b/assets index 3a7f7829..8ca6eba0 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 3a7f7829586100fc56cc1ae4d61d6ff2d3ce1770 +Subproject commit 8ca6eba0f329b83f7d5fba87fca74cb18eeb0bd0 From e902110d4bec9226f30c24ce0f681d882eacdded Mon Sep 17 00:00:00 2001 From: Teejoon Date: Tue, 8 Mar 2016 11:16:56 +0100 Subject: [PATCH 29/68] Commiting the files since they didn't get commited --- include/Engine/Rendering/CubeMapPass.h | 2 +- include/Engine/Rendering/DrawFinalPass.h | 10 +++++----- include/Engine/Rendering/PickingPass.h | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/Engine/Rendering/CubeMapPass.h b/include/Engine/Rendering/CubeMapPass.h index 3cda8cad..02e8e7ba 100644 --- a/include/Engine/Rendering/CubeMapPass.h +++ b/include/Engine/Rendering/CubeMapPass.h @@ -15,7 +15,7 @@ public: void GenerateCubeMapTexture(); //GLuint CubeMapTexture() const { return m_CubeMapTexture; } - GLuint m_CubeMapTexture = -1; + GLuint m_CubeMapTexture = 0; private: IRenderer* m_Renderer; diff --git a/include/Engine/Rendering/DrawFinalPass.h b/include/Engine/Rendering/DrawFinalPass.h index b7ba96ad..7ff79a29 100644 --- a/include/Engine/Rendering/DrawFinalPass.h +++ b/include/Engine/Rendering/DrawFinalPass.h @@ -52,11 +52,11 @@ private: FrameBuffer m_FinalPassFrameBuffer; FrameBuffer m_ShieldDepthFrameBuffer; - GLuint m_BloomTexture; - GLuint m_SceneTexture; - GLuint m_DepthBuffer; - GLuint m_ShieldBuffer; - GLuint m_CubeMapTexture; + GLuint m_BloomTexture = 0; + GLuint m_SceneTexture = 0; + GLuint m_DepthBuffer = 0; + GLuint m_ShieldBuffer = 0; + GLuint m_CubeMapTexture = 0; //maqke this component based i guess? GLuint m_ShieldPixelRate = 16; diff --git a/include/Engine/Rendering/PickingPass.h b/include/Engine/Rendering/PickingPass.h index df99a615..14ce26ab 100644 --- a/include/Engine/Rendering/PickingPass.h +++ b/include/Engine/Rendering/PickingPass.h @@ -52,8 +52,8 @@ private: std::unordered_map m_PickingColorsToEntity; - GLuint m_PickingTexture; - GLuint m_DepthBuffer; + GLuint m_PickingTexture = 0; + GLuint m_DepthBuffer = 0; FrameBuffer m_PickingBuffer; From 2ba245368b6ecad9e4f83905bf77aa40a8c66be9 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Tue, 8 Mar 2016 11:21:40 +0100 Subject: [PATCH 30/68] Improved movement animaitons Added a SetBlendWeight event that sets the weight for all nodes with a name. --- .../Engine/Input/FirstPersonInputController.h | 57 +++-- include/Engine/Rendering/AnimationSystem.h | 9 + include/Engine/Rendering/AutoBlendQueue.h | 2 + include/Engine/Rendering/BlendTree.h | 9 +- .../Engine/Rendering/EAutoAnimationBlend.h | 1 - include/Engine/Rendering/ESetBlendWeight.h | 20 ++ resources/Schema/Entities/DashEffect.xml | 11 +- resources/Schema/Entities/Player.xml | 14 +- src/Engine/Rendering/AnimationSystem.cpp | 197 ++++++++++++++---- src/Engine/Rendering/AutoBlendQueue.cpp | 3 +- src/Engine/Rendering/BlendTree.cpp | 57 ++++- src/Engine/Rendering/Skeleton.cpp | 2 + src/Game/Systems/PlayerMovementSystem.cpp | 30 ++- 13 files changed, 331 insertions(+), 81 deletions(-) create mode 100644 include/Engine/Rendering/ESetBlendWeight.h diff --git a/include/Engine/Input/FirstPersonInputController.h b/include/Engine/Input/FirstPersonInputController.h index 00f36ac7..d9b0d3e8 100644 --- a/include/Engine/Input/FirstPersonInputController.h +++ b/include/Engine/Input/FirstPersonInputController.h @@ -7,6 +7,7 @@ #include "../Game/Events/EDashAbility.h" #include "InputHandler.h" #include "Rendering/EAutoAnimationBlend.h" +#include "Rendering/ESetBlendWeight.h" template class FirstPersonInputController : public InputController @@ -45,7 +46,6 @@ protected: bool m_Crouching = false; //assault dash membervariables - needed to calculate the doubletap- and dashlogic double m_AssaultDashDoubleTapDeltaTime = 0.0; - double m_DashEffectResetTimer = 0.0; //i will let m_AssaultDashDoubleTapSensitivityTimer stay hardcoded, its not really a gamevariable (more an inputvariable), //and its very unlikely that someone wants to change that value const float m_AssaultDashDoubleTapSensitivityTimer = 0.25f; @@ -137,6 +137,7 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm } aeb.RootNode = playerModel; aeb.Start = true; + aeb.SingleLevelBlend = true; m_EventBroker->Publish(aeb); } else if (val < 0) { Events::AutoAnimationBlend aeb; @@ -148,6 +149,7 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm } aeb.RootNode = playerModel; aeb.Start = true; + aeb.SingleLevelBlend = true; aeb.Reverse = true; m_EventBroker->Publish(aeb); } else { @@ -169,6 +171,7 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm aeb.Duration = 0.1; aeb.NodeName = "Right"; aeb.RootNode = playerModel; + aeb.SingleLevelBlend = true; aeb.Start = true; m_EventBroker->Publish(aeb); } else if (val < 0) { @@ -176,6 +179,7 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm aeb.Duration = 0.1; aeb.NodeName = "Left"; aeb.RootNode = playerModel; + aeb.SingleLevelBlend = true; aeb.Start = true; m_EventBroker->Publish(aeb); } else { @@ -186,16 +190,28 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm } } - if (glm::length2(m_Movement) > 0) { - m_Movement = glm::normalize(m_Movement); + + + if (glm::length2(m_Movement) < 0.1f) { + if (m_PlayerEntity.Valid()) { + EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); + + if (playerModel.Valid()) { + Events::AutoAnimationBlend aeb; + aeb.Duration = 0.2; + aeb.NodeName = "Idle"; + aeb.RootNode = playerModel; + m_EventBroker->Publish(aeb); + } + } } else { if (m_PlayerEntity.Valid()) { EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); if (playerModel.Valid()) { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.1; - aeb.NodeName = "Idle"; + aeb.Duration = 0.2; + aeb.NodeName = "MovementBlend"; aeb.RootNode = playerModel; m_EventBroker->Publish(aeb); } @@ -203,6 +219,29 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm } } + + if (glm::length2(m_Movement) > 0) { + m_Movement = glm::normalize(m_Movement); + + if (m_PlayerEntity.Valid()) { + EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); + + if (playerModel.Valid()) { + glm::vec2 direction = glm::normalize(glm::vec2(m_Movement.x, m_Movement.z)); + + double weight = glm::abs(glm::dot(glm::vec2(1, 0), direction)); + LOG_INFO("Weight %f", weight); + Events::SetBlendWeight sbw; + sbw.NodeName = "MovementBlend"; + sbw.Weight = weight; + sbw.RootNode = playerModel; + m_EventBroker->Publish(sbw); + } + } + } + + + if (e.Command == "Forward" || e.Command == "Right") { if (e.Value != 0) { m_CurrentDirectionVector = e.Command == "Right" ? (e.Value > 0 ? "Right" : "Left") : (e.Value > 0 ? "Forward" : "Backward"); @@ -288,17 +327,10 @@ bool FirstPersonInputController::OnLockMouse(const Events::LockMou template void FirstPersonInputController::AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, double& assaultDashCoolDownTimer, EntityID playerID) { m_AssaultDashDoubleTapDeltaTime += dt; - m_DashEffectResetTimer += dt; assaultDashCoolDownTimer -= dt; //cooldown = assaultDashCoolDownMaxTimer sec, pretend the dash lasts 0.25 sec (for friction to do its work) if (assaultDashCoolDownTimer > (assaultDashCoolDownMaxTimer - 0.25f)) { m_PlayerIsDashing = true; - if (m_DashEffectResetTimer > 0.05) { - Events::DashAbility e; - e.Player = playerID; - m_EventBroker->Publish(e); - m_DashEffectResetTimer = 0.0; - } } else { m_PlayerIsDashing = false; } @@ -310,6 +342,7 @@ void FirstPersonInputController::AssaultDashCheck(double dt, bool assaultDashCoolDownTimer = assaultDashCoolDownMaxTimer; m_AssaultDashDoubleTapped = true; m_AssaultDashDoubleTapDeltaTime = 0.f; + Events::DashAbility e; e.Player = playerID; m_EventBroker->Publish(e); diff --git a/include/Engine/Rendering/AnimationSystem.h b/include/Engine/Rendering/AnimationSystem.h index 30c6fce5..0305e7c7 100644 --- a/include/Engine/Rendering/AnimationSystem.h +++ b/include/Engine/Rendering/AnimationSystem.h @@ -13,6 +13,8 @@ #include "../Core/EntityWrapper.h" #include "Rendering/AutoBlendQueue.h" #include "../Input/EInputCommand.h" +#include "../Core/EEntityDeleted.h" +#include "Rendering/ESetBlendWeight.h" #include "imgui/imgui.h" class AnimationSystem : public ImpureSystem @@ -28,6 +30,13 @@ private: EventRelay m_EAutoAnimationBlend; bool OnAutoAnimationBlend(Events::AutoAnimationBlend& e); + + EventRelay m_EEntityDeleted; + bool OnEntityDeleted(Events::EntityDeleted& e); + + EventRelay m_ESetBlendWeight; + bool OnSetBlendWeight(Events::SetBlendWeight& e); + std::unordered_map m_AutoBlendQueues; }; diff --git a/include/Engine/Rendering/AutoBlendQueue.h b/include/Engine/Rendering/AutoBlendQueue.h index 3c808408..71fe46d8 100644 --- a/include/Engine/Rendering/AutoBlendQueue.h +++ b/include/Engine/Rendering/AutoBlendQueue.h @@ -37,6 +37,8 @@ public: std::shared_ptr GetBlendTree(); AutoBlendQueue::AutoBlendJob& GetActiveBlendJob(); + + bool Empty() { return m_BlendQueue.empty(); } private: std::list m_BlendQueue; diff --git a/include/Engine/Rendering/BlendTree.h b/include/Engine/Rendering/BlendTree.h index 02f4a348..502a1cc9 100644 --- a/include/Engine/Rendering/BlendTree.h +++ b/include/Engine/Rendering/BlendTree.h @@ -75,7 +75,6 @@ public: std::vector GetFinalPose() { return m_FinalPose; } glm::mat4 GetBoneTransform(int boneID); bool IsValid() { return (m_Root == nullptr ? false : true); } - void PrintTree(); BlendTree::AutoBlendInfo AutoBlendStep(AutoBlendInfo blendInfo); @@ -84,16 +83,20 @@ public: EntityWrapper GetSubTreeRoot(std::string nodeName); + std::vector GetSingleLevelRoots(std::string name); + std::vector GetEntitesByName(std::string name); + + void SetWeightByName(std::string name, double weight); + private: Skeleton* m_Skeleton = nullptr; Node* m_Root = nullptr; std::vector m_FinalPose; std::map m_FinalBoneTransforms; - + std::vector FindNodesByName(std::string name); std::vector AccumulateFinalPose(); BlendTree::Node* FillTreeByName(Node* parentNode, std::string name, EntityWrapper parentEntity); - std::vector FindNodesByName(std::string name); void Blend(std::map& pose); }; diff --git a/include/Engine/Rendering/EAutoAnimationBlend.h b/include/Engine/Rendering/EAutoAnimationBlend.h index 29d3d612..86921f0f 100644 --- a/include/Engine/Rendering/EAutoAnimationBlend.h +++ b/include/Engine/Rendering/EAutoAnimationBlend.h @@ -18,7 +18,6 @@ struct AutoAnimationBlend : Event bool Reverse = false; bool Restart = false; bool SingleLevelBlend = false; - double Weight = -1.0; EntityWrapper AnimationEntity = EntityWrapper::Invalid; diff --git a/include/Engine/Rendering/ESetBlendWeight.h b/include/Engine/Rendering/ESetBlendWeight.h new file mode 100644 index 00000000..2a455d88 --- /dev/null +++ b/include/Engine/Rendering/ESetBlendWeight.h @@ -0,0 +1,20 @@ +#ifndef Events_SetBlendWeight_h__ +#define Events_SetBlendWeight_h__ + +#include "../Core/EventBroker.h" +#include "../Core/EntityWrapper.h" + +namespace Events +{ + +//Sets the blend weight for all nodes with "NodeName" +struct SetBlendWeight : Event +{ + EntityWrapper RootNode = EntityWrapper::Invalid; + std::string NodeName; + double Weight; +}; + +} + +#endif diff --git a/resources/Schema/Entities/DashEffect.xml b/resources/Schema/Entities/DashEffect.xml index 9dfdc14c..6f28784d 100644 --- a/resources/Schema/Entities/DashEffect.xml +++ b/resources/Schema/Entities/DashEffect.xml @@ -2,17 +2,12 @@ - 0.5 - - - 0 - 0.5 - - - + + + diff --git a/resources/Schema/Entities/Player.xml b/resources/Schema/Entities/Player.xml index 475acf78..16b7ccd1 100644 --- a/resources/Schema/Entities/Player.xml +++ b/resources/Schema/Entities/Player.xml @@ -875,7 +875,7 @@ RunF - 1 + 1.5 true @@ -899,7 +899,7 @@ StrafeRightF - 1 + 2 true @@ -911,7 +911,7 @@ StrafeLeftF - 1 + 2 true @@ -986,7 +986,7 @@ DashForwardF - 2 + 3 false @@ -998,7 +998,7 @@ DashBackwardF - 2 + 3 false @@ -1022,7 +1022,7 @@ DashLeftF - 2 + 3 false @@ -1034,7 +1034,7 @@ DashRightF - 2 + 3 false diff --git a/src/Engine/Rendering/AnimationSystem.cpp b/src/Engine/Rendering/AnimationSystem.cpp index 005778e7..be00a0f4 100644 --- a/src/Engine/Rendering/AnimationSystem.cpp +++ b/src/Engine/Rendering/AnimationSystem.cpp @@ -4,6 +4,8 @@ AnimationSystem::AnimationSystem(SystemParams params) : System(params) { EVENT_SUBSCRIBE_MEMBER(m_EAutoAnimationBlend, &AnimationSystem::OnAutoAnimationBlend); + EVENT_SUBSCRIBE_MEMBER(m_EEntityDeleted, &AnimationSystem::OnEntityDeleted); + EVENT_SUBSCRIBE_MEMBER(m_ESetBlendWeight, &AnimationSystem::OnSetBlendWeight); } void AnimationSystem::Update(double dt) @@ -122,16 +124,13 @@ void AnimationSystem::UpdateAnimations(double dt) } } - void AnimationSystem::UpdateWeights(double dt) { - for (auto& autoBlendQueue : m_AutoBlendQueues) { - - if(autoBlendQueue.second.HasActiveBlendJob()) { - AutoBlendQueue::AutoBlendJob& blendJob = autoBlendQueue.second.GetActiveBlendJob(); - - std::shared_ptr blendTree = autoBlendQueue.second.GetBlendTree(); + for (auto it = m_AutoBlendQueues.begin(); it != m_AutoBlendQueues.end(); ) { + if(it->second.HasActiveBlendJob()) { + AutoBlendQueue::AutoBlendJob& blendJob = it->second.GetActiveBlendJob(); + std::shared_ptr blendTree = it->second.GetBlendTree(); if (blendTree != nullptr) { if (blendJob.Duration != 0.0) { blendJob.BlendInfo.progress = glm::clamp(blendJob.CurrentTime / blendJob.Duration, 0.0, 1.0); @@ -140,10 +139,17 @@ void AnimationSystem::UpdateWeights(double dt) } blendJob.BlendInfo = blendTree->AutoBlendStep(blendJob.BlendInfo); + } else { + it = m_AutoBlendQueues.erase(it); + } + it++; + } else { + if (it->second.Empty()) { + it = m_AutoBlendQueues.erase(it); + } else { + it++; } - } - } } @@ -177,46 +183,163 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e) return false; } + EntityWrapper subTreeRoot; - EntityWrapper subTreeRoot = blendTree->GetSubTreeRoot(e.NodeName); + if (e.SingleLevelBlend) { + subTreeRoot = blendTree->GetSubTreeRoot(e.NodeName); - if (!subTreeRoot.Valid()) { - return false; - } + if (!subTreeRoot.Valid()) { + return false; + } - AutoBlendQueue::AutoBlendJob abj; - abj.AnimationEntity = e.AnimationEntity; - abj.CurrentTime = 0.0; - abj.Delay = e.Delay; - abj.Duration = e.Duration; - abj.RootNode = e.RootNode; + AutoBlendQueue::AutoBlendJob abj; + abj.AnimationEntity = e.AnimationEntity; + abj.CurrentTime = 0.0; + abj.Delay = e.Delay; + abj.Duration = e.Duration; + abj.RootNode = e.RootNode; - abj.BlendInfo.NodeName = e.NodeName; - abj.BlendInfo.progress = 0.0; - abj.BlendInfo.Start = e.Start; - abj.BlendInfo.SingleBlend = e.SingleLevelBlend; - abj.BlendInfo.Weight = e.Weight; + abj.BlendInfo.NodeName = e.NodeName; + abj.BlendInfo.progress = 0.0; + abj.BlendInfo.Start = e.Start; + abj.BlendInfo.SingleBlend = e.SingleLevelBlend; + abj.BlendInfo.Weight = e.Weight; - EntityWrapper nodeEntity = subTreeRoot.FirstChildByName(e.NodeName); // more than one - if (nodeEntity.Valid()) { - if (nodeEntity.HasComponent("Animation")) { - const Skeleton::Animation* animation = skeleton->GetAnimation(nodeEntity["Animation"]["AnimationName"]); - (bool&)nodeEntity["Animation"]["Reverse"] = e.Reverse; + std::vector animationEntities = blendTree->GetEntitesByName(e.NodeName); // more than one + for(auto entity : animationEntities) + if (entity.Valid()) { + if (entity.HasComponent("Animation")) { + const Skeleton::Animation* animation = skeleton->GetAnimation(entity["Animation"]["AnimationName"]); + (bool&)entity["Animation"]["Reverse"] = e.Reverse; - if (e.Restart) { - if (animation != nullptr) { - if (e.Restart) { - if (e.Reverse) { - (double&)nodeEntity["Animation"]["Time"] = animation->Duration; - } else { - (double&)nodeEntity["Animation"]["Time"] = 0.0; + if (e.Restart) { + if (animation != nullptr) { + if (e.Restart) { + if (e.Reverse) { + (double&)entity["Animation"]["Time"] = animation->Duration; + } else { + (double&)entity["Animation"]["Time"] = 0.0; + } } } } } } + m_AutoBlendQueues[subTreeRoot].Insert(abj); + } else { + std::vector subtreeroots = blendTree->GetSingleLevelRoots(e.NodeName); + + for(auto entity : subtreeroots) { + subTreeRoot = entity; + + if (!subTreeRoot.Valid()) { + return false; + } + + AutoBlendQueue::AutoBlendJob abj; + abj.AnimationEntity = e.AnimationEntity; + abj.CurrentTime = 0.0; + abj.Delay = e.Delay; + abj.Duration = e.Duration; + abj.RootNode = e.RootNode; + + abj.BlendInfo.NodeName = e.NodeName; + abj.BlendInfo.progress = 0.0; + abj.BlendInfo.Start = e.Start; + abj.BlendInfo.SingleBlend = e.SingleLevelBlend; + abj.BlendInfo.Weight = e.Weight; + m_AutoBlendQueues[subTreeRoot].Insert(abj); + } + + std::vector animationEntities = blendTree->GetEntitesByName(e.NodeName); // more than one + for (auto entity : animationEntities) + if (entity.Valid()) { + if (entity.HasComponent("Animation")) { + const Skeleton::Animation* animation = skeleton->GetAnimation(entity["Animation"]["AnimationName"]); + (bool&)entity["Animation"]["Reverse"] = e.Reverse; + + if (e.Restart) { + if (animation != nullptr) { + if (e.Restart) { + if (e.Reverse) { + (double&)entity["Animation"]["Time"] = animation->Duration; + } else { + (double&)entity["Animation"]["Time"] = 0.0; + } + } + } + } + } + } } - m_AutoBlendQueues[subTreeRoot].Insert(abj); + + return true; } + +bool AnimationSystem::OnEntityDeleted(Events::EntityDeleted& e) +{ + EntityWrapper entity = EntityWrapper(m_World, e.DeletedEntity); + + if (entity.HasComponent("Model")) { + Model* model; + try { + model = ResourceManager::Load<::Model, true>(entity["Model"]["Resource"]); + } catch (const std::exception&) { + return false; + } + + Skeleton* skeleton = model->m_RawModel->m_Skeleton; + if (skeleton == nullptr) { + return false; + } + + if (skeleton->BlendTrees.find(entity) != skeleton->BlendTrees.end()) { + skeleton->BlendTrees.erase(entity); + } + + + } + +} + +bool AnimationSystem::OnSetBlendWeight(Events::SetBlendWeight& e) +{ + if (!e.RootNode.Valid()) { + return false; + } + + if (!e.RootNode.HasComponent("Model")) { + return false; + } + + Model* model; + try { + model = ResourceManager::Load<::Model, true>((std::string)e.RootNode["Model"]["Resource"]); + } catch (const std::exception&) { + return false; + } + + Skeleton* skeleton = model->m_RawModel->m_Skeleton; + if (skeleton == nullptr) { + return false; + } + + std::shared_ptr blendTree; + if (skeleton->BlendTrees.find(e.RootNode) != skeleton->BlendTrees.end()) { + blendTree = skeleton->BlendTrees.at(e.RootNode); + } else { + return false; + } + + if(e.Weight >= 0 && e.Weight <= 1) { + + blendTree->SetWeightByName(e.NodeName, e.Weight); + + return true; + } else { + return false; + } + +} diff --git a/src/Engine/Rendering/AutoBlendQueue.cpp b/src/Engine/Rendering/AutoBlendQueue.cpp index cafb7ee5..1c6907e8 100644 --- a/src/Engine/Rendering/AutoBlendQueue.cpp +++ b/src/Engine/Rendering/AutoBlendQueue.cpp @@ -75,7 +75,6 @@ void AutoBlendQueue::Insert(AutoBlendJob autoBlendJob) } } - m_BlendQueue.clear(); m_BlendQueue.push_back(blendNode); } @@ -124,7 +123,7 @@ bool AutoBlendQueue::HasActiveBlendJob() try { model = ResourceManager::Load<::Model, true>(blendJob.RootNode["Model"]["Resource"]); } catch (const std::exception&) { - m_BlendQueue.pop_front(); + //m_BlendQueue.pop_front(); return HasActiveBlendJob(); } diff --git a/src/Engine/Rendering/BlendTree.cpp b/src/Engine/Rendering/BlendTree.cpp index 29bbe7e6..1ecafc56 100644 --- a/src/Engine/Rendering/BlendTree.cpp +++ b/src/Engine/Rendering/BlendTree.cpp @@ -2,11 +2,8 @@ BlendTree::BlendTree(EntityWrapper ModelEntity, Skeleton* skeleton) { - m_Skeleton = skeleton; - - if (ModelEntity.HasComponent("Animation")) { const Skeleton::Animation* animation = skeleton->GetAnimation(ModelEntity["Animation"]["AnimationName"]); if (animation == nullptr) { @@ -270,7 +267,7 @@ BlendTree::AutoBlendInfo BlendTree::AutoBlendStep(AutoBlendInfo blendInfo) currentNode = currentNode->Parent; if (blendInfo.SingleBlend) { - break; + return blendInfo;; } } } else if(goalNodes.size() >= 2) { @@ -331,6 +328,9 @@ BlendTree::AutoBlendInfo BlendTree::AutoBlendStep(AutoBlendInfo blendInfo) lastNode = currentNode; currentNode = currentNode->Parent; + if (blendInfo.SingleBlend) { + return blendInfo; + } } } @@ -427,6 +427,55 @@ EntityWrapper BlendTree::GetSubTreeRoot(std::string nodeName) return subTreeRoots.front()->Entity; } + +std::vector BlendTree::GetSingleLevelRoots(std::string name) +{ + std::vector nodes = FindNodesByName(name); + std::vector entities; + + for (auto it = nodes.begin(); it != nodes.end(); it++) { + Node* currentNode = (*it)->Parent; + + if(currentNode->Entity.Valid()) { + entities.push_back(currentNode->Entity); + } + } + + return entities; +} + + +std::vector BlendTree::GetEntitesByName(std::string name) +{ + std::vector nodes = FindNodesByName(name); + std::vector entities; + + for (auto it = nodes.begin(); it != nodes.end(); it++) { + Node* currentNode = (*it); + + if (currentNode->Entity.Valid()) { + entities.push_back(currentNode->Entity); + } + } + + return entities; +} + + +void BlendTree::SetWeightByName(std::string name, double weight) +{ + std::vector nodes = FindNodesByName(name); + + for (auto node : nodes) { + EntityWrapper entity = node->Entity; + + if(entity.HasComponent("Blend")) { + entity["Blend"]["Weight"] = weight; + node->Weight = weight; + } + } +} + void BlendTree::Blend(std::map& pose) { Node* currentNode; diff --git a/src/Engine/Rendering/Skeleton.cpp b/src/Engine/Rendering/Skeleton.cpp index 592279ed..2883c53d 100644 --- a/src/Engine/Rendering/Skeleton.cpp +++ b/src/Engine/Rendering/Skeleton.cpp @@ -321,6 +321,8 @@ Skeleton::~Skeleton() for (auto &kv : Bones) { delete kv.second; } + + BlendTrees.clear(); } const Skeleton::Animation* Skeleton::GetAnimation(std::string name) diff --git a/src/Game/Systems/PlayerMovementSystem.cpp b/src/Game/Systems/PlayerMovementSystem.cpp index 3d897bf7..dbf3d889 100644 --- a/src/Game/Systems/PlayerMovementSystem.cpp +++ b/src/Game/Systems/PlayerMovementSystem.cpp @@ -443,18 +443,34 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) } } } + + + /* EntityWrapper dashEffectModel; + dashEffectModel = playerModel.Clone(dashEffect); + player["Transform"].Copy(dashEffectModel["Transform"]); + + + dashEffectModel.AttachComponent("ExplosionEffect"); + dashEffectModel["ExplosionEffect"]["EndColor"] = (glm::vec4)playerModel["Model"]["Color"]; + ((glm::vec4&)dashEffectModel["ExplosionEffect"]["EndColor"]).w = 0.f; + (double&)dashEffectModel["ExplosionEffect"]["ExplosionDuration"] = dashEffect["Lifetime"]["Lifetime"]; + (glm::vec3&)dashEffectModel["ExplosionEffect"]["ExplosionOrigin"] = glm::vec3(0, 1, 0) + (0.2f * controller->Movement()); + + + + auto animationChildren = dashEffectModel.ChildrenWithComponent("Animation"); + + for (auto animationEntity : animationChildren) { + (bool&)animationEntity["Animation"]["Play"] = false; + }*/ } } } -/* - auto playerEntityAnimation = playerModel["Animation"]; - playerEntityModel.Copy(dashEffect["Model"]); - playerEntityAnimation.Copy(dashEffect["Animation"]); - dashEffect["ExplosionEffect"]["EndColor"] = (glm::vec4)playerEntityModel["Color"]; - ((glm::vec4&)dashEffect["ExplosionEffect"]["EndColor"]).w = 0.f; -*/ + + + From 0e0a486c016df6d13531c490d8599df62d5bf6fb Mon Sep 17 00:00:00 2001 From: verysecrethero Date: Tue, 8 Mar 2016 11:48:54 +0100 Subject: [PATCH 31/68] AmmoPickupSystem should now be able to give ammo to all classtypes --- include/Game/Systems/AmmoPickupSystem.h | 12 +++++ src/Game/Systems/AmmoPickupSystem.cpp | 69 +++++++++++++++++++++---- 2 files changed, 71 insertions(+), 10 deletions(-) diff --git a/include/Game/Systems/AmmoPickupSystem.h b/include/Game/Systems/AmmoPickupSystem.h index 70c5630f..d34427e3 100644 --- a/include/Game/Systems/AmmoPickupSystem.h +++ b/include/Game/Systems/AmmoPickupSystem.h @@ -40,5 +40,17 @@ private: }; std::vector m_PickupAtMaximum; void DoPickup(EntityWrapper &player, EntityWrapper &trigger); + //class + enum class PlayerClass { + Assault, + Defender, + Sniper, + None + }; + //helper methods + bool DoesPlayerHaveMaxAmmo(EntityWrapper &player); + PlayerClass DetermineClass(EntityWrapper &player); + int& GetPlayerAmmo(EntityWrapper &player); + int GetPlayerMaxAmmo(EntityWrapper &player); }; #endif diff --git a/src/Game/Systems/AmmoPickupSystem.cpp b/src/Game/Systems/AmmoPickupSystem.cpp index e28c38ff..21101b69 100644 --- a/src/Game/Systems/AmmoPickupSystem.cpp +++ b/src/Game/Systems/AmmoPickupSystem.cpp @@ -37,8 +37,7 @@ void AmmoPickupSystem::Update(double dt) //erase the current element (somePickup) it = m_ETriggerTouchVector.erase(it); - } - else { + } else { it++; } } @@ -48,7 +47,7 @@ void AmmoPickupSystem::Update(double dt) m_PickupAtMaximum.erase(it); break; } - if ((int)it->player["AssaultWeapon"]["Ammo"] < (int)it->player["AssaultWeapon"]["MaxAmmo"]) { + if (!DoesPlayerHaveMaxAmmo(it->player)) { DoPickup(it->player, it->trigger); m_PickupAtMaximum.erase(it); break; @@ -56,6 +55,56 @@ void AmmoPickupSystem::Update(double dt) } } } +bool AmmoPickupSystem::DoesPlayerHaveMaxAmmo(EntityWrapper &player) { + PlayerClass playerClass = DetermineClass(player); + if (playerClass == PlayerClass::Defender) { + return !((int)player["DefenderWeapon"]["Ammo"] < (int)player["DefenderWeapon"]["MaxAmmo"]); + } else if (playerClass == PlayerClass::Sniper) { + return !((int)player["SniperWeapon"]["Ammo"] < (int)player["SniperWeapon"]["MaxAmmo"]); + } else if (playerClass == PlayerClass::Assault) { + return !((int)player["AssaultWeapon"]["Ammo"] < (int)player["AssaultWeapon"]["MaxAmmo"]); + } else { + return false; + } +} +int& AmmoPickupSystem::GetPlayerAmmo(EntityWrapper &player) { + PlayerClass playerClass = DetermineClass(player); + if (playerClass == PlayerClass::Defender) { + return (int)player["DefenderWeapon"]["Ammo"]; + } else if (playerClass == PlayerClass::Sniper) { + return (int)player["SniperWeapon"]["Ammo"]; + } else if (playerClass == PlayerClass::Assault) { + return (int)player["AssaultWeapon"]["Ammo"]; + } else { + //TODO: should really return something here + } +} +int AmmoPickupSystem::GetPlayerMaxAmmo(EntityWrapper &player) { + PlayerClass playerClass = DetermineClass(player); + if (playerClass == PlayerClass::Defender) { + return (int)player["DefenderWeapon"]["MaxAmmo"]; + } else if (playerClass == PlayerClass::Sniper) { + return (int)player["SniperWeapon"]["MaxAmmo"]; + } else if (playerClass == PlayerClass::Assault) { + return (int)player["AssaultWeapon"]["MaxAmmo"]; + } else { + return -1; + } +} +AmmoPickupSystem::PlayerClass AmmoPickupSystem::DetermineClass(EntityWrapper &player) +{ + //determine the class based on what component the inflictor-player has + if (m_World->HasComponent(player.ID, "DashAbility")) { + return PlayerClass::Assault; + } + if (m_World->HasComponent(player.ID, "ShieldAbility")) { + return PlayerClass::Defender; + } + if (m_World->HasComponent(player.ID, "SprintAbility")) { + return PlayerClass::Sniper; + } + return PlayerClass::None; +} bool AmmoPickupSystem::OnTriggerTouch(Events::TriggerTouch& e) { @@ -63,7 +112,7 @@ bool AmmoPickupSystem::OnTriggerTouch(Events::TriggerTouch& e) return false; } //TODO: add other weapontypes - if (!e.Entity.HasComponent("AssaultWeapon")) { + if (DetermineClass(e.Entity) == PlayerClass::None) { return false; } if (!e.Trigger.HasComponent("AmmoPickup")) { @@ -71,7 +120,7 @@ bool AmmoPickupSystem::OnTriggerTouch(Events::TriggerTouch& e) } //if at maxammo, save the trigger-touch to a vector since standing inside it will not re-trigger the trigger - if ((int)e.Entity["AssaultWeapon"]["Ammo"] >= (int)e.Entity["AssaultWeapon"]["MaxAmmo"]) { + if (DoesPlayerHaveMaxAmmo(e.Entity)) { m_PickupAtMaximum.push_back({ e.Entity, e.Trigger }); return false; } @@ -85,15 +134,15 @@ bool AmmoPickupSystem::OnAmmoPickup(Events::AmmoPickup & e) return false; } //TODO: add other weapontypes - if (!e.Player.HasComponent("AssaultWeapon")) { + if (DetermineClass(e.Player) == PlayerClass::None) { return false; } - int maxWeaponAmmo = (int)e.Player["AssaultWeapon"]["MaxAmmo"]; - int& currentAmmo = (int)e.Player["AssaultWeapon"]["Ammo"]; //cant pick up ammopacks if you are already at MaxAmmo - if (currentAmmo >= maxWeaponAmmo) { + if (DoesPlayerHaveMaxAmmo(e.Player)) { return false; } + int maxWeaponAmmo = GetPlayerMaxAmmo(e.Player); + int& currentAmmo = GetPlayerAmmo(e.Player); currentAmmo = std::min(currentAmmo + e.AmmoGain, maxWeaponAmmo); @@ -119,7 +168,7 @@ void AmmoPickupSystem::DoPickup(EntityWrapper &player, EntityWrapper &trigger) { if (!trigger.Valid()) { return; } - int maxWeaponAmmo = (int)player["AssaultWeapon"]["MaxAmmo"]; + int maxWeaponAmmo = GetPlayerMaxAmmo(player); int ammoGiven = 0.01*(double)trigger["AmmoPickup"]["AmmoGain"] * maxWeaponAmmo; Events::AmmoPickup ePlayerAmmoPickup; From d7f09b1a8fa988f8f9359bb941aa0d36d8e20a40 Mon Sep 17 00:00:00 2001 From: William Moberg Date: Tue, 8 Mar 2016 11:59:15 +0100 Subject: [PATCH 32/68] Added clickable buttons to switch to class/team screens, as a better alternative to Comma/Period on the keyboard. --- .../Schema/Entities/NewMapWSpectatorCam.xml | 3014 +++++++++-------- resources/Schema/Entities/OverwatchCamera.xml | 386 ++- src/Game/Systems/SpectatorCameraSystem.cpp | 19 + 3 files changed, 1907 insertions(+), 1512 deletions(-) diff --git a/resources/Schema/Entities/NewMapWSpectatorCam.xml b/resources/Schema/Entities/NewMapWSpectatorCam.xml index 456bee0e..a655bef3 100644 --- a/resources/Schema/Entities/NewMapWSpectatorCam.xml +++ b/resources/Schema/Entities/NewMapWSpectatorCam.xml @@ -23,6 +23,16 @@ + + + + + Models/Props/Highground1.mesh + + + + + @@ -77,16 +87,6 @@ - - - - - Models/Props/Highground1.mesh - - - - - @@ -1843,6 +1843,954 @@ + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + + Models/Props/Bridges/WoodenBridge.mesh + + + + + + + + + + + + + Models/Props/Bridges/WoodenBridge.mesh + + + + + + + + + + + + + + Models/Props/Bridges/WoodenBridge.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + + Models/Props/Bridges/WoodenBridge.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + Models/Props/Flora/TreeLog.mesh + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + + + + Models/Props/Flora/AliveBush.mesh + true + + + + + + + + + + + @@ -3281,34 +4229,6 @@ - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - @@ -3391,6 +4311,34 @@ + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + @@ -3425,8 +4373,8 @@ Models/Props/Stones/AssaultHolder.mesh - - + + @@ -3448,959 +4396,24 @@ - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/TreeLog.mesh - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - Models/Props/Flora/AliveBush.mesh - true - - - - - - - - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridge1Blue.mesh - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridge1Red.mesh - - - - - - - - - - - - - Models/Props/Bridges/WoodenBridge.mesh - - - - - - - - - - - - - - Models/Props/Bridges/WoodenBridge.mesh - - - - - - - - - - - - - - Models/Props/Bridges/WoodenBridge.mesh - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridge1Red.mesh - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridge1Blue.mesh - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - Models/Props/Bridges/SciFiBridgeDefense.mesh - - - - - - - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridge1Blue.mesh - - - - - - - - - - - - - Models/Props/Bridges/SciFiBridge1Red.mesh - - - - - - - - - - - - - Models/Props/Bridges/WoodenBridge.mesh - - - - - - - - - - - + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + @@ -4479,19 +4492,6 @@ - - - - - Models/Props/SciFiHolder1.mesh - - - - - - - - @@ -4512,74 +4512,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - @@ -4594,19 +4526,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - @@ -4614,78 +4533,8 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - + + @@ -4711,8 +4560,35 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + @@ -4732,6 +4608,130 @@ + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + @@ -4750,6 +4750,76 @@ + + + + + + + + + + Schema/Entities/Player.xml + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + @@ -4947,6 +5017,19 @@ + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + @@ -4973,19 +5056,6 @@ - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - @@ -5006,28 +5076,6 @@ - - - - 1 - - - - - - - - - - - 10 - - - - - - - @@ -5041,10 +5089,23 @@ - - 1 - - + + 10 + + + + + + + + + + + 1 + + + + @@ -5077,11 +5138,20 @@ 10 - + + + + + 1 + + + + + @@ -5101,8 +5171,8 @@ Models/Props/PickUps/AmmoPickUp.mesh - - + + @@ -5120,46 +5190,8 @@ Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - + + @@ -5178,7 +5210,64 @@ - + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + @@ -5197,26 +5286,7 @@ - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - + @@ -5235,7 +5305,7 @@ - + @@ -5243,76 +5313,6 @@ - - - - - - - - - - Schema/Entities/Player.xml - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - @@ -5321,6 +5321,7 @@ + @@ -5345,41 +5346,27 @@ - - - - Pick Class - Fonts/DroidSans.ttf,64 - - - - - - - - - - + - Textures/Icons/Classes/Assault-01.png + Textures/Icons/Classes/Defender-01.png PickClass - 1 + 2 - + - + - Assault + Defender Fonts/DroidSans.ttf,64 @@ -5425,27 +5412,27 @@ - + - Textures/Icons/Classes/Defender-01.png + Textures/Icons/Classes/Assault-01.png PickClass - 2 + 1 - + - + - Defender + Assault Fonts/DroidSans.ttf,64 @@ -5458,6 +5445,66 @@ + + + + Pick Class + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + SwapToTeamPick + 1 + + + + + + + + + + + Change + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + Team + Fonts/DroidSans.ttf,64 + + + + + + + + + + @@ -5475,6 +5522,20 @@ + + + + Pick Team + Fonts/DroidSans.ttf,64 + + + + + + + + + @@ -5526,7 +5587,7 @@ - + Red @@ -5574,19 +5635,54 @@ - + - - Pick Team - Fonts/DroidSans.ttf,64 - - + + + Textures/Core/UnitHexagon.png + + + false + + + SwapToClassPick + 1 + - - + + - + + + + + Change + Fonts/DroidSans.ttf,64 + false + + + + + + + + + + + + Class + Fonts/DroidSans.ttf,64 + false + + + + + + + + + @@ -5605,6 +5701,20 @@ + + + + 1 + Fonts/DroidSans.ttf,64 + + + + + + + + + @@ -5618,10 +5728,10 @@ Textures/Core/UnitHexagon.png - + - + @@ -5631,7 +5741,7 @@ - 4 + 3 Textures/Core/UnitHexagon_Rotated.png @@ -5652,10 +5762,10 @@ Textures/Core/UnitHexagon.png - + - + @@ -5665,7 +5775,7 @@ - 3 + 4 Textures/Core/UnitHexagon_Rotated.png @@ -5715,38 +5825,6 @@ - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - @@ -5782,21 +5860,131 @@ + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + - + - - 16 - Fonts/DroidSans.ttf,64 - - + + + Textures/Core/UnitHexagon.png + + + + + SwapToTeamPick + 1 + - - + + - + + + + + Change + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + Team + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + SwapToClassPick + 1 + + + + + + + + + + + Change + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + Class + Fonts/DroidSans.ttf,64 + + + + + + + + + diff --git a/resources/Schema/Entities/OverwatchCamera.xml b/resources/Schema/Entities/OverwatchCamera.xml index 55e9099c..075e57e2 100644 --- a/resources/Schema/Entities/OverwatchCamera.xml +++ b/resources/Schema/Entities/OverwatchCamera.xml @@ -8,6 +8,7 @@ + @@ -33,19 +34,38 @@ - + - - Pick Class - Fonts/DroidSans.ttf,64 - - + + + Textures/Icons/Classes/Sniper-01.png + + + + PickClass + 3 + - - + + - + + + + + Sniper + Fonts/DroidSans.ttf,64 + + + + + + + + + + @@ -80,39 +100,6 @@ - - - - - Textures/Icons/Classes/Sniper-01.png - - - - PickClass - 3 - - - - - - - - - - - Sniper - Fonts/DroidSans.ttf,64 - - - - - - - - - - - @@ -146,6 +133,66 @@ + + + + Pick Class + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + SwapToTeamPick + 1 + + + + + + + + + + + Change + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + Team + Fonts/DroidSans.ttf,64 + + + + + + + + + + @@ -163,6 +210,20 @@ + + + + Pick Team + Fonts/DroidSans.ttf,64 + + + + + + + + + @@ -214,7 +275,7 @@ - + Red @@ -262,19 +323,54 @@ - + - - Pick Team - Fonts/DroidSans.ttf,64 - - + + + Textures/Core/UnitHexagon.png + + + false + + + SwapToClassPick + 1 + - - + + - + + + + + Change + Fonts/DroidSans.ttf,64 + false + + + + + + + + + + + + Class + Fonts/DroidSans.ttf,64 + false + + + + + + + + + @@ -293,6 +389,20 @@ + + + + 15 + Fonts/DroidSans.ttf,64 + + + + + + + + + @@ -306,10 +416,10 @@ Textures/Core/UnitHexagon.png - + - + @@ -319,7 +429,7 @@ - 4 + 3 Textures/Core/UnitHexagon_Rotated.png @@ -340,10 +450,10 @@ Textures/Core/UnitHexagon.png - + - + @@ -353,7 +463,7 @@ - 3 + 4 Textures/Core/UnitHexagon_Rotated.png @@ -403,38 +513,6 @@ - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - @@ -470,21 +548,131 @@ + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + - + - - 16 - Fonts/DroidSans.ttf,64 - - + + + Textures/Core/UnitHexagon.png + + + + + SwapToTeamPick + 1 + - - + + - + + + + + Change + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + Team + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + SwapToClassPick + 1 + + + + + + + + + + + Change + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + Class + Fonts/DroidSans.ttf,64 + + + + + + + + + diff --git a/src/Game/Systems/SpectatorCameraSystem.cpp b/src/Game/Systems/SpectatorCameraSystem.cpp index 58f25155..60b82b0d 100644 --- a/src/Game/Systems/SpectatorCameraSystem.cpp +++ b/src/Game/Systems/SpectatorCameraSystem.cpp @@ -60,6 +60,25 @@ bool SpectatorCameraSystem::OnInputCommand(const Events::InputCommand& e) EntityWrapper spectatorCam = m_World->GetFirstEntityByName(camName); // Set the camera as active, if it exists. if (spectatorCam.Valid() && spectatorCam.HasComponent("Camera")) { + // Set the class pick button visible if a blue or red team is picked, else invisible. + EntityWrapper HUD; + if (camName == "SpectatorCamera") { + HUD = spectatorCam.FirstChildByName("SpectatorHUD"); + } else if (camName == "PickTeamCamera") { + HUD = spectatorCam.FirstChildByName("PickTeamHUD"); + } + // If we are at the class pick already, or if HUD is invalid for any other reason, do nothing. + if (HUD.Valid()) { + EntityWrapper toClassButton = spectatorCam.FirstChildByName("ToClassPick"); + if (toClassButton.Valid()) { + // Set ClassButton as invisible if spectator, else visible. + bool visible = m_PickedTeam != 1; // TODO: 1 Signifies spectator. + toClassButton["Sprite"]["Visible"] = visible; + for (auto& child : toClassButton.ChildrenWithComponent("Text")) { + child["Text"]["Visible"] = visible; + } + } + } Events::SetCamera eSetCamera; eSetCamera.CameraEntity = spectatorCam; m_EventBroker->Publish(eSetCamera); From f77a6105195a65b7dce492b216b5a64f3c4e6f78 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Tue, 8 Mar 2016 13:26:01 +0100 Subject: [PATCH 33/68] Dash now looking good --- .../Engine/Input/FirstPersonInputController.h | 114 +++++++++--------- resources/Schema/Entities/Player.xml | 8 +- src/Engine/Rendering/AnimationSystem.cpp | 2 + src/Engine/Rendering/AutoBlendQueue.cpp | 11 +- src/Game/Systems/PlayerMovementSystem.cpp | 48 +++----- 5 files changed, 88 insertions(+), 95 deletions(-) diff --git a/include/Engine/Input/FirstPersonInputController.h b/include/Engine/Input/FirstPersonInputController.h index d9b0d3e8..75726fd3 100644 --- a/include/Engine/Input/FirstPersonInputController.h +++ b/include/Engine/Input/FirstPersonInputController.h @@ -110,7 +110,6 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm if (e.Command == "Pitch") { float val = glm::radians(e.Value); m_Rotation.x += -val; - //m_Rotation.x = glm::clamp(m_Rotation.x, -glm::half_pi(), glm::half_pi()); } if (e.Command == "Yaw") { @@ -123,14 +122,14 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm float val = glm::clamp(e.Value, -1.f, 1.f); m_Movement.z = -val; + //Animation if (m_PlayerEntity.Valid()) { EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); if (playerModel.Valid()) { - if (val > 0) { + if (val > 0) { // Walk/Run Events::AutoAnimationBlend aeb; aeb.Duration = 0.1; - - if(m_Crouching) { + if (m_Crouching) { aeb.NodeName = "Walk"; } else { aeb.NodeName = "Run"; @@ -139,7 +138,7 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm aeb.Start = true; aeb.SingleLevelBlend = true; m_EventBroker->Publish(aeb); - } else if (val < 0) { + } else if (val < 0) { // Walk/run Backwards Events::AutoAnimationBlend aeb; aeb.Duration = 0.1; if (m_Crouching) { @@ -152,8 +151,6 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm aeb.SingleLevelBlend = true; aeb.Reverse = true; m_EventBroker->Publish(aeb); - } else { - } } } @@ -162,10 +159,11 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm float val = glm::clamp(e.Value, -1.f, 1.f); m_Movement.x = val; + + //Animation if (m_PlayerEntity.Valid()) { EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); - - if (playerModel.Valid()) { + if (playerModel.Valid()) { //Right Strafe if (val > 0) { Events::AutoAnimationBlend aeb; aeb.Duration = 0.1; @@ -174,7 +172,7 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm aeb.SingleLevelBlend = true; aeb.Start = true; m_EventBroker->Publish(aeb); - } else if (val < 0) { + } else if (val < 0) { //LeftStrafe Events::AutoAnimationBlend aeb; aeb.Duration = 0.1; aeb.NodeName = "Left"; @@ -182,63 +180,59 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm aeb.SingleLevelBlend = true; aeb.Start = true; m_EventBroker->Publish(aeb); - } else { - - } } } - - } - - - if (glm::length2(m_Movement) < 0.1f) { - if (m_PlayerEntity.Valid()) { - EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); - - if (playerModel.Valid()) { - Events::AutoAnimationBlend aeb; - aeb.Duration = 0.2; - aeb.NodeName = "Idle"; - aeb.RootNode = playerModel; - m_EventBroker->Publish(aeb); - } - } - } else { - if (m_PlayerEntity.Valid()) { - EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); - - if (playerModel.Valid()) { - Events::AutoAnimationBlend aeb; - aeb.Duration = 0.2; - aeb.NodeName = "MovementBlend"; - aeb.RootNode = playerModel; - m_EventBroker->Publish(aeb); - } - } } } - - if (glm::length2(m_Movement) > 0) { - m_Movement = glm::normalize(m_Movement); - - if (m_PlayerEntity.Valid()) { - EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); - - if (playerModel.Valid()) { - glm::vec2 direction = glm::normalize(glm::vec2(m_Movement.x, m_Movement.z)); - - double weight = glm::abs(glm::dot(glm::vec2(1, 0), direction)); - LOG_INFO("Weight %f", weight); - Events::SetBlendWeight sbw; - sbw.NodeName = "MovementBlend"; - sbw.Weight = weight; - sbw.RootNode = playerModel; - m_EventBroker->Publish(sbw); - } + //Animation + if (glm::length2(m_Movement) < 0.1f) { + //Blend to Idle + if (m_PlayerEntity.Valid()) { + EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); + if (playerModel.Valid()) { + Events::AutoAnimationBlend aeb; + aeb.Duration = 0.2; + aeb.NodeName = "Idle"; + aeb.RootNode = playerModel; + m_EventBroker->Publish(aeb); } } + } else { + + //Blend to movement + if (m_PlayerEntity.Valid()) { + EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); + if (playerModel.Valid()) { + Events::AutoAnimationBlend aeb; + aeb.Duration = 0.2; + aeb.NodeName = "MovementBlend"; + aeb.RootNode = playerModel; + m_EventBroker->Publish(aeb); + } + } + } + + + if (glm::length2(m_Movement) > 0) { + m_Movement = glm::normalize(m_Movement); + + //Animation + // movement direction blend + if (m_PlayerEntity.Valid()) { + EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); + if (playerModel.Valid()) { + glm::vec2 direction = glm::normalize(glm::vec2(m_Movement.x, m_Movement.z)); + double weight = glm::abs(glm::dot(glm::vec2(1, 0), direction)); + Events::SetBlendWeight sbw; + sbw.NodeName = "MovementBlend"; + sbw.Weight = weight; + sbw.RootNode = playerModel; + m_EventBroker->Publish(sbw); + } + } + } @@ -274,6 +268,8 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm if (e.Command == "Crouch") { m_Crouching = e.Value > 0; + + //Animation if (m_PlayerEntity.Valid()) { EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); if (playerModel.Valid()) { diff --git a/resources/Schema/Entities/Player.xml b/resources/Schema/Entities/Player.xml index 16b7ccd1..d51b8cc5 100644 --- a/resources/Schema/Entities/Player.xml +++ b/resources/Schema/Entities/Player.xml @@ -986,7 +986,7 @@ DashForwardF - 3 + 1.7999999523162842 false @@ -998,7 +998,7 @@ DashBackwardF - 3 + 1.7999999523162842 false @@ -1022,7 +1022,7 @@ DashLeftF - 3 + 1.7999999523162842 false @@ -1034,7 +1034,7 @@ DashRightF - 3 + 1.7999999523162842 false diff --git a/src/Engine/Rendering/AnimationSystem.cpp b/src/Engine/Rendering/AnimationSystem.cpp index be00a0f4..f6c91d46 100644 --- a/src/Engine/Rendering/AnimationSystem.cpp +++ b/src/Engine/Rendering/AnimationSystem.cpp @@ -127,6 +127,7 @@ void AnimationSystem::UpdateAnimations(double dt) void AnimationSystem::UpdateWeights(double dt) { for (auto it = m_AutoBlendQueues.begin(); it != m_AutoBlendQueues.end(); ) { + it->second.PrintQueue(); if(it->second.HasActiveBlendJob()) { AutoBlendQueue::AutoBlendJob& blendJob = it->second.GetActiveBlendJob(); @@ -151,6 +152,7 @@ void AnimationSystem::UpdateWeights(double dt) } } } + LOG_INFO(""); } bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e) diff --git a/src/Engine/Rendering/AutoBlendQueue.cpp b/src/Engine/Rendering/AutoBlendQueue.cpp index 1c6907e8..f4a854ec 100644 --- a/src/Engine/Rendering/AutoBlendQueue.cpp +++ b/src/Engine/Rendering/AutoBlendQueue.cpp @@ -38,11 +38,14 @@ void AutoBlendQueue::Insert(AutoBlendJob autoBlendJob) double animationSpeed = (double)autoBlendJob.AnimationEntity["Animation"]["Speed"]; double animationTime = (double)autoBlendJob.AnimationEntity["Animation"]["Time"]; - - if ((bool)autoBlendJob.AnimationEntity["Animation"]["Reverse"]) { - AnimationDuration = (animation->Duration * animationSpeed) - (animation->Duration - animationTime); + if (animationSpeed != 0) { + if ((bool)autoBlendJob.AnimationEntity["Animation"]["Reverse"]) { + AnimationDuration = (animation->Duration / animationSpeed) - (animation->Duration - animationTime); + } else { + AnimationDuration = (animation->Duration / animationSpeed) - animationTime; + } } else { - AnimationDuration = (animation->Duration * animationSpeed) - animationTime; + return; } blendNode.StartTime += AnimationDuration; diff --git a/src/Game/Systems/PlayerMovementSystem.cpp b/src/Game/Systems/PlayerMovementSystem.cpp index dbf3d889..dad84932 100644 --- a/src/Game/Systems/PlayerMovementSystem.cpp +++ b/src/Game/Systems/PlayerMovementSystem.cpp @@ -358,7 +358,7 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) if (controller->Movement().x > 0) { { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.3; + aeb.Duration = 0.1; aeb.NodeName = "DashRight"; aeb.RootNode = playerModel; aeb.Restart = true; @@ -367,19 +367,19 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) } { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.3; + aeb.Duration = 0.2; aeb.NodeName = "StandCrouchBlend"; aeb.RootNode = playerModel; - aeb.Delay = -0.3; + aeb.Delay = 0.2; aeb.Start = true; aeb.Restart = false; - aeb.AnimationEntity = playerModel.FirstChildByName("DashForward"); + aeb.AnimationEntity = playerModel.FirstChildByName("DashRight"); m_EventBroker->Publish(aeb); } } else { { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.3; + aeb.Duration = 0.1; aeb.NodeName = "DashLeft"; aeb.RootNode = playerModel; aeb.Restart = true; @@ -388,13 +388,13 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) } { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.3; + aeb.Duration = 0.2; aeb.NodeName = "StandCrouchBlend"; aeb.RootNode = playerModel; - aeb.Delay = -0.3; + aeb.Delay = 0.2; aeb.Start = true; aeb.Restart = false; - aeb.AnimationEntity = playerModel.FirstChildByName("DashForward"); + aeb.AnimationEntity = playerModel.FirstChildByName("DashLeft"); m_EventBroker->Publish(aeb); } } @@ -402,7 +402,7 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) if (controller->Movement().z < 0) { { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.3; + aeb.Duration = 0.1; aeb.NodeName = "DashForward"; aeb.RootNode = playerModel; aeb.Restart = true; @@ -411,10 +411,10 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) } { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.3; + aeb.Duration = 0.2; aeb.NodeName = "StandCrouchBlend"; aeb.RootNode = playerModel; - aeb.Delay = -0.3; + aeb.Delay = 0.2; aeb.Start = true; aeb.Restart = false; aeb.AnimationEntity = playerModel.FirstChildByName("DashForward"); @@ -423,7 +423,7 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) } else { { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.3; + aeb.Duration = 0.1; aeb.NodeName = "DashBackward"; aeb.RootNode = playerModel; aeb.Restart = true; @@ -432,29 +432,30 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) } { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.3; + aeb.Duration = 0.2; aeb.NodeName = "StandCrouchBlend"; aeb.RootNode = playerModel; - aeb.Delay = -0.3; + aeb.Delay = 0.2; aeb.Start = true; aeb.Restart = false; - aeb.AnimationEntity = playerModel.FirstChildByName("DashForward"); + aeb.AnimationEntity = playerModel.FirstChildByName("DashBackward"); m_EventBroker->Publish(aeb); } } } - /* EntityWrapper dashEffectModel; - dashEffectModel = playerModel.Clone(dashEffect); + EntityWrapper dashEffectModel; + dashEffectModel = playerModel.Clone(); player["Transform"].Copy(dashEffectModel["Transform"]); - dashEffectModel.AttachComponent("ExplosionEffect"); + /* dashEffectModel.AttachComponent("ExplosionEffect"); dashEffectModel["ExplosionEffect"]["EndColor"] = (glm::vec4)playerModel["Model"]["Color"]; ((glm::vec4&)dashEffectModel["ExplosionEffect"]["EndColor"]).w = 0.f; (double&)dashEffectModel["ExplosionEffect"]["ExplosionDuration"] = dashEffect["Lifetime"]["Lifetime"]; (glm::vec3&)dashEffectModel["ExplosionEffect"]["ExplosionOrigin"] = glm::vec3(0, 1, 0) + (0.2f * controller->Movement()); +*/ @@ -462,18 +463,9 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) for (auto animationEntity : animationChildren) { (bool&)animationEntity["Animation"]["Play"] = false; - }*/ + } } } } - - - - - - - - - return true; } From a0ca4df3be179045231e5cbac67cd943614f79ef Mon Sep 17 00:00:00 2001 From: Tleety Date: Tue, 8 Mar 2016 13:29:21 +0100 Subject: [PATCH 34/68] Some server list components and entities. --- resources/Schema/Components.xsd | 2 + .../Schema/Components/ServerIdentity.xml | 7 + .../Schema/Components/ServerIdentity.xsd | 23 ++ resources/Schema/Components/ServerList.xml | 6 + resources/Schema/Components/ServerList.xsd | 20 ++ resources/Schema/Entities/MainMenu.xml | 302 ++++++++++-------- resources/Schema/Entities/ServerIdentity.xml | 94 ++++++ resources/Schema/Entities/ServerList.xml | 65 ++++ resources/Schema/Types/Entity.xsd | 2 + src/Engine/GUI/MainMenuSystem.cpp | 3 - src/Engine/Rendering/BlurHUD.cpp | 36 +-- 11 files changed, 397 insertions(+), 163 deletions(-) create mode 100644 resources/Schema/Components/ServerIdentity.xml create mode 100644 resources/Schema/Components/ServerIdentity.xsd create mode 100644 resources/Schema/Components/ServerList.xml create mode 100644 resources/Schema/Components/ServerList.xsd create mode 100644 resources/Schema/Entities/ServerIdentity.xml create mode 100644 resources/Schema/Entities/ServerList.xml diff --git a/resources/Schema/Components.xsd b/resources/Schema/Components.xsd index cf282eec..632fad19 100644 --- a/resources/Schema/Components.xsd +++ b/resources/Schema/Components.xsd @@ -65,4 +65,6 @@ + + \ No newline at end of file diff --git a/resources/Schema/Components/ServerIdentity.xml b/resources/Schema/Components/ServerIdentity.xml new file mode 100644 index 00000000..b14a309c --- /dev/null +++ b/resources/Schema/Components/ServerIdentity.xml @@ -0,0 +1,7 @@ + + + 0.0.0.0 + 0 + UnkownServer + 0 + \ No newline at end of file diff --git a/resources/Schema/Components/ServerIdentity.xsd b/resources/Schema/Components/ServerIdentity.xsd new file mode 100644 index 00000000..961a69c5 --- /dev/null +++ b/resources/Schema/Components/ServerIdentity.xsd @@ -0,0 +1,23 @@ + + + + + A component for tracking the data of servers in the serverlist. + + + + The IP adress of the server. + + + Port used to connect to the server. + + + Name of the server. + + + Amount of players connected to the server. + + + + + \ No newline at end of file diff --git a/resources/Schema/Components/ServerList.xml b/resources/Schema/Components/ServerList.xml new file mode 100644 index 00000000..d3571d07 --- /dev/null +++ b/resources/Schema/Components/ServerList.xml @@ -0,0 +1,6 @@ + + + 0 + 0 + + \ No newline at end of file diff --git a/resources/Schema/Components/ServerList.xsd b/resources/Schema/Components/ServerList.xsd new file mode 100644 index 00000000..b422acda --- /dev/null +++ b/resources/Schema/Components/ServerList.xsd @@ -0,0 +1,20 @@ + + + + + The menulist where servers will be listed. + + + + The amount of server identities in this list. + + + Where the next serverIdentity should be placed. + + + How much offset should be applied per position + + + + + \ No newline at end of file diff --git a/resources/Schema/Entities/MainMenu.xml b/resources/Schema/Entities/MainMenu.xml index a88c1407..47292c30 100644 --- a/resources/Schema/Entities/MainMenu.xml +++ b/resources/Schema/Entities/MainMenu.xml @@ -1,163 +1,203 @@ - + + - - + - - - - - - - - - - Textures/Core/White.png - - - - - - - - - - - - Play - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - + - + + - + - - - Textures/Core/White.png - - - - - + - + + + + + + Textures/Core/White.png + true + + + + + Play + 1 + + + + + + + + + + + Play + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + - + - - Option - Fonts/DroidSans.ttf,64 - - - - - - - + - + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + Option + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + Credits + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + Quit + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + - + - + - + - - - Textures/Core/White.png - - - - - - - - - - - - Credits - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - - - - - - - - - Textures/Core/White.png - - - - - - - - - - - - Quit - Fonts/DroidSans.ttf,64 - - - - - - - - - + + Schema/Entities/ServerList.xml + + diff --git a/resources/Schema/Entities/ServerIdentity.xml b/resources/Schema/Entities/ServerIdentity.xml new file mode 100644 index 00000000..ca803c34 --- /dev/null +++ b/resources/Schema/Entities/ServerIdentity.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + 0.0.0.0 + Fonts/DroidSans.ttf,64 + + + + + + + ServerIdentity + ServerIdentity + IP + + + + + + + + + + + 0 + Fonts/DroidSans.ttf,64 + + + + + + + ServerIdentity + ServerIdentity + Port + + + + + + + + + + + UnkownServer + Fonts/DroidSans.ttf,64 + + + + + + + ServerIdentity + ServerIdentity + ServerName + + + + + + + + + 0 + Fonts/DroidSans.ttf,64 + + + + + + + ServerIdentity + ServerIdentity + PlayersConnected + + + + + + + + + + diff --git a/resources/Schema/Entities/ServerList.xml b/resources/Schema/Entities/ServerList.xml new file mode 100644 index 00000000..be16fa16 --- /dev/null +++ b/resources/Schema/Entities/ServerList.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + Textures/Icons/rotate.png + + + + + + + + + + + + + + + diff --git a/resources/Schema/Types/Entity.xsd b/resources/Schema/Types/Entity.xsd index 4865b936..ec5dba58 100644 --- a/resources/Schema/Types/Entity.xsd +++ b/resources/Schema/Types/Entity.xsd @@ -68,6 +68,8 @@ + + diff --git a/src/Engine/GUI/MainMenuSystem.cpp b/src/Engine/GUI/MainMenuSystem.cpp index f8bf032b..c37aabc1 100644 --- a/src/Engine/GUI/MainMenuSystem.cpp +++ b/src/Engine/GUI/MainMenuSystem.cpp @@ -27,15 +27,12 @@ bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e) printf("No, you stay"); } else if (e.EntityName == "Res1080") { glfwSetWindowSize(m_Renderer->Window(), 1920, 1080); - printf("\n1080"); } else if (e.EntityName == "Res720") { glfwSetWindowSize(m_Renderer->Window(), 1280, 720); glViewport(0, 0, 1280, 720); - printf("\n720"); } else if (e.EntityName == "Res480") { glfwSetWindowSize(m_Renderer->Window(), 854, 480); glViewport(0, 0, 854, 480); - printf("\n480"); } else if (e.EntityName == "FullScreen") { printf("No fullscreen for now"); } diff --git a/src/Engine/Rendering/BlurHUD.cpp b/src/Engine/Rendering/BlurHUD.cpp index 4787510b..422b9ec4 100644 --- a/src/Engine/Rendering/BlurHUD.cpp +++ b/src/Engine/Rendering/BlurHUD.cpp @@ -126,19 +126,19 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) state.Disable(GL_DEPTH_TEST); state.Disable(GL_CULL_FACE); - GLuint shaderHandle_horiz = m_GaussianProgram_horiz->GetHandle(); - GLuint shaderHandle_vert = m_GaussianProgram_vert->GetHandle(); - - - - //Horizontal pass, first use the given texture then save it to the horizontal framebuffer. - m_GaussianFrameBuffer_horiz.Bind(); state.Enable(GL_STENCIL_TEST); state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); state.StencilFunc(GL_EQUAL, 1, 0xFF); state.StencilMask(0x00); state.DepthMask(GL_FALSE); state.Enable(GL_SCISSOR_TEST); + + GLuint shaderHandle_horiz = m_GaussianProgram_horiz->GetHandle(); + GLuint shaderHandle_vert = m_GaussianProgram_vert->GetHandle(); + + //Horizontal pass, first use the given texture then save it to the horizontal framebuffer. + m_GaussianFrameBuffer_horiz.Bind(); + glViewport(0, 0, m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); glScissor(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); @@ -153,13 +153,6 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) for (int i = 1; i < m_Iterations; i++) { //Vertical pass m_GaussianFrameBuffer_vert.Bind(); - state.Enable(GL_STENCIL_TEST); - state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - state.StencilFunc(GL_EQUAL, 1, 0xFF); - state.StencilMask(0x00); - state.DepthMask(GL_FALSE); - glViewport(0, 0, m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); - glScissor(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); m_GaussianProgram_vert->Bind(); glActiveTexture(GL_TEXTURE0); @@ -171,15 +164,7 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) , GL_UNSIGNED_INT, 0, m_ScreenQuad->MaterialGroups()[0].material->StartIndex); //horizontal pass m_GaussianFrameBuffer_vert.Unbind(); - m_GaussianFrameBuffer_horiz.Bind(); - state.Enable(GL_STENCIL_TEST); - state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - state.StencilFunc(GL_EQUAL, 1, 0xFF); - state.StencilMask(0x00); - state.DepthMask(GL_FALSE); - glViewport(0, 0, m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); - glScissor(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); m_GaussianProgram_horiz->Bind(); glActiveTexture(GL_TEXTURE0); @@ -195,13 +180,6 @@ GLuint BlurHUD::Draw(GLuint texture, RenderScene& scene) //final vertical gaussian after the iterations are done m_GaussianFrameBuffer_vert.Bind(); - state.Enable(GL_STENCIL_TEST); - state.StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - state.StencilFunc(GL_EQUAL, 1, 0xFF); - state.StencilMask(0x00); - state.DepthMask(GL_FALSE); - glViewport(0, 0, m_Renderer->GetViewportSize().Width/m_BlurQuality, m_Renderer->GetViewportSize().Height/m_BlurQuality); - glScissor(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); m_GaussianProgram_vert->Bind(); glActiveTexture(GL_TEXTURE0); From 8d1877321a808848c0b4d048fe507b3b154b16b2 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Tue, 8 Mar 2016 14:32:50 +0100 Subject: [PATCH 35/68] Fixed BoneAttachment offset rotation --- assets | 2 +- .../Schema/Entities/ModelCollisionTest.xml | 164 ++++++++++++++---- resources/Schema/Entities/MovementTest.xml | 47 ++++- src/Engine/Rendering/AnimationSystem.cpp | 2 - src/Engine/Rendering/BoneAttachmentSystem.cpp | 11 +- src/Game/Systems/PlayerMovementSystem.cpp | 8 +- 6 files changed, 193 insertions(+), 41 deletions(-) diff --git a/assets b/assets index 4205e927..22ccaf7a 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 4205e92755aa67c90db6d272047cd92037ae9f11 +Subproject commit 22ccaf7a8d51c4aee6b0a0a3cb1cff6945c01151 diff --git a/resources/Schema/Entities/ModelCollisionTest.xml b/resources/Schema/Entities/ModelCollisionTest.xml index c4a3f81b..2adcc989 100644 --- a/resources/Schema/Entities/ModelCollisionTest.xml +++ b/resources/Schema/Entities/ModelCollisionTest.xml @@ -2,64 +2,168 @@ - - - + - + - - + + + + + + + + Schema/Entities/PlayerAssaultFallbackRed.xml + - - - - - - - - - - - ../assets/Models/Core/Tri.obj - - - - - + + - ../assets/Models/Core/Tri.obj + Models/Characters/Assault/AssaultRed.mesh - + + + + + + + + + + Models/Characters/Assault/AssaultRed.mesh + + + + - + - - + + 0.5 + 4 + + - ../assets/Models/Core/UnitCube.obj + sModels/Widgets/Lights/DirectionalLightWidget.mesh - - + + + + + + + Models/Test/ObstacleCourse.mesh + + + + + + + + + + + + + + + Schema/Entities/Player.xml + + + + + + + + + + + Models/Characters/Assault/AssaultBlue.mesh + + + + + + + + + + + + + Models/Characters/Assault/AssaultBlue.mesh + + + + + + + + + + + + + + ActivateDeactive + + + + Models/Characters/Defender/FirstPersonDefenderBlue.mesh + + + + + + + + + + ActivateDeactiveShieldF + + 1 + true + + + + + + + + + R_Arm_Weapon_Joint + + + Models/Weapons/Blue/DefenderWeaponBlue.mesh + + + + + + + + + + diff --git a/resources/Schema/Entities/MovementTest.xml b/resources/Schema/Entities/MovementTest.xml index 90c943ef..ea34db86 100644 --- a/resources/Schema/Entities/MovementTest.xml +++ b/resources/Schema/Entities/MovementTest.xml @@ -98,7 +98,7 @@ - + @@ -111,7 +111,50 @@ - + + + + + + + + + + + ActivateDeactive + + + + Models/Characters/Defender/FirstPersonDefenderBlue.mesh + + + + + + + + + + ActivateDeactiveShieldF + + 1 + true + + + + + + + + + R_Arm_Weapon_Joint + + + Models/Weapons/Blue/DefenderWeaponBlue.mesh + + + + diff --git a/src/Engine/Rendering/AnimationSystem.cpp b/src/Engine/Rendering/AnimationSystem.cpp index f6c91d46..be00a0f4 100644 --- a/src/Engine/Rendering/AnimationSystem.cpp +++ b/src/Engine/Rendering/AnimationSystem.cpp @@ -127,7 +127,6 @@ void AnimationSystem::UpdateAnimations(double dt) void AnimationSystem::UpdateWeights(double dt) { for (auto it = m_AutoBlendQueues.begin(); it != m_AutoBlendQueues.end(); ) { - it->second.PrintQueue(); if(it->second.HasActiveBlendJob()) { AutoBlendQueue::AutoBlendJob& blendJob = it->second.GetActiveBlendJob(); @@ -152,7 +151,6 @@ void AnimationSystem::UpdateWeights(double dt) } } } - LOG_INFO(""); } bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e) diff --git a/src/Engine/Rendering/BoneAttachmentSystem.cpp b/src/Engine/Rendering/BoneAttachmentSystem.cpp index 43dc8634..6c8eb338 100644 --- a/src/Engine/Rendering/BoneAttachmentSystem.cpp +++ b/src/Engine/Rendering/BoneAttachmentSystem.cpp @@ -49,14 +49,19 @@ void BoneAttachmentSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapp glm::vec3 skew; glm::vec4 perspective; glm::decompose(boneTransform, scale, rotation, translation, skew, perspective); - - glm::vec3 angles = glm::vec3(-glm::pitch(rotation), -glm::yaw(rotation), -glm::roll(rotation)); + + + rotation = rotation * glm::quat((glm::vec3)entity["BoneAttachment"]["OrientationOffset"]); + + rotation.w = -rotation.w; + glm::vec3 angles = glm::eulerAngles(rotation); + if ((bool)entity["BoneAttachment"]["InheritPosition"]) { (glm::vec3&)entity["Transform"]["Position"] = translation + (glm::vec3)entity["BoneAttachment"]["PositionOffset"]; } if ((bool)entity["BoneAttachment"]["InheritOrientation"]) { - (glm::vec3&)entity["Transform"]["Orientation"] = angles + (glm::vec3)entity["BoneAttachment"]["OrientationOffset"]; + (glm::vec3&)entity["Transform"]["Orientation"] = angles; } if ((bool)entity["BoneAttachment"]["InheritScale"]) { (glm::vec3&)entity["Transform"]["Scale"] = scale * (glm::vec3)entity["BoneAttachment"]["ScaleOffset"]; diff --git a/src/Game/Systems/PlayerMovementSystem.cpp b/src/Game/Systems/PlayerMovementSystem.cpp index dad84932..5ab9f19d 100644 --- a/src/Game/Systems/PlayerMovementSystem.cpp +++ b/src/Game/Systems/PlayerMovementSystem.cpp @@ -444,18 +444,18 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) } } - +/* EntityWrapper dashEffectModel; dashEffectModel = playerModel.Clone(); player["Transform"].Copy(dashEffectModel["Transform"]); - /* dashEffectModel.AttachComponent("ExplosionEffect"); + dashEffectModel.AttachComponent("ExplosionEffect"); dashEffectModel["ExplosionEffect"]["EndColor"] = (glm::vec4)playerModel["Model"]["Color"]; ((glm::vec4&)dashEffectModel["ExplosionEffect"]["EndColor"]).w = 0.f; (double&)dashEffectModel["ExplosionEffect"]["ExplosionDuration"] = dashEffect["Lifetime"]["Lifetime"]; (glm::vec3&)dashEffectModel["ExplosionEffect"]["ExplosionOrigin"] = glm::vec3(0, 1, 0) + (0.2f * controller->Movement()); -*/ + @@ -464,7 +464,9 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) for (auto animationEntity : animationChildren) { (bool&)animationEntity["Animation"]["Play"] = false; } + */ } + } } return true; From e43a7be7dbca8d26dbf43cde5b86cb39126c426f Mon Sep 17 00:00:00 2001 From: verysecrethero Date: Tue, 8 Mar 2016 15:55:51 +0100 Subject: [PATCH 36/68] DamageIndicatorSystem now works for singleplayer again. Friendly fire DamageIndicator is now black color. --- include/Game/Systems/DamageIndicatorSystem.h | 3 +++ src/Game/Systems/DamageIndicatorSystem.cpp | 13 +++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/include/Game/Systems/DamageIndicatorSystem.h b/include/Game/Systems/DamageIndicatorSystem.h index 9c88ba78..f3a95817 100644 --- a/include/Game/Systems/DamageIndicatorSystem.h +++ b/include/Game/Systems/DamageIndicatorSystem.h @@ -15,6 +15,7 @@ #include "Rendering/Util/CommonFunctions.h" //#define INDICATOR_TEST +#include "Core/ConfigFile.h" class DamageIndicatorSystem : public ImpureSystem { @@ -40,6 +41,8 @@ private: std::vector updateDamageIndicatorVector; float CalculateAngle(EntityWrapper player, glm::vec3 enemyPos); + bool m_NetworkEnabled; + //for tests #ifdef INDICATOR_TEST glm::vec3 DamageIndicatorTest(EntityWrapper player); diff --git a/src/Game/Systems/DamageIndicatorSystem.cpp b/src/Game/Systems/DamageIndicatorSystem.cpp index e68f741d..0cc3e717 100644 --- a/src/Game/Systems/DamageIndicatorSystem.cpp +++ b/src/Game/Systems/DamageIndicatorSystem.cpp @@ -10,10 +10,11 @@ DamageIndicatorSystem::DamageIndicatorSystem(SystemParams params) //load texture to cache auto texture = CommonFunctions::LoadTexture("Textures/DamageIndicator.png", false); auto entityFile = ResourceManager::Load("Schema/Entities/DamageIndicator.xml"); + m_NetworkEnabled = ResourceManager::Load("Config.ini")->Get("Networking.StartNetwork", false); } void DamageIndicatorSystem::Update(double dt) { - if (!IsServer && LocalPlayer.Valid()) { + if ((!IsServer || !m_NetworkEnabled) && LocalPlayer.Valid()) { for (auto& iter = updateDamageIndicatorVector.begin(); iter != updateDamageIndicatorVector.end(); iter++) { if (!iter->spriteEntity.Valid()) { updateDamageIndicatorVector.erase(iter); @@ -43,7 +44,7 @@ bool DamageIndicatorSystem::OnPlayerDamage(Events::PlayerDamage& e) glm::vec3 inflictorPos = e.Inflictor["Transform"]["Position"]; //if testing #ifdef INDICATOR_TEST - inflictorPos = DamageIndicatorTest(e.Victim); + inflictorPos = DamageIndicatorTest(e.Victim); #endif float angleBetweenVectors = CalculateAngle(e.Victim, inflictorPos); @@ -54,8 +55,12 @@ bool DamageIndicatorSystem::OnPlayerDamage(Events::PlayerDamage& e) m_World->SetParent(sprite.ID, m_CurrentCamera); //simply set the rotation z-wise to the angleBetweenVectors sprite["Transform"]["Orientation"] = glm::vec3(0, 0, angleBetweenVectors); + //friendly fire - change color of the marker + if (e.Damage < 0.1f) { + sprite["Sprite"]["Color"] = glm::vec4(0.0, 1.0f, 1.0f, 1.0f); + } - if (!IsServer) { + if (!IsServer || !m_NetworkEnabled) { updateDamageIndicatorVector.emplace_back(sprite, inflictorPos); } @@ -122,7 +127,7 @@ glm::vec3 DamageIndicatorSystem::DamageIndicatorTest(EntityWrapper player) { } m_TestVar++; - auto inflictorPos = glm::vec3(currentPos.x + testVar*6.0f, currentPos.y, currentPos.z + testVar2*6.0f); + auto inflictorPos = glm::vec3(currentPos.x + testVar*6.0f, currentPos.y, currentPos.z + testVar2*6.0f); //load the explosioneffect XML auto deathEffect = ResourceManager::Load("Schema/Entities/PlayerDeathExplosionWithCamera.xml"); From f8ab52c72c6685b0456f1b828a1098f143395c9a Mon Sep 17 00:00:00 2001 From: Tleety Date: Tue, 8 Mar 2016 16:15:54 +0100 Subject: [PATCH 37/68] WIP --- include/Engine/GUI/MainMenuSystem.h | 6 ++ include/Game/Systems/MainMenuSystem.h | 40 +++++++++ resources/Schema/Entities/MainMenu.xml | 84 +++++++++---------- .../GUI => Game/Systems}/MainMenuSystem.cpp | 34 +++++++- 4 files changed, 120 insertions(+), 44 deletions(-) create mode 100644 include/Game/Systems/MainMenuSystem.h rename src/{Engine/GUI => Game/Systems}/MainMenuSystem.cpp (53%) diff --git a/include/Engine/GUI/MainMenuSystem.h b/include/Engine/GUI/MainMenuSystem.h index ba69ff0d..7fb65828 100644 --- a/include/Engine/GUI/MainMenuSystem.h +++ b/include/Engine/GUI/MainMenuSystem.h @@ -5,11 +5,13 @@ #include "../Rendering/IRenderer.h" #include "../Core/ResourceManager.h" #include "../Core/Event.h" +#include "Systems/SpawnerSystem.h" #include "EButtonClicked.h" #include "EButtonPressed.h" #include "EButtonReleased.h" +#include "../Input/EInputCommand.h" class MainMenuSystem : public ImpureSystem @@ -27,6 +29,10 @@ private: bool OnButtonRelease(const Events::ButtonReleased& e); EventRelay m_EPressed; bool OnButtonPress(const Events::ButtonPressed& e); + EventRelay m_EInputCommand; + bool OnInputCommand(const Events::InputCommand& e); + + std::string m_CurrentCommand = ""; }; diff --git a/include/Game/Systems/MainMenuSystem.h b/include/Game/Systems/MainMenuSystem.h new file mode 100644 index 00000000..2e13b557 --- /dev/null +++ b/include/Game/Systems/MainMenuSystem.h @@ -0,0 +1,40 @@ +#ifndef MainMenuSystem_h__ +#define MainMenuSystem_h__ + +#include "Core/System.h" +#include "Rendering/IRenderer.h" +#include "Core/ResourceManager.h" +#include "Core/Event.h" +#include "Systems/SpawnerSystem.h" + + +#include "GUI/EButtonClicked.h" +#include "GUI/EButtonPressed.h" +#include "GUI/EButtonReleased.h" +#include "Input/EInputCommand.h" + + +class MainMenuSystem : public ImpureSystem +{ +public: + MainMenuSystem(SystemParams params, IRenderer* renderer); + virtual void Update(double dt) override; + +private: + IRenderer* m_Renderer; + + EventRelay m_EClicked; + bool OnButtonClick(const Events::ButtonClicked& e); + EventRelay m_EReleased; + bool OnButtonRelease(const Events::ButtonReleased& e); + EventRelay m_EPressed; + bool OnButtonPress(const Events::ButtonPressed& e); + EventRelay m_EInputCommand; + bool OnInputCommand(const Events::InputCommand& e); + + std::string m_CurrentCommand = ""; + EntityWrapper m_OpenSubMenu = EntityWrapper::Invalid; + +}; + +#endif \ No newline at end of file diff --git a/resources/Schema/Entities/MainMenu.xml b/resources/Schema/Entities/MainMenu.xml index 47292c30..cefb25e2 100644 --- a/resources/Schema/Entities/MainMenu.xml +++ b/resources/Schema/Entities/MainMenu.xml @@ -17,6 +17,47 @@ + + + + + + + + + + + + Textures/Core/White.png + true + + + + + + + + + + + + + Credits + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + @@ -101,47 +142,6 @@ - - - - - - - - - - - - Textures/Core/White.png - true - - - - - - - - - - - - - Credits - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - @@ -192,7 +192,7 @@ - + Schema/Entities/ServerList.xml diff --git a/src/Engine/GUI/MainMenuSystem.cpp b/src/Game/Systems/MainMenuSystem.cpp similarity index 53% rename from src/Engine/GUI/MainMenuSystem.cpp rename to src/Game/Systems/MainMenuSystem.cpp index c37aabc1..14cf7e26 100644 --- a/src/Engine/GUI/MainMenuSystem.cpp +++ b/src/Game/Systems/MainMenuSystem.cpp @@ -1,4 +1,4 @@ -#include "GUI/MainMenuSystem.h" +#include "../Game/Systems/MainMenuSystem.h" MainMenuSystem::MainMenuSystem(SystemParams params, IRenderer* renderer) : System(params) @@ -8,6 +8,7 @@ MainMenuSystem::MainMenuSystem(SystemParams params, IRenderer* renderer) EVENT_SUBSCRIBE_MEMBER(m_EPressed, &MainMenuSystem::OnButtonPress); EVENT_SUBSCRIBE_MEMBER(m_EReleased, &MainMenuSystem::OnButtonRelease); EVENT_SUBSCRIBE_MEMBER(m_EClicked, &MainMenuSystem::OnButtonClick); + EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &MainMenuSystem::OnInputCommand); } void MainMenuSystem::Update(double dt) @@ -18,7 +19,8 @@ void MainMenuSystem::Update(double dt) bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e) { if(e.EntityName == "Play") { - //Run play code + //OpenServerList + } else if(e.EntityName == "Connect") { //Run connect code } else if(e.EntityName == "Host") { @@ -52,3 +54,31 @@ bool MainMenuSystem::OnButtonPress(const Events::ButtonPressed& e) return true; } +bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e) +{ + if(e.Command == "Play") { + if (m_OpenSubMenu == EntityWrapper::Invalid) { + //No submenu is open, open one. + + } else if(!m_OpenSubMenu.HasComponent("ServerList")) { + //Menu is open, but not the right one, delete the old one and open a new one. + + } else { + //Serverlist submenu is open, close it. + } + //Create new entity through the spawner. Should also despawn all other menus. + auto menus = m_World->GetComponents("Menu"); + if(menus == nullptr) { + return 0; + } + for (auto& menu : *menus) { + EntityWrapper menuEntity = EntityWrapper(m_World, menu.EntityID); + auto serverListSpawner = menuEntity.FirstChildByName(e.Command + "Spawner"); + if(!serverListSpawner.HasComponent("Spawner")) { + return 0; + } + m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner); + } + } + return true; +} \ No newline at end of file From 155d700a44bd311c500d4cb4462d7972c4fb7b24 Mon Sep 17 00:00:00 2001 From: Teejoon Date: Tue, 8 Mar 2016 16:19:56 +0100 Subject: [PATCH 38/68] WIP --- resources/Shaders/FillDepthBuffer.vert.glsl | 6 +- .../Shaders/FillDepthBufferSkinned.vert.glsl | 6 +- resources/Shaders/ForwardPlus.frag.glsl | 5 +- resources/Shaders/ForwardPlus.vert.glsl | 7 ++- .../Shaders/ForwardPlusShieldCheck.frag.glsl | 5 +- .../Shaders/ForwardPlusSkinned.vert.glsl | 4 +- .../Shaders/ForwardPlusSplatMapRGB.frag.glsl | 3 +- ...orwardPlusSplatMapRGBShieldCheck.frag.glsl | 3 +- resources/Shaders/Picking.vert.glsl | 8 +-- resources/Shaders/PickingSkinned.vert.glsl | 8 +-- resources/Shaders/Sprite.frag.glsl | 2 - resources/Shaders/Sprite.vert.glsl | 6 +- resources/Shaders/StandarUniform.glsl | 55 +++++++++++++++++++ src/Engine/Rendering/DrawFinalPass.cpp | 26 ++++++--- src/Engine/Rendering/PickingPass.cpp | 9 +-- 15 files changed, 104 insertions(+), 49 deletions(-) create mode 100644 resources/Shaders/StandarUniform.glsl diff --git a/resources/Shaders/FillDepthBuffer.vert.glsl b/resources/Shaders/FillDepthBuffer.vert.glsl index ff849790..e8f6838d 100644 --- a/resources/Shaders/FillDepthBuffer.vert.glsl +++ b/resources/Shaders/FillDepthBuffer.vert.glsl @@ -1,8 +1,6 @@ #version 430 -uniform mat4 M; -uniform mat4 V; -uniform mat4 P; +uniform mat4 PVM; layout(location = 0) in vec3 Position; layout(location = 5) in vec4 BoneIndices; @@ -15,7 +13,7 @@ out VertexData{ void main() { - gl_Position = P * V * M * vec4(Position, 1.0); + gl_Position = PVM * vec4(Position, 1.0); Output.Position = Position; } \ No newline at end of file diff --git a/resources/Shaders/FillDepthBufferSkinned.vert.glsl b/resources/Shaders/FillDepthBufferSkinned.vert.glsl index ce2a142d..a1ad5c14 100644 --- a/resources/Shaders/FillDepthBufferSkinned.vert.glsl +++ b/resources/Shaders/FillDepthBufferSkinned.vert.glsl @@ -1,8 +1,6 @@ #version 430 -uniform mat4 M; -uniform mat4 V; -uniform mat4 P; +uniform mat4 PVM; uniform mat4 Bones[100]; @@ -27,7 +25,7 @@ void main() + BoneWeights[3] * Bones[int(BoneIndices[3])]; } - gl_Position = P*V*M*boneTransform * vec4(Position, 1.0); + gl_Position = PVM*boneTransform * vec4(Position, 1.0); Output.Position = vec3(0.0); } \ No newline at end of file diff --git a/resources/Shaders/ForwardPlus.frag.glsl b/resources/Shaders/ForwardPlus.frag.glsl index 8f0f7deb..9de1026d 100644 --- a/resources/Shaders/ForwardPlus.frag.glsl +++ b/resources/Shaders/ForwardPlus.frag.glsl @@ -2,6 +2,7 @@ #define MIN_AMBIENT_LIGHT 0.3 +uniform mat4 VM; uniform mat4 M; uniform mat4 V; uniform mat4 P; @@ -11,7 +12,7 @@ uniform vec2 ScreenDimensions; uniform vec4 FillColor; uniform vec4 AmbientColor; uniform float FillPercentage; -uniform float GlowIntensity = 10; +uniform float GlowIntensity; uniform vec3 CameraPosition; uniform int SSAOQuality; @@ -131,7 +132,7 @@ void main() vec4 diffuseTexel = texture2D(DiffuseTexture, Input.TextureCoordinate * DiffuseUVRepeat); vec4 glowTexel = texture2D(GlowMapTexture, Input.TextureCoordinate * GlowUVRepeat); vec4 specularTexel = texture2D(SpecularMapTexture, Input.TextureCoordinate * SpecularUVRepeat); - vec4 position = V * M * vec4(Input.Position, 1.0); + vec4 position = VM * vec4(Input.Position, 1.0); vec4 normal = V * CalcNormalMappedValue(Input.Normal, Input.Tangent, Input.BiTangent, Input.TextureCoordinate * NormalUVRepeat, NormalMapTexture); normal = normalize(normal); //vec4 normal = normalize(V * vec4(Input.Normal, 0.0)); diff --git a/resources/Shaders/ForwardPlus.vert.glsl b/resources/Shaders/ForwardPlus.vert.glsl index 26686222..ce251c00 100644 --- a/resources/Shaders/ForwardPlus.vert.glsl +++ b/resources/Shaders/ForwardPlus.vert.glsl @@ -1,5 +1,6 @@ #version 430 - +uniform mat4 PVM; +uniform mat4 TIM; uniform mat4 M; uniform mat4 V; uniform mat4 P; @@ -22,8 +23,8 @@ out VertexData{ void main() { - gl_Position = P*V*M * vec4(Position, 1.0); - mat4 TIM = transpose(inverse(M)); + gl_Position = PVM * vec4(Position, 1.0); + //mat4 TIM = transpose(inverse(M)); Output.Position = Position; Output.TextureCoordinate = TextureCoords; Output.Normal = vec3(TIM * vec4(Normal, 0.0)); diff --git a/resources/Shaders/ForwardPlusShieldCheck.frag.glsl b/resources/Shaders/ForwardPlusShieldCheck.frag.glsl index 5995facb..6fcbf881 100644 --- a/resources/Shaders/ForwardPlusShieldCheck.frag.glsl +++ b/resources/Shaders/ForwardPlusShieldCheck.frag.glsl @@ -2,6 +2,7 @@ #define MIN_AMBIENT_LIGHT 0.3 +uniform mat4 VM; uniform mat4 M; uniform mat4 V; uniform mat4 P; @@ -11,7 +12,7 @@ uniform vec2 ScreenDimensions; uniform vec4 FillColor; uniform vec4 AmbientColor; uniform float FillPercentage; -uniform float GlowIntensity = 10; +uniform float GlowIntensity; uniform vec3 CameraPosition; uniform int SSAOQuality; @@ -138,7 +139,7 @@ void main() vec4 diffuseTexel = texture2D(DiffuseTexture, Input.TextureCoordinate * DiffuseUVRepeat); vec4 glowTexel = texture2D(GlowMapTexture, Input.TextureCoordinate * GlowUVRepeat); vec4 specularTexel = texture2D(SpecularMapTexture, Input.TextureCoordinate * SpecularUVRepeat); - vec4 position = V * M * vec4(Input.Position, 1.0); + vec4 position = VM * vec4(Input.Position, 1.0); vec4 normal = V * CalcNormalMappedValue(Input.Normal, Input.Tangent, Input.BiTangent, Input.TextureCoordinate * NormalUVRepeat, NormalMapTexture); normal = normalize(normal); //vec4 normal = normalize(V * vec4(Input.Normal, 0.0)); diff --git a/resources/Shaders/ForwardPlusSkinned.vert.glsl b/resources/Shaders/ForwardPlusSkinned.vert.glsl index 5fd55a8c..0d959caa 100644 --- a/resources/Shaders/ForwardPlusSkinned.vert.glsl +++ b/resources/Shaders/ForwardPlusSkinned.vert.glsl @@ -1,5 +1,7 @@ #version 430 +uniform mat4 PVM; +uniform mat4 TIM; uniform mat4 M; uniform mat4 V; uniform mat4 P; @@ -34,7 +36,7 @@ void main() + BoneWeights[3] * Bones[int(BoneIndices[3])]; } - gl_Position = P*V*M*boneTransform * vec4(Position, 1.0); + gl_Position = PVM*boneTransform * vec4(Position, 1.0); Output.Position = (boneTransform * vec4(Position, 1.0)).xyz; Output.TextureCoordinate = TextureCoords; diff --git a/resources/Shaders/ForwardPlusSplatMapRGB.frag.glsl b/resources/Shaders/ForwardPlusSplatMapRGB.frag.glsl index c67a9c99..e0c73e70 100644 --- a/resources/Shaders/ForwardPlusSplatMapRGB.frag.glsl +++ b/resources/Shaders/ForwardPlusSplatMapRGB.frag.glsl @@ -2,6 +2,7 @@ #define MIN_AMBIENT_LIGHT 0.3 +uniform mat4 VM; uniform mat4 M; uniform mat4 V; uniform mat4 P; @@ -189,7 +190,7 @@ void main() GlowUVRepeat1, GlowUVRepeat2, GlowUVRepeat3); vec4 specularTexel = CalcBlendedTexel(splatTexel, SpecularMapTexture1, SpecularMapTexture2, SpecularMapTexture3, SpecularUVRepeat1, SpecularUVRepeat2, SpecularUVRepeat3); - vec4 position = V * M * vec4(Input.Position, 1.0); + vec4 position = VM * vec4(Input.Position, 1.0); //vec4 normal = V * CalcNormalMappedValue(Input.Normal, Input.Tangent, Input.BiTangent, Input.TextureCoordinate, SplatMapTexture); vec4 normal = V * CalcBlendedNormal(splatTexel, NormalMapTexture1, NormalMapTexture2, NormalMapTexture3, NormalUVRepeat1, NormalUVRepeat2, NormalUVRepeat3); diff --git a/resources/Shaders/ForwardPlusSplatMapRGBShieldCheck.frag.glsl b/resources/Shaders/ForwardPlusSplatMapRGBShieldCheck.frag.glsl index d61726fe..a26d85f5 100644 --- a/resources/Shaders/ForwardPlusSplatMapRGBShieldCheck.frag.glsl +++ b/resources/Shaders/ForwardPlusSplatMapRGBShieldCheck.frag.glsl @@ -2,6 +2,7 @@ #define MIN_AMBIENT_LIGHT 0.3 +uniform mat4 VM; uniform mat4 M; uniform mat4 V; uniform mat4 P; @@ -190,7 +191,7 @@ void main() GlowUVRepeat1, GlowUVRepeat2, GlowUVRepeat3); vec4 specularTexel = CalcBlendedTexel(splatTexel, SpecularMapTexture1, SpecularMapTexture2, SpecularMapTexture3, SpecularUVRepeat1, SpecularUVRepeat2, SpecularUVRepeat3); - vec4 position = V * M * vec4(Input.Position, 1.0); + vec4 position = VM * vec4(Input.Position, 1.0); //vec4 normal = V * CalcNormalMappedValue(Input.Normal, Input.Tangent, Input.BiTangent, Input.TextureCoordinate, SplatMapTexture); vec4 normal = V * CalcBlendedNormal(splatTexel, NormalMapTexture1, NormalMapTexture2, NormalMapTexture3, NormalUVRepeat1, NormalUVRepeat2, NormalUVRepeat3); diff --git a/resources/Shaders/Picking.vert.glsl b/resources/Shaders/Picking.vert.glsl index f888cd16..a10121cf 100644 --- a/resources/Shaders/Picking.vert.glsl +++ b/resources/Shaders/Picking.vert.glsl @@ -1,8 +1,6 @@ #version 430 - -uniform mat4 M; -uniform mat4 V; -uniform mat4 P; +#include "StandarUniform.glsl" +layout(location = PVM_UNIFORM_LOCATION) uniform mat4 PVM; layout(location = 0) in vec3 Position; layout(location = 1) in vec3 Normal; @@ -16,6 +14,6 @@ out VertexData{ void main() { - gl_Position = P*V*M * vec4(Position, 1.0); + gl_Position = PVM * vec4(Position, 1.0); Output.Position = Position, 1.0; } \ No newline at end of file diff --git a/resources/Shaders/PickingSkinned.vert.glsl b/resources/Shaders/PickingSkinned.vert.glsl index 205a8fdd..98a5b394 100644 --- a/resources/Shaders/PickingSkinned.vert.glsl +++ b/resources/Shaders/PickingSkinned.vert.glsl @@ -1,8 +1,6 @@ #version 430 - -uniform mat4 M; -uniform mat4 V; -uniform mat4 P; +#include "StandarUniform.glsl" +layout(location = PVM_UNIFORM_LOCATION) uniform mat4 PVM; uniform mat4 Bones[100]; layout(location = 0) in vec3 Position; @@ -27,6 +25,6 @@ void main() + BoneWeights[3] * Bones[int(BoneIndices[3])]; } - gl_Position = P*V*M*boneTransform * vec4(Position, 1.0); + gl_Position = PVM*boneTransform * vec4(Position, 1.0); Output.Position = (boneTransform * vec4(Position, 1.0)).xyz; } \ No newline at end of file diff --git a/resources/Shaders/Sprite.frag.glsl b/resources/Shaders/Sprite.frag.glsl index 754be6ac..1416a9e9 100644 --- a/resources/Shaders/Sprite.frag.glsl +++ b/resources/Shaders/Sprite.frag.glsl @@ -3,8 +3,6 @@ uniform vec4 Color; uniform vec4 FillColor; uniform float FillPercentage; -uniform mat4 M; -uniform mat4 V; uniform mat4 P; layout (binding = 1) uniform sampler2D DiffuseTexture; diff --git a/resources/Shaders/Sprite.vert.glsl b/resources/Shaders/Sprite.vert.glsl index c09d745b..82c4c9bb 100644 --- a/resources/Shaders/Sprite.vert.glsl +++ b/resources/Shaders/Sprite.vert.glsl @@ -1,8 +1,6 @@ #version 430 -uniform mat4 M; -uniform mat4 V; -uniform mat4 P; +uniform mat4 PVM; layout(location = 0) in vec3 Position; layout(location = 1) in vec3 Normal; @@ -17,7 +15,7 @@ out VertexData{ void main() { - gl_Position = P * V * M * vec4(Position, 1.0); + gl_Position = PVM* vec4(Position, 1.0); Output.Position = Position; Output.TextureCoordinate = TextureCoords; diff --git a/resources/Shaders/StandarUniform.glsl b/resources/Shaders/StandarUniform.glsl new file mode 100644 index 00000000..9fc4b6f8 --- /dev/null +++ b/resources/Shaders/StandarUniform.glsl @@ -0,0 +1,55 @@ +//----- SHADER DEFINES ----- +#define MAX_BONES 100 +#define MIN_AMBIENT_LIGHT 0.3 + +//----- UNIFORM LOCATION ----- +#define PVM_UNIFORM_LOCATION 100 +#define VM_UNIFORM_LOCATION 101 +#define VP_UNIFORM_LOCATION 102 +#define TIM_UNIFORM_LOCATION 103 +#define M_UNIFORM_LOCATION 104 +#define V_UNIFORM_LOCATION 105 +#define P_UNIFORM_LOCATION 106 + +#define BONES_LOCATION 200 + +#define AMBIENT_COLOR_UNIFORM_LOCATION 300 +#define COLOR_UNIFORM_LOCATION 301 +#define DIFFUSE_COLOR_UNIFORM_LOCATION 302 +#define SCREEN_DIMENSIONS_UNIFORM_LOCATION 303 +#define FILL_COLOR_UNIFORM_LOCATION 304 +#define FILL_PERCENTAGE_UNIFORM_LOCATION 305 +#define GLOW_INTENSITY_UNIFORM_LOCATION 306 +#define CAMERA_POSITION_UNIFORM_LOCATION 306 +#define SSAO_QUALITY_UNIFORM_LOCATION 308 + +#define LOCAL_UNIFORM_LOCATION1; + +//----- TEXTURE LOCATION ----- +#define SSAO_TEXTURE_LOCATION 0 +#define SHADOW_TEXTURE_LOCATION 1 +#define LOCAL_TEXTURE_LOCATION1 2 +#define LOCAL_TEXTURE_LOCATION2 3 +#define LOCAL_TEXTURE_LOCATION3 4 +#define LOCAL_TEXTURE_LOCATION4 5 +#define LOCAL_TEXTURE_LOCATION5 6 +#define LOCAL_TEXTURE_LOCATION6 7 +#define LOCAL_TEXTURE_LOCATION7 8 +#define LOCAL_TEXTURE_LOCATION8 9 +#define LOCAL_TEXTURE_LOCATION9 10 +#define LOCAL_TEXTURE_LOCATION10 11 +#define LOCAL_TEXTURE_LOCATION11 12 +#define LOCAL_TEXTURE_LOCATION12 13 +#define LOCAL_TEXTURE_LOCATION13 14 +#define LOCAL_TEXTURE_LOCATION14 15 +#define LOCAL_TEXTURE_LOCATION15 16 +#define LOCAL_TEXTURE_LOCATION16 17 +#define LOCAL_TEXTURE_LOCATION17 18 +#define LOCAL_TEXTURE_LOCATION18 19 +#define LOCAL_TEXTURE_LOCATION19 20 +#define LOCAL_TEXTURE_LOCATION20 21 +#define LOCAL_TEXTURE_LOCATION21 22 +#define LOCAL_TEXTURE_LOCATION22 23 +#define LOCAL_TEXTURE_LOCATION23 24 +#define LOCAL_TEXTURE_LOCATION24 25 +#define LOCAL_TEXTURE_LOCATION25 26 diff --git a/src/Engine/Rendering/DrawFinalPass.cpp b/src/Engine/Rendering/DrawFinalPass.cpp index 1bd0b82b..b364688a 100644 --- a/src/Engine/Rendering/DrawFinalPass.cpp +++ b/src/Engine/Rendering/DrawFinalPass.cpp @@ -961,9 +961,8 @@ void DrawFinalPass::DrawToDepthStencilBuffer(std::listModel->IsSkinned()) { m_FillDepthStencilBufferSkinnedProgram->Bind(); GLuint shaderHandle = m_FillDepthStencilBufferSkinnedProgram->GetHandle(); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix)); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); + GLERROR("Bind PVM uniform"); std::vector frameBones; if (modelJob->BlendTree != nullptr) { @@ -976,9 +975,8 @@ void DrawFinalPass::DrawToDepthStencilBuffer(std::listBind(); GLuint shaderHandle = m_FillDepthStencilBufferProgram->GetHandle(); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix)); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); + GLERROR("Bind PVM uniform"); } @@ -1008,8 +1006,8 @@ void DrawFinalPass::DrawSprites(std::list>&jobs, Rend if(spriteJob->Depth == 0) { jobState.Disable(GL_DEPTH_TEST); } - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(spriteJob->Matrix)); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * spriteJob->Matrix)); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); glUniform3fv(glGetUniformLocation(shaderHandle, "CameraPos"), 1, glm::value_ptr(scene.Camera->Position())); glUniform4fv(glGetUniformLocation(shaderHandle, "Color"), 1, glm::value_ptr(spriteJob->Color)); @@ -1049,6 +1047,12 @@ void DrawFinalPass::BindExplosionUniforms(GLuint shaderHandle, std::shared_ptrProjectionMatrix())); GLERROR("Bind 4 uniform"); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * job->Matrix)); + GLERROR("Bind PVM uniform"); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "VM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix() * job->Matrix)); + GLERROR("Bind VM uniform"); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "TIM"), 1, GL_FALSE, glm::value_ptr(glm::transpose(glm::inverse(job->Matrix)))); + GLERROR("Bind TIM uniform"); glUniform2f(glGetUniformLocation(shaderHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); GLERROR("Bind 5 uniform"); @@ -1101,6 +1105,12 @@ void DrawFinalPass::BindModelUniforms(GLuint shaderHandle, std::shared_ptrProjectionMatrix())); GLERROR("Bind 4 uniform"); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * job->Matrix)); + GLERROR("Bind PVM uniform"); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "VM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix() * job->Matrix)); + GLERROR("Bind VM uniform"); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "TIM"), 1, GL_FALSE, glm::value_ptr(glm::transpose(glm::inverse(job->Matrix)))); + GLERROR("Bind TIM uniform"); GLint Location_ScreenDimensions = glGetUniformLocation(shaderHandle, "ScreenDimensions"); glUniform2f(Location_ScreenDimensions, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); diff --git a/src/Engine/Rendering/PickingPass.cpp b/src/Engine/Rendering/PickingPass.cpp index f21e3f94..3f97e375 100644 --- a/src/Engine/Rendering/PickingPass.cpp +++ b/src/Engine/Rendering/PickingPass.cpp @@ -63,7 +63,6 @@ void PickingPass::Draw(RenderScene& scene) GLuint shaderHandle = m_PickingProgram->GetHandle(); GLuint shaderSkinnedHandle = m_PickingSkinnedProgram->GetHandle(); m_PickingProgram->Bind(); - if (scene.ClearDepth) { //glClear(GL_DEPTH_BUFFER_BIT); state->Disable(GL_DEPTH_TEST); @@ -100,9 +99,7 @@ void PickingPass::Draw(RenderScene& scene) if (modelJob->Model->IsSkinned()) { m_PickingSkinnedProgram->Bind(); - glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix)); - glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniformMatrix4fv(100, 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); glUniform2fv(glGetUniformLocation(shaderSkinnedHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1]))); std::vector frameBones; @@ -116,9 +113,7 @@ void PickingPass::Draw(RenderScene& scene) } else { m_PickingProgram->Bind(); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix)); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniformMatrix4fv(100, 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); glUniform2fv(glGetUniformLocation(shaderHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1]))); } From 52d3cb3ebf3e09d0fa70be0e5b9d8b8a8d7c9233 Mon Sep 17 00:00:00 2001 From: verysecrethero Date: Tue, 8 Mar 2016 16:33:08 +0100 Subject: [PATCH 39/68] GetPlayerAmmo is now a SetPlayerAmmo instead to fix some potential problems if the player has no weapon at all --- include/Game/Systems/AmmoPickupSystem.h | 2 +- src/Game/Systems/AmmoPickupSystem.cpp | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/include/Game/Systems/AmmoPickupSystem.h b/include/Game/Systems/AmmoPickupSystem.h index d34427e3..1e61dd32 100644 --- a/include/Game/Systems/AmmoPickupSystem.h +++ b/include/Game/Systems/AmmoPickupSystem.h @@ -50,7 +50,7 @@ private: //helper methods bool DoesPlayerHaveMaxAmmo(EntityWrapper &player); PlayerClass DetermineClass(EntityWrapper &player); - int& GetPlayerAmmo(EntityWrapper &player); + void SetPlayerAmmo(EntityWrapper &player, int ammoGain); int GetPlayerMaxAmmo(EntityWrapper &player); }; #endif diff --git a/src/Game/Systems/AmmoPickupSystem.cpp b/src/Game/Systems/AmmoPickupSystem.cpp index 21101b69..ea4561c6 100644 --- a/src/Game/Systems/AmmoPickupSystem.cpp +++ b/src/Game/Systems/AmmoPickupSystem.cpp @@ -67,16 +67,18 @@ bool AmmoPickupSystem::DoesPlayerHaveMaxAmmo(EntityWrapper &player) { return false; } } -int& AmmoPickupSystem::GetPlayerAmmo(EntityWrapper &player) { +void AmmoPickupSystem::SetPlayerAmmo(EntityWrapper &player, int ammoGain) { + int maxWeaponAmmo = GetPlayerMaxAmmo(player); + PlayerClass playerClass = DetermineClass(player); if (playerClass == PlayerClass::Defender) { - return (int)player["DefenderWeapon"]["Ammo"]; + (int&)player["DefenderWeapon"]["Ammo"] = std::min((int)player["DefenderWeapon"]["Ammo"] + ammoGain, maxWeaponAmmo); } else if (playerClass == PlayerClass::Sniper) { - return (int)player["SniperWeapon"]["Ammo"]; + (int&)player["SniperWeapon"]["Ammo"] = std::min((int)player["SniperWeapon"]["Ammo"] + ammoGain, maxWeaponAmmo); } else if (playerClass == PlayerClass::Assault) { - return (int)player["AssaultWeapon"]["Ammo"]; + (int&)player["AssaultWeapon"]["Ammo"] = std::min((int)player["AssaultWeapon"]["Ammo"] + ammoGain, maxWeaponAmmo); } else { - //TODO: should really return something here + //unknown class - ignore } } int AmmoPickupSystem::GetPlayerMaxAmmo(EntityWrapper &player) { @@ -141,12 +143,9 @@ bool AmmoPickupSystem::OnAmmoPickup(Events::AmmoPickup & e) if (DoesPlayerHaveMaxAmmo(e.Player)) { return false; } - int maxWeaponAmmo = GetPlayerMaxAmmo(e.Player); - int& currentAmmo = GetPlayerAmmo(e.Player); + SetPlayerAmmo(e.Player, e.AmmoGain); - currentAmmo = std::min(currentAmmo + e.AmmoGain, maxWeaponAmmo); - - return false; + return true; } bool AmmoPickupSystem::OnTriggerLeave(Events::TriggerLeave& e) { From ba9208085b4212c9c6d59989ac5a57bdd2113356 Mon Sep 17 00:00:00 2001 From: Tleety Date: Tue, 8 Mar 2016 16:52:56 +0100 Subject: [PATCH 40/68] WIP --- include/Game/Systems/ServerListSystem.h | 22 ++++++++++++ resources/Schema/Entities/ServerList.xml | 2 +- src/Game/Game.cpp | 2 +- src/Game/Systems/MainMenuSystem.cpp | 44 ++++++++++++++++-------- src/Game/Systems/ServerListSystem.cpp | 19 ++++++++++ 5 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 include/Game/Systems/ServerListSystem.h create mode 100644 src/Game/Systems/ServerListSystem.cpp diff --git a/include/Game/Systems/ServerListSystem.h b/include/Game/Systems/ServerListSystem.h new file mode 100644 index 00000000..a0d8b99b --- /dev/null +++ b/include/Game/Systems/ServerListSystem.h @@ -0,0 +1,22 @@ +#ifndef ServerListSystem_h__ +#define ServerListSystem_h__ + +#include "Core/System.h" +#include "Rendering/IRenderer.h" +#include "Core/ResourceManager.h" +#include "Core/Event.h" +#include "Systems/SpawnerSystem.h" + +class ServerListSystem : public PureSystem +{ +public: + ServerListSystem(SystemParams params, IRenderer* renderer); + virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cServerList, double dt) override; + + void RefreshList(); + +private: + IRenderer* m_Renderer; +}; + +#endif \ No newline at end of file diff --git a/resources/Schema/Entities/ServerList.xml b/resources/Schema/Entities/ServerList.xml index be16fa16..90773f90 100644 --- a/resources/Schema/Entities/ServerList.xml +++ b/resources/Schema/Entities/ServerList.xml @@ -2,7 +2,7 @@ - + diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index 8f589e34..2897e0d7 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -36,7 +36,7 @@ #include "Game/Systems/BoostIconsHUDSystem.h" #include "Game/Systems/ScoreScreenSystem.h" #include "GUI/ButtonSystem.h" -#include "GUI/MainMenuSystem.h" +#include "Game/Systems/MainMenuSystem.h" Game::Game(int argc, char* argv[]) diff --git a/src/Game/Systems/MainMenuSystem.cpp b/src/Game/Systems/MainMenuSystem.cpp index 14cf7e26..ce95e280 100644 --- a/src/Game/Systems/MainMenuSystem.cpp +++ b/src/Game/Systems/MainMenuSystem.cpp @@ -56,28 +56,44 @@ bool MainMenuSystem::OnButtonPress(const Events::ButtonPressed& e) bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e) { - if(e.Command == "Play") { + if(e.Command == "Play" && e.Value == 1) { + auto menus = m_World->GetComponents("Menu"); + if (menus == nullptr) { + return 0; + } + if (m_OpenSubMenu == EntityWrapper::Invalid) { //No submenu is open, open one. + for (auto& menu : *menus) { + EntityWrapper menuEntity = EntityWrapper(m_World, menu.EntityID); + auto serverListSpawner = menuEntity.FirstChildByName(e.Command + "Spawner"); + if (!serverListSpawner.HasComponent("Spawner")) { + return 0; + } + m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner); + break; + } } else if(!m_OpenSubMenu.HasComponent("ServerList")) { //Menu is open, but not the right one, delete the old one and open a new one. + m_World->DeleteEntity(m_OpenSubMenu.ID); + m_OpenSubMenu = EntityWrapper::Invalid; + + for (auto& menu : *menus) { + EntityWrapper menuEntity = EntityWrapper(m_World, menu.EntityID); + auto serverListSpawner = menuEntity.FirstChildByName(e.Command + "Spawner"); + if (!serverListSpawner.HasComponent("Spawner")) { + return 0; + } + m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner); + } + } else { //Serverlist submenu is open, close it. - } - //Create new entity through the spawner. Should also despawn all other menus. - auto menus = m_World->GetComponents("Menu"); - if(menus == nullptr) { - return 0; - } - for (auto& menu : *menus) { - EntityWrapper menuEntity = EntityWrapper(m_World, menu.EntityID); - auto serverListSpawner = menuEntity.FirstChildByName(e.Command + "Spawner"); - if(!serverListSpawner.HasComponent("Spawner")) { - return 0; - } - m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner); + printf("\n\nMenuShit\n\n"); + m_World->DeleteEntity(m_OpenSubMenu.ID); + m_OpenSubMenu = EntityWrapper::Invalid; } } return true; diff --git a/src/Game/Systems/ServerListSystem.cpp b/src/Game/Systems/ServerListSystem.cpp new file mode 100644 index 00000000..3d79a7b0 --- /dev/null +++ b/src/Game/Systems/ServerListSystem.cpp @@ -0,0 +1,19 @@ +#include "../Game/Systems/ServerListSystem.h" + +ServerListSystem::ServerListSystem(SystemParams params, IRenderer* renderer) + : System(params) + , PureSystem("ServerList") + , m_Renderer(renderer) +{ + +} + +void ServerListSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cServerList, double dt) +{ + +} + +void ServerListSystem::RefreshList() +{ + +} From 1d8b5abfde470f952630cf6153b809d78187e050 Mon Sep 17 00:00:00 2001 From: Tleety Date: Tue, 8 Mar 2016 16:53:35 +0100 Subject: [PATCH 41/68] Fuck aff --- include/Engine/GUI/MainMenuSystem.h | 39 ----------------------------- 1 file changed, 39 deletions(-) delete mode 100644 include/Engine/GUI/MainMenuSystem.h diff --git a/include/Engine/GUI/MainMenuSystem.h b/include/Engine/GUI/MainMenuSystem.h deleted file mode 100644 index 7fb65828..00000000 --- a/include/Engine/GUI/MainMenuSystem.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef MainMenuSystem_h__ -#define MainMenuSystem_h__ - -#include "../Core/System.h" -#include "../Rendering/IRenderer.h" -#include "../Core/ResourceManager.h" -#include "../Core/Event.h" -#include "Systems/SpawnerSystem.h" - - -#include "EButtonClicked.h" -#include "EButtonPressed.h" -#include "EButtonReleased.h" -#include "../Input/EInputCommand.h" - - -class MainMenuSystem : public ImpureSystem -{ -public: - MainMenuSystem(SystemParams params, IRenderer* renderer); - virtual void Update(double dt) override; - -private: - IRenderer* m_Renderer; - - EventRelay m_EClicked; - bool OnButtonClick(const Events::ButtonClicked& e); - EventRelay m_EReleased; - bool OnButtonRelease(const Events::ButtonReleased& e); - EventRelay m_EPressed; - bool OnButtonPress(const Events::ButtonPressed& e); - EventRelay m_EInputCommand; - bool OnInputCommand(const Events::InputCommand& e); - - std::string m_CurrentCommand = ""; - -}; - -#endif \ No newline at end of file From 3394d650556f3b773d1ada5af0a6596a08a42c40 Mon Sep 17 00:00:00 2001 From: Tleety Date: Tue, 8 Mar 2016 18:13:21 +0100 Subject: [PATCH 42/68] Servers now show up in the server list. --- include/Game/Systems/MainMenuSystem.h | 1 + include/Game/Systems/ServerListSystem.h | 6 ++-- resources/Schema/Components/ServerList.xml | 4 +-- resources/Schema/Entities/ServerIdentity.xml | 10 +++--- resources/Schema/Entities/ServerList.xml | 25 +++++++++++-- src/Game/Game.cpp | 2 ++ src/Game/Systems/MainMenuSystem.cpp | 10 ++++-- src/Game/Systems/ServerListSystem.cpp | 37 ++++++++++++++++++-- 8 files changed, 80 insertions(+), 15 deletions(-) diff --git a/include/Game/Systems/MainMenuSystem.h b/include/Game/Systems/MainMenuSystem.h index 2e13b557..c62e98c5 100644 --- a/include/Game/Systems/MainMenuSystem.h +++ b/include/Game/Systems/MainMenuSystem.h @@ -12,6 +12,7 @@ #include "GUI/EButtonPressed.h" #include "GUI/EButtonReleased.h" #include "Input/EInputCommand.h" +#include "Network/ESearchForServers.h" class MainMenuSystem : public ImpureSystem diff --git a/include/Game/Systems/ServerListSystem.h b/include/Game/Systems/ServerListSystem.h index 6fbb954d..014c8881 100644 --- a/include/Game/Systems/ServerListSystem.h +++ b/include/Game/Systems/ServerListSystem.h @@ -6,8 +6,10 @@ #include "Core/ResourceManager.h" #include "Core/Event.h" #include "Systems/SpawnerSystem.h" +#include "Core/EventBroker.h" #include "Network/ESearchForServers.h" +#include "Network/EDisplayServerlist.h" class ServerListSystem : public PureSystem { @@ -20,8 +22,8 @@ public: private: IRenderer* m_Renderer; - //EventRelay m_EServerListRecieved; - //bool OnServerListRecieved(const Events::SomeEventLol& e) + EventRelay m_EServerListRecieved; + bool OnServerListRecieved(const Events::DisplayServerlist& e); }; #endif \ No newline at end of file diff --git a/resources/Schema/Components/ServerList.xml b/resources/Schema/Components/ServerList.xml index d3571d07..e4dbfcad 100644 --- a/resources/Schema/Components/ServerList.xml +++ b/resources/Schema/Components/ServerList.xml @@ -1,6 +1,6 @@ - + 0 0 - \ No newline at end of file + \ No newline at end of file diff --git a/resources/Schema/Entities/ServerIdentity.xml b/resources/Schema/Entities/ServerIdentity.xml index ca803c34..5e94b7b5 100644 --- a/resources/Schema/Entities/ServerIdentity.xml +++ b/resources/Schema/Entities/ServerIdentity.xml @@ -23,7 +23,7 @@ IP - + @@ -44,7 +44,7 @@ Port - + @@ -64,7 +64,9 @@ ServerIdentity ServerName - + + + @@ -84,7 +86,7 @@ PlayersConnected - + diff --git a/resources/Schema/Entities/ServerList.xml b/resources/Schema/Entities/ServerList.xml index 90773f90..f3a7da68 100644 --- a/resources/Schema/Entities/ServerList.xml +++ b/resources/Schema/Entities/ServerList.xml @@ -2,7 +2,9 @@ - + + + @@ -10,10 +12,23 @@ - + - + + + + + Schema/Entities/ServerIdentity.xml + + + + + + + + + @@ -38,6 +53,10 @@ + + RefreshServerList + 1 + diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index a40b13c6..81d6392f 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -37,6 +37,7 @@ #include "Game/Systems/ScoreScreenSystem.h" #include "GUI/ButtonSystem.h" #include "Game/Systems/MainMenuSystem.h" +#include "Game/Systems/ServerListSystem.h" Game::Game(int argc, char* argv[]) @@ -149,6 +150,7 @@ Game::Game(int argc, char* argv[]) m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer); m_SystemPipeline->AddSystem(updateOrderLevel); m_SystemPipeline->AddSystem(updateOrderLevel); + m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer); // Populate Octree with collidables ++updateOrderLevel; m_SystemPipeline->AddSystem(updateOrderLevel, m_OctreeCollision, "Collidable"); diff --git a/src/Game/Systems/MainMenuSystem.cpp b/src/Game/Systems/MainMenuSystem.cpp index ce95e280..0540485f 100644 --- a/src/Game/Systems/MainMenuSystem.cpp +++ b/src/Game/Systems/MainMenuSystem.cpp @@ -71,6 +71,8 @@ bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e) return 0; } m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner); + Events::SearchForServers event; + m_EventBroker->Publish(event); break; } @@ -86,15 +88,19 @@ bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e) return 0; } m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner); + Events::SearchForServers event; + m_EventBroker->Publish(event); + break; } - - } else { //Serverlist submenu is open, close it. printf("\n\nMenuShit\n\n"); m_World->DeleteEntity(m_OpenSubMenu.ID); m_OpenSubMenu = EntityWrapper::Invalid; } + } else if (e.Command == "RefreshServerList" && e.Value == 1){ + Events::SearchForServers event; + m_EventBroker->Publish(event); } return true; } \ No newline at end of file diff --git a/src/Game/Systems/ServerListSystem.cpp b/src/Game/Systems/ServerListSystem.cpp index 6b3efccf..f2813b64 100644 --- a/src/Game/Systems/ServerListSystem.cpp +++ b/src/Game/Systems/ServerListSystem.cpp @@ -5,7 +5,7 @@ ServerListSystem::ServerListSystem(SystemParams params, IRenderer* renderer) , PureSystem("ServerList") , m_Renderer(renderer) { - //Subscribe to OnServerListRecieved + EVENT_SUBSCRIBE_MEMBER(m_EServerListRecieved, &ServerListSystem::OnServerListRecieved); } void ServerListSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cServerList, double dt) @@ -15,6 +15,39 @@ void ServerListSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& void ServerListSystem::RefreshList() { - //Send out request for a server list. + Events::SearchForServers event; + m_EventBroker->Publish(event); } + +bool ServerListSystem::OnServerListRecieved(const Events::DisplayServerlist& e) +{ + if (e.Serverlist.size() == 0) { + return 1; + } + auto serverLists = m_World->GetComponents("ServerList"); + if (serverLists == nullptr) + return 1; + for (auto& cServerList : *serverLists) { + EntityWrapper serverListEntity = EntityWrapper(m_World, cServerList.EntityID); + EntityWrapper identitySpawner = serverListEntity.FirstChildByName("ServerIdentitySpawner"); + identitySpawner.DeleteChildren(); + + (int&)cServerList["TotalIdentities"] = (int)e.Serverlist.size(); + for (int i = 0; i < e.Serverlist.size(); i++) { + //Create Identities for each server and place them on the right position. + EntityWrapper newIdentity = SpawnerSystem::Spawn(identitySpawner, identitySpawner); + + glm::vec3 offset = (glm::vec3)serverListEntity["ServerList"]["Offset"]; + (glm::vec3&)newIdentity["Transform"]["Position"] = offset * (float)i; + + auto& cIdentity = newIdentity["ServerIdentity"]; + (std::string&)cIdentity["IP"] = e.Serverlist[i].Address; + (std::string&)cIdentity["ServerName"] = e.Serverlist[i].Name; + (int&)cIdentity["Port"] = e.Serverlist[i].Port; + (int&)cIdentity["PlayersConnected"] = e.Serverlist[i].PlayersConnected; + } + } + + return 1; +} From 7bc3c9f7b17a3a89e8a09dc8b27a1124b45a24b6 Mon Sep 17 00:00:00 2001 From: William Moberg Date: Tue, 8 Mar 2016 18:26:17 +0100 Subject: [PATCH 43/68] Don't force to spectator camera if player presses pickTeam/Class prematurely. Players team should be remembered after picked, spawn request is not erased anymore. --- include/Game/Systems/PlayerDeathSystem.h | 2 ++ src/Game/Systems/PlayerDeathSystem.cpp | 12 ++++++++++++ src/Game/Systems/PlayerSpawnSystem.cpp | 12 ++++-------- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/include/Game/Systems/PlayerDeathSystem.h b/include/Game/Systems/PlayerDeathSystem.h index 5a82f999..91b9997b 100644 --- a/include/Game/Systems/PlayerDeathSystem.h +++ b/include/Game/Systems/PlayerDeathSystem.h @@ -24,6 +24,8 @@ private: bool OnPlayerDeath(Events::PlayerDeath& e); EventRelay m_EEntityDeleted; bool OnEntityDeleted(Events::EntityDeleted& e); + EventRelay m_EInputCommand; + bool OnInputCommand(Events::InputCommand& e); void setSpectatorCamera(); void createDeathEffect(EntityWrapper player); diff --git a/src/Game/Systems/PlayerDeathSystem.cpp b/src/Game/Systems/PlayerDeathSystem.cpp index c562e530..4b7606e7 100644 --- a/src/Game/Systems/PlayerDeathSystem.cpp +++ b/src/Game/Systems/PlayerDeathSystem.cpp @@ -6,6 +6,7 @@ PlayerDeathSystem::PlayerDeathSystem(SystemParams params) { EVENT_SUBSCRIBE_MEMBER(m_OnPlayerDeath, &PlayerDeathSystem::OnPlayerDeath); EVENT_SUBSCRIBE_MEMBER(m_EEntityDeleted, &PlayerDeathSystem::OnEntityDeleted); + EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &PlayerDeathSystem::OnInputCommand); } void PlayerDeathSystem::Update(double dt) @@ -90,3 +91,14 @@ void PlayerDeathSystem::setSpectatorCamera() Events::UnlockMouse unlock; m_EventBroker->Publish(unlock); } + +bool PlayerDeathSystem::OnInputCommand(Events::InputCommand& e) +{ + if (e.Value == 0 || e.Command != "SwapToTeamPick" && e.Command != "SwapToClassPick") { + return false; + } + + // Ensure that we don't set spectator camera if the player deliberately changes to class/team pick. + m_LocalPlayerDeathEffect = EntityWrapper::Invalid; + return true; +} \ No newline at end of file diff --git a/src/Game/Systems/PlayerSpawnSystem.cpp b/src/Game/Systems/PlayerSpawnSystem.cpp index e13f1bdc..0c0c60a1 100644 --- a/src/Game/Systems/PlayerSpawnSystem.cpp +++ b/src/Game/Systems/PlayerSpawnSystem.cpp @@ -134,16 +134,12 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) auto iter = m_SpawnRequests.begin(); for (; iter != m_SpawnRequests.end(); ++iter) { if (iter->PlayerID == e.PlayerID) { - // If player wants to switch team, remove their spawn request. - if (e.Command == "SwapToTeamPick") { - m_SpawnRequests.erase(iter); - } else if (e.Command == "SwapToClassPick") { - // If player wants to switch class, remove their selected class so they don't spawn. + // If player wants to switch team or class , remove their selected class so they don't spawn. + if (e.Command == "SwapToTeamPick" || e.Command == "SwapToClassPick") { iter->Class = -1; - } else { - break; + return true; } - return true; + break; } } From 95f68cc888feea74f20ae51d65712102357b5263 Mon Sep 17 00:00:00 2001 From: Tleety Date: Tue, 8 Mar 2016 22:24:32 +0100 Subject: [PATCH 44/68] ConnectRequest event and some other shit --- include/Engine/Network/EConnectRequest.h | 17 + include/Game/Systems/MainMenuSystem.h | 1 + .../Schema/Components/ServerIdentity.xml | 4 +- .../Schema/Entities/NewMapWSpectatorCam.xml | 3142 +++++++++-------- .../Schema/Entities/QualityAssurance.xml | 62 +- resources/Schema/Entities/ServerIdentity.xml | 192 +- resources/Schema/Entities/ServerList.xml | 6 +- src/Game/Systems/MainMenuSystem.cpp | 31 +- 8 files changed, 1753 insertions(+), 1702 deletions(-) create mode 100644 include/Engine/Network/EConnectRequest.h diff --git a/include/Engine/Network/EConnectRequest.h b/include/Engine/Network/EConnectRequest.h new file mode 100644 index 00000000..b6bf781b --- /dev/null +++ b/include/Engine/Network/EConnectRequest.h @@ -0,0 +1,17 @@ +#ifndef Events_ConnectRequest_h__ +#define Events_ConnectRequest_h__ + +#include "Core/EventBroker.h" + +namespace Events +{ + +struct ConnectRequest : public Event +{ + std::string IP = ""; + int Port = 0; +}; + +} +#endif + diff --git a/include/Game/Systems/MainMenuSystem.h b/include/Game/Systems/MainMenuSystem.h index c62e98c5..ddefcbf4 100644 --- a/include/Game/Systems/MainMenuSystem.h +++ b/include/Game/Systems/MainMenuSystem.h @@ -13,6 +13,7 @@ #include "GUI/EButtonReleased.h" #include "Input/EInputCommand.h" #include "Network/ESearchForServers.h" +#include "Network/EConnectRequest.h" class MainMenuSystem : public ImpureSystem diff --git a/resources/Schema/Components/ServerIdentity.xml b/resources/Schema/Components/ServerIdentity.xml index b14a309c..1d44e690 100644 --- a/resources/Schema/Components/ServerIdentity.xml +++ b/resources/Schema/Components/ServerIdentity.xml @@ -1,7 +1,7 @@ - 0.0.0.0 - 0 + 123.123.123.123 + 65999 UnkownServer 0 \ No newline at end of file diff --git a/resources/Schema/Entities/NewMapWSpectatorCam.xml b/resources/Schema/Entities/NewMapWSpectatorCam.xml index 395eb1de..4223909f 100644 --- a/resources/Schema/Entities/NewMapWSpectatorCam.xml +++ b/resources/Schema/Entities/NewMapWSpectatorCam.xml @@ -3,7 +3,7 @@ - 15 + 2.2834371376129923 @@ -23,6 +23,18 @@ + + + + + Models/Props/Highground2.mesh + + + + + + + @@ -75,18 +87,6 @@ - - - - - Models/Props/Highground2.mesh - - - - - - - @@ -1843,6 +1843,1006 @@ + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + @@ -3229,88 +4229,6 @@ - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - @@ -3366,6 +4284,60 @@ + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + @@ -3380,6 +4352,34 @@ + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + @@ -3396,1011 +4396,24 @@ - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - - - + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + @@ -4479,19 +4492,6 @@ - - - - - Models/Props/SciFiHolder1.mesh - - - - - - - - @@ -4519,35 +4519,8 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - + + @@ -4574,36 +4547,8 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - + + @@ -4629,36 +4574,8 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - + + @@ -4677,47 +4594,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - @@ -4732,6 +4608,130 @@ + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + @@ -4750,42 +4750,240 @@ - + - - 10 - + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + - + + + - - 1 - - + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + - - 10 - + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + - + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + + + + + Schema/Entities/Player.xml + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + + + @@ -4809,6 +5007,15 @@ + + + + 1 + + + + + @@ -4820,6 +5027,28 @@ + + + + 10 + + + + + + + + + + + 10 + + + + + + + @@ -4833,76 +5062,6 @@ - - - - - Schema/Entities/Player.xml - - - - - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - - - @@ -4924,13 +5083,13 @@ 2 + Models/Core/UnitCylinder.mesh true - @@ -4958,17 +5117,17 @@ + + + + + Models/Core/UnitCylinder.mesh true - - - - - @@ -4994,13 +5153,13 @@ 3 + Models/Core/UnitCylinder.mesh true - @@ -5027,13 +5186,13 @@ 1.5498908015879351 1 + Models/Core/UnitCylinder.mesh true - @@ -5062,17 +5221,17 @@ 4 + + + + + Models/Core/UnitCylinder.mesh true - - - - - @@ -5086,15 +5245,15 @@ - - - Schema/Entities/PlayerRed.xml - + + + Schema/Entities/PlayerRed.xml + @@ -5121,7 +5280,7 @@ false - + @@ -5134,7 +5293,7 @@ false - + @@ -5154,165 +5313,6 @@ - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - @@ -5321,6 +5321,7 @@ + @@ -5358,21 +5359,21 @@ Textures/Core/UnitHexagon.png - + - + - - 2 - + + 4 + Textures/Core/UnitHexagon_Rotated.png @@ -5401,12 +5402,12 @@ - - 3 - + + 3 + Textures/Core/UnitHexagon_Rotated.png @@ -5426,21 +5427,53 @@ Textures/Core/UnitHexagon.png - + - + - - 4 - + + 2 + + + Textures/Core/UnitHexagon_Rotated.png + + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + Textures/Core/UnitHexagon_Rotated.png @@ -5469,13 +5502,13 @@ - - 1 - 0.10332605343919568 + + 1 + Textures/Core/UnitHexagon_Rotated.png @@ -5490,44 +5523,12 @@ - - - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - 16 + 6 Fonts/DroidSans.ttf,64 @@ -5540,6 +5541,15 @@ + + + + Schema/Entities/MainMenu.xml + + + + + @@ -5555,24 +5565,6 @@ - - - - - Textures/Core/UnitHexagon.png - - - - PickClass - 2 - - - - - - - - @@ -5591,6 +5583,24 @@ + + + + + Textures/Core/UnitHexagon.png + + + + PickClass + 2 + + + + + + + + diff --git a/resources/Schema/Entities/QualityAssurance.xml b/resources/Schema/Entities/QualityAssurance.xml index 7a8f657f..8b88404a 100644 --- a/resources/Schema/Entities/QualityAssurance.xml +++ b/resources/Schema/Entities/QualityAssurance.xml @@ -3,7 +3,7 @@ - 0.8333591884066891 + 3.6154132075906489 @@ -85,7 +85,7 @@ - + @@ -141,7 +141,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -222,7 +222,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -668,7 +668,7 @@ - + @@ -715,7 +715,7 @@ - + @@ -775,7 +775,7 @@ - + @@ -822,7 +822,7 @@ - + @@ -868,7 +868,7 @@ - + @@ -915,7 +915,7 @@ - + @@ -962,7 +962,7 @@ - + @@ -1376,7 +1376,7 @@ - + @@ -1385,7 +1385,7 @@ true - 0.66694876855613217 + 1.5712751414989441 3.7999999523162842 true @@ -1432,7 +1432,7 @@ - + @@ -1441,7 +1441,7 @@ - 2.0168132214141465 + 0.85439856235552725 Models/Characters/Assault/AssaultTPose.mesh @@ -1484,7 +1484,7 @@ - + @@ -1497,7 +1497,7 @@ true - 2.0168132214141465 + 0.85439856235552725 true @@ -1542,7 +1542,7 @@ - + @@ -1552,7 +1552,7 @@ true - 6.6002622626005092 + 7.5223549108000043 10 3 @@ -1600,7 +1600,7 @@ - + @@ -1610,7 +1610,7 @@ true - 0.1169253453956216 + 0.39702717854592606 true 5 true @@ -1793,7 +1793,7 @@ true - 0.66694876855613217 + 1.5712751414989441 3.7999999523162842 true @@ -2156,7 +2156,17 @@ - + + + + + + + + + + + diff --git a/resources/Schema/Entities/ServerIdentity.xml b/resources/Schema/Entities/ServerIdentity.xml index 5e94b7b5..3c47e045 100644 --- a/resources/Schema/Entities/ServerIdentity.xml +++ b/resources/Schema/Entities/ServerIdentity.xml @@ -1,95 +1,121 @@ - + - - + - - 0.0.0.0 - Fonts/DroidSans.ttf,64 - - - - - - - ServerIdentity - ServerIdentity - IP - - - - + + - - - - - - 0 - Fonts/DroidSans.ttf,64 - - - - - - - ServerIdentity - ServerIdentity - Port - - - - - - - - - - - UnkownServer - Fonts/DroidSans.ttf,64 - - - - - - - ServerIdentity - ServerIdentity - ServerName - - - - - - - - - - - 0 - Fonts/DroidSans.ttf,64 - - - - - - - ServerIdentity - ServerIdentity - PlayersConnected - - - - - - + + + + + 123.123.123.123 + Fonts/DroidSans.ttf,64 + + + + + + + ServerIdentity + ServerIdentity + IP + + + + + + + + + + + + 65999 + Fonts/DroidSans.ttf,64 + + + + + + + ServerIdentity + ServerIdentity + Port + + + + + + + + + + + + UnkownServer + Fonts/DroidSans.ttf,64 + + + + + + + ServerIdentity + ServerIdentity + ServerName + + + + + + + + + + + 0 + Fonts/DroidSans.ttf,64 + + + + + + + ServerIdentity + ServerIdentity + PlayersConnected + + + + + + + + + + + + Textures/Core/White.png + true + + false + + + + + + + + + + diff --git a/resources/Schema/Entities/ServerList.xml b/resources/Schema/Entities/ServerList.xml index f3a7da68..68c10bf7 100644 --- a/resources/Schema/Entities/ServerList.xml +++ b/resources/Schema/Entities/ServerList.xml @@ -3,7 +3,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -36,7 +36,7 @@ Textures/Core/White.png true - + diff --git a/src/Game/Systems/MainMenuSystem.cpp b/src/Game/Systems/MainMenuSystem.cpp index 0540485f..6b7015fc 100644 --- a/src/Game/Systems/MainMenuSystem.cpp +++ b/src/Game/Systems/MainMenuSystem.cpp @@ -18,39 +18,26 @@ void MainMenuSystem::Update(double dt) bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e) { - if(e.EntityName == "Play") { - //OpenServerList - - } else if(e.EntityName == "Connect") { - //Run connect code - } else if(e.EntityName == "Host") { - //Run host code - } else if(e.EntityName == "Quit") { - printf("No, you stay"); - } else if (e.EntityName == "Res1080") { - glfwSetWindowSize(m_Renderer->Window(), 1920, 1080); - } else if (e.EntityName == "Res720") { - glfwSetWindowSize(m_Renderer->Window(), 1280, 720); - glViewport(0, 0, 1280, 720); - } else if (e.EntityName == "Res480") { - glfwSetWindowSize(m_Renderer->Window(), 854, 480); - glViewport(0, 0, 854, 480); - } else if (e.EntityName == "FullScreen") { - printf("No fullscreen for now"); + if (e.EntityName == "ServerIdentityConnect") { + EntityWrapper entity = e.Entity; + EntityWrapper serverIdentityEntity = entity.FirstParentWithComponent("ServerIdentity"); + if(serverIdentityEntity.Valid()) { + Events::ConnectRequest event; + event.IP = (std::string)entity["ServerIdentity"]["IP"]; + event.Port = (int)entity["ServerIdentity"]["Port"]; + m_EventBroker->Publish(event); + } } - return true; } bool MainMenuSystem::OnButtonRelease(const Events::ButtonReleased& e) { - return true; } bool MainMenuSystem::OnButtonPress(const Events::ButtonPressed& e) { - return true; } From d7c30450dc3c7df35bd8e56a851bea37ee4d43bc Mon Sep 17 00:00:00 2001 From: stiffly Date: Wed, 9 Mar 2016 10:08:23 +0100 Subject: [PATCH 45/68] Should now read servername from config. --- include/Engine/Network/Server.h | 1 + src/Engine/Network/Server.cpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/Engine/Network/Server.h b/include/Engine/Network/Server.h index 48b7bcfa..f96a4a7d 100644 --- a/include/Engine/Network/Server.h +++ b/include/Engine/Network/Server.h @@ -60,6 +60,7 @@ private: std::vector m_InputCommandsToBroadcast; //Timers std::clock_t m_StartPingTime; + std::string m_ServerName = ""; // Packet loss logic PacketID m_PacketID = 0; diff --git a/src/Engine/Network/Server.cpp b/src/Engine/Network/Server.cpp index 9de3e419..64f2dd59 100644 --- a/src/Engine/Network/Server.cpp +++ b/src/Engine/Network/Server.cpp @@ -7,6 +7,8 @@ Server::Server(World* world, EventBroker* eventBroker, int port) ConfigFile* config = ResourceManager::Load("Config.ini"); snapshotInterval = 1000 * config->Get("Networking.SnapshotInterval", 0.05f); pingIntervalMs = config->Get("Networking.PingIntervalMs", 1000); + m_ServerName = config->Get("Networking.Name", "Unnamed"); + // Subscribe to events EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Server::OnInputCommand); EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &Server::OnPlayerSpawned); @@ -410,7 +412,7 @@ void Server::parseServerlistRequest(boost::asio::ip::udp::endpoint endpoint) Packet packet(MessageType::ServerlistRequest); packet.WriteString(m_Reliable.Address()); packet.WritePrimitive(m_Reliable.Port()); - packet.WriteString("SERVERNAME"); + packet.WriteString(m_ServerName); packet.WritePrimitive(m_ConnectedPlayers.size()); m_ServerlistRequest.Send(packet); } From 6456df8ce1440c92e09749216f0e9616112809c0 Mon Sep 17 00:00:00 2001 From: verysecrethero Date: Wed, 9 Mar 2016 10:44:08 +0100 Subject: [PATCH 46/68] DamageIndicator is now disabled for Friendly fire --- src/Game/Systems/DamageIndicatorSystem.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Game/Systems/DamageIndicatorSystem.cpp b/src/Game/Systems/DamageIndicatorSystem.cpp index 0cc3e717..7e22a0d6 100644 --- a/src/Game/Systems/DamageIndicatorSystem.cpp +++ b/src/Game/Systems/DamageIndicatorSystem.cpp @@ -41,6 +41,11 @@ bool DamageIndicatorSystem::OnPlayerDamage(Events::PlayerDamage& e) return false; } + //friendly fire - return + if (e.Damage < 0.1f) { + return false; + } + glm::vec3 inflictorPos = e.Inflictor["Transform"]["Position"]; //if testing #ifdef INDICATOR_TEST @@ -55,10 +60,6 @@ bool DamageIndicatorSystem::OnPlayerDamage(Events::PlayerDamage& e) m_World->SetParent(sprite.ID, m_CurrentCamera); //simply set the rotation z-wise to the angleBetweenVectors sprite["Transform"]["Orientation"] = glm::vec3(0, 0, angleBetweenVectors); - //friendly fire - change color of the marker - if (e.Damage < 0.1f) { - sprite["Sprite"]["Color"] = glm::vec4(0.0, 1.0f, 1.0f, 1.0f); - } if (!IsServer || !m_NetworkEnabled) { updateDamageIndicatorVector.emplace_back(sprite, inflictorPos); From b782e735564f7cbf9583a9e32462a1e515b20555 Mon Sep 17 00:00:00 2001 From: William Moberg Date: Wed, 9 Mar 2016 10:56:05 +0100 Subject: [PATCH 47/68] Falsified DepthSort for SpectatorCamera buttons and CP-HUD elements. --- .../Schema/Entities/CapturePointHUDGroup.xml | 115 +- .../Schema/Entities/NewMapWSpectatorCam.xml | 2153 +++++++++-------- resources/Schema/Entities/OverwatchCamera.xml | 90 +- 3 files changed, 1209 insertions(+), 1149 deletions(-) diff --git a/resources/Schema/Entities/CapturePointHUDGroup.xml b/resources/Schema/Entities/CapturePointHUDGroup.xml index d35e1bde..0987cc56 100644 --- a/resources/Schema/Entities/CapturePointHUDGroup.xml +++ b/resources/Schema/Entities/CapturePointHUDGroup.xml @@ -13,38 +13,8 @@ Textures/Core/UnitHexagon.png - - - - - - - - - - - 2 - - - - - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - Textures/Core/UnitHexagon.png + + false @@ -54,20 +24,21 @@ + + + 3 - - 0.80222018197612788 - - Textures/Core/UnitHexagon_Rotated.png + + false - + @@ -78,6 +49,8 @@ Textures/Core/UnitHexagon.png + + false @@ -87,19 +60,21 @@ - - 4 - + + 4 + Textures/Core/UnitHexagon_Rotated.png + + false - + @@ -110,6 +85,44 @@ Textures/Core/UnitHexagon.png + + false + + + + + + + + + + + + + + 2 + + + Textures/Core/UnitHexagon_Rotated.png + + false + + + + + + + + + + + + + + + Textures/Core/UnitHexagon.png + + false @@ -119,19 +132,21 @@ - - 1 - + + 1 + Textures/Core/UnitHexagon_Rotated.png + + false - + @@ -142,7 +157,9 @@ Textures/Core/UnitHexagon.png - + + false + @@ -151,17 +168,19 @@ - + Textures/Core/UnitHexagon_Rotated.png + + false - + diff --git a/resources/Schema/Entities/NewMapWSpectatorCam.xml b/resources/Schema/Entities/NewMapWSpectatorCam.xml index a655bef3..66561969 100644 --- a/resources/Schema/Entities/NewMapWSpectatorCam.xml +++ b/resources/Schema/Entities/NewMapWSpectatorCam.xml @@ -3,6 +3,7 @@ + 10.841646792775492 15 @@ -23,6 +24,16 @@ + + + + + Models/Props/Highground4.mesh + + + + + @@ -77,16 +88,6 @@ - - - - - Models/Props/Highground4.mesh - - - - - @@ -2791,11 +2792,425 @@ + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + @@ -2907,6 +3322,18 @@ + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + @@ -3217,6 +3644,19 @@ + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + @@ -3270,19 +3710,6 @@ - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - @@ -3298,20 +3725,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - @@ -3325,20 +3738,6 @@ - - - - - Models/Props/Stones/SmallStone2.mesh - - - - - - - - - @@ -3379,18 +3778,6 @@ - - - - - Models/Props/Walls/MediumWall1.mesh - - - - - - - @@ -3404,47 +3791,6 @@ - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - @@ -3458,19 +3804,6 @@ - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - @@ -3485,19 +3818,6 @@ - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - @@ -3512,19 +3832,6 @@ - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - @@ -3538,20 +3845,6 @@ - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - @@ -3565,100 +3858,6 @@ - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - - - Models/Props/Stones/BigStone.mesh - - - - - - - - - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - - - @@ -3673,18 +3872,6 @@ - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - @@ -3717,6 +3904,19 @@ + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + @@ -3744,19 +3944,6 @@ - - - - - Models/Props/Stones/SmallStone1.mesh - - - - - - - - @@ -3775,20 +3962,6 @@ - - - - - Models/Props/Stones/MediumStone2.mesh - - - - - - - - - @@ -3796,6 +3969,115 @@ + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + Models/Core/UnitPlane.mesh + + true + + + + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + + + + + + + @@ -3823,47 +4105,6 @@ - - - - - Models/Props/Walls/MediumWall2.mesh - - - - - - - - - - - Models/Props/Walls/MediumWall2.mesh - - - - - - - - - - - - - - Models/Core/UnitPlane.mesh - - true - - - - - - - - - @@ -3871,9 +4112,9 @@ Models/Props/Pillars/SciFiBridgePillar1.mesh - - - + + + @@ -3882,10 +4123,10 @@ - Models/Props/Walls/MediumWall1.mesh + Models/Props/Walls/MediumWall3.mesh - + @@ -3893,10 +4134,10 @@ - Models/Props/Walls/MediumWall1.mesh + Models/Props/Walls/MediumWall3.mesh - + @@ -3918,6 +4159,20 @@ + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + @@ -3984,45 +4239,6 @@ - - - - - Models/Props/Walls/MediumWall3.mesh - - - - - - - - - - - Models/Props/Walls/MediumWall3.mesh - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - @@ -4037,49 +4253,6 @@ - - - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - - Models/Core/UnitCube.mesh - - - - - - - - - - - - - - - - Models/Props/Pillars/SciFiBridgePillar1.mesh - - - - - - - - - @@ -4108,8 +4281,21 @@ Models/Props/PickUps/PickUpHolder.mesh - - + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + @@ -4136,9 +4322,9 @@ Models/Props/PickUps/PickUpHolder.mesh - - - + + + @@ -4150,8 +4336,9 @@ Models/Props/PickUps/PickUpHolder.mesh - - + + + @@ -4194,20 +4381,6 @@ - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - @@ -4224,183 +4397,24 @@ - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + @@ -4479,19 +4493,6 @@ - - - - - Models/Props/SciFiHolder1.mesh - - - - - - - - @@ -4519,40 +4520,13 @@ Models/Props/Stones/ShinyStoneCrystalRed.mesh - - + + - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - @@ -4574,36 +4548,9 @@ Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - + + + @@ -4629,8 +4576,35 @@ Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + @@ -4657,8 +4631,22 @@ Models/Props/Stones/ShinyStoneCrystalRed.mesh - - + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + @@ -4670,8 +4658,49 @@ Models/Props/Stones/ShinyStoneCrystalRed.mesh - - + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + @@ -4690,20 +4719,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalRed.mesh - - - - - - - - - @@ -4718,20 +4733,6 @@ - - - - - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - @@ -4750,6 +4751,248 @@ + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + 0.10000000149011612 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + 10 + + + + + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + + + 1 + + + + + + + + + + + 1 + + + + + + + @@ -4774,7 +5017,7 @@ false - + @@ -4800,7 +5043,7 @@ false - + @@ -4813,7 +5056,7 @@ false - + @@ -4829,35 +5072,61 @@ - Models/Props/CapturePoint/CapturePointBlue.mesh + Models/Props/CapturePoint/CapturePointNeutral.mesh - + - - - - 4 + 1.5498908015879351 + 1 - - - - - + Models/Core/UnitCylinder.mesh - + true - - + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 2 + + + + + Models/Core/UnitCylinder.mesh + + true + + + + @@ -4902,39 +5171,6 @@ - - - - - Models/Props/CapturePoint/CapturePointNeutral.mesh - - - - - - - - - - 1.5498908015879351 - 1 - - - - - Models/Core/UnitCylinder.mesh - - true - - - - - - - - - - @@ -4971,28 +5207,35 @@ - Models/Props/CapturePoint/CapturePointNeutral.mesh + Models/Props/CapturePoint/CapturePointBlue.mesh - + - 2 + + + + 4 - + + + + + Models/Core/UnitCylinder.mesh - + true - - + + @@ -5017,6 +5260,19 @@ + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + @@ -5043,19 +5299,6 @@ - - - - - Models/Characters/Assault/AssaultTPose.mesh - false - - - - - - - @@ -5071,248 +5314,6 @@ - - - - - - - - - 10 - - - - - - - - - - - 10 - - - - - - - - - - - 1 - - - - - - - - - - - 10 - - - - - - - - - - 10 - - - - - - - - - - - - - 10 - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - 0.10000000149011612 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - @@ -5321,7 +5322,7 @@ - + @@ -5346,12 +5347,47 @@ + + + + + Textures/Icons/Classes/Assault-01.png + + false + + + PickClass + 1 + + + + + + + + + + + Assault + Fonts/DroidSans.ttf,64 + + + + + + + + + + + Textures/Icons/Classes/Defender-01.png + false PickClass @@ -5385,6 +5421,7 @@ Textures/Icons/Classes/Sniper-01.png + false PickClass @@ -5412,39 +5449,6 @@ - - - - - Textures/Icons/Classes/Assault-01.png - - - - PickClass - 1 - - - - - - - - - - - Assault - Fonts/DroidSans.ttf,64 - - - - - - - - - - - @@ -5465,6 +5469,7 @@ Textures/Core/UnitHexagon.png + false @@ -5542,6 +5547,7 @@ Textures/Core/UnitHexagon.png + false @@ -5575,6 +5581,7 @@ Textures/Core/UnitHexagon.png + false @@ -5608,6 +5615,7 @@ Textures/Core/UnitHexagon.png + false @@ -5641,6 +5649,7 @@ Textures/Core/UnitHexagon.png + false false @@ -5704,7 +5713,7 @@ - 1 + 5 Fonts/DroidSans.ttf,64 @@ -5728,6 +5737,7 @@ Textures/Core/UnitHexagon.png + false @@ -5746,6 +5756,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -5762,6 +5773,7 @@ Textures/Core/UnitHexagon.png + false @@ -5780,6 +5792,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -5796,6 +5809,7 @@ Textures/Core/UnitHexagon.png + false @@ -5814,6 +5828,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -5830,6 +5845,7 @@ Textures/Core/UnitHexagon.png + false @@ -5849,6 +5865,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -5865,6 +5882,7 @@ Textures/Core/UnitHexagon.png + false @@ -5881,6 +5899,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -5900,6 +5919,7 @@ Textures/Core/UnitHexagon.png + false @@ -5946,6 +5966,7 @@ Textures/Core/UnitHexagon.png + false diff --git a/resources/Schema/Entities/OverwatchCamera.xml b/resources/Schema/Entities/OverwatchCamera.xml index 075e57e2..6c93f033 100644 --- a/resources/Schema/Entities/OverwatchCamera.xml +++ b/resources/Schema/Entities/OverwatchCamera.xml @@ -8,7 +8,7 @@ - + @@ -34,12 +34,47 @@ + + + + + Textures/Icons/Classes/Defender-01.png + + false + + + PickClass + 2 + + + + + + + + + + + Defender + Fonts/DroidSans.ttf,64 + + + + + + + + + + + Textures/Icons/Classes/Sniper-01.png + false PickClass @@ -73,6 +108,7 @@ Textures/Icons/Classes/Assault-01.png + false PickClass @@ -100,39 +136,6 @@ - - - - - Textures/Icons/Classes/Defender-01.png - - - - PickClass - 2 - - - - - - - - - - - Defender - Fonts/DroidSans.ttf,64 - - - - - - - - - - - @@ -153,6 +156,7 @@ Textures/Core/UnitHexagon.png + false @@ -230,6 +234,7 @@ Textures/Core/UnitHexagon.png + false @@ -263,6 +268,7 @@ Textures/Core/UnitHexagon.png + false @@ -296,6 +302,7 @@ Textures/Core/UnitHexagon.png + false @@ -329,6 +336,7 @@ Textures/Core/UnitHexagon.png + false false @@ -392,7 +400,7 @@ - 15 + 7 Fonts/DroidSans.ttf,64 @@ -416,6 +424,7 @@ Textures/Core/UnitHexagon.png + false @@ -434,6 +443,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -450,6 +460,7 @@ Textures/Core/UnitHexagon.png + false @@ -468,6 +479,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -484,6 +496,7 @@ Textures/Core/UnitHexagon.png + false @@ -502,6 +515,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -518,6 +532,7 @@ Textures/Core/UnitHexagon.png + false @@ -537,6 +552,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -553,6 +569,7 @@ Textures/Core/UnitHexagon.png + false @@ -569,6 +586,7 @@ Textures/Core/UnitHexagon_Rotated.png + false @@ -588,6 +606,7 @@ Textures/Core/UnitHexagon.png + false @@ -634,6 +653,7 @@ Textures/Core/UnitHexagon.png + false From 534d6639e5c5f57a878056fddc135a067af88e09 Mon Sep 17 00:00:00 2001 From: William Moberg Date: Wed, 9 Mar 2016 11:35:32 +0100 Subject: [PATCH 48/68] Class enum instead of hardcoded ints. Removed superfluous .Valid() checks. Check for spectator spawnrequest in case they somehow has a class, so we don't get "x players were supposed to be spawned but failed" if it happens. --- include/Game/Systems/PlayerSpawnSystem.h | 10 +++++++- src/Game/Systems/PlayerDeathSystem.cpp | 4 +-- src/Game/Systems/PlayerSpawnSystem.cpp | 30 ++++++++++++---------- src/Game/Systems/SpectatorCameraSystem.cpp | 4 +-- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/include/Game/Systems/PlayerSpawnSystem.h b/include/Game/Systems/PlayerSpawnSystem.h index 17364a81..f74032f7 100644 --- a/include/Game/Systems/PlayerSpawnSystem.h +++ b/include/Game/Systems/PlayerSpawnSystem.h @@ -15,11 +15,19 @@ public: virtual void Update(double dt) override; private: + // This enum must correspond to the command values for PickTeam buttons. + enum class PlayerClass + { + None = 0, + Assault, + Defender, + Sniper + }; struct SpawnRequest { int PlayerID; ComponentInfo::EnumType Team; - ComponentInfo::EnumType Class; + PlayerClass Class; }; bool m_NetworkEnabled = false; diff --git a/src/Game/Systems/PlayerDeathSystem.cpp b/src/Game/Systems/PlayerDeathSystem.cpp index 4b7606e7..9f2900fa 100644 --- a/src/Game/Systems/PlayerDeathSystem.cpp +++ b/src/Game/Systems/PlayerDeathSystem.cpp @@ -35,7 +35,7 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player) //components that we need from player auto playerModel = player.FirstChildByName("PlayerModel"); - if (!playerModel.Valid() || !playerModel.HasComponent("Model") || !playerModel.HasComponent("Animation")) { + if (!playerModel.HasComponent("Model") || !playerModel.HasComponent("Animation")) { if (player == LocalPlayer) { setSpectatorCamera(); } @@ -82,7 +82,7 @@ void PlayerDeathSystem::setSpectatorCamera() { // Look for the spectator camera entity in the level. EntityWrapper spectatorCam = m_World->GetFirstEntityByName("SpectatorCamera"); - if (!spectatorCam.Valid() || !spectatorCam.HasComponent("Camera")) { + if (!spectatorCam.HasComponent("Camera")) { return; } Events::SetCamera eSetCamera; diff --git a/src/Game/Systems/PlayerSpawnSystem.cpp b/src/Game/Systems/PlayerSpawnSystem.cpp index 0c0c60a1..9b7a9faf 100644 --- a/src/Game/Systems/PlayerSpawnSystem.cpp +++ b/src/Game/Systems/PlayerSpawnSystem.cpp @@ -63,10 +63,9 @@ void PlayerSpawnSystem::Update(double dt) int playersSpectating = 0; const int numRequestsToHandle = (int)m_SpawnRequests.size(); for (auto it = m_SpawnRequests.begin(); it != m_SpawnRequests.end(); ++it) { - // TODO: -1 Signifies no class picked, or they are a spectator, enum here later? // It is valid if they didn't pick class yet // but don't spawn anything, goto next spawnrequest. - if (it->Class == -1) { + if (it->Class == PlayerClass::None) { ++playersSpectating; continue; } @@ -80,6 +79,11 @@ void PlayerSpawnSystem::Update(double dt) if (spawner.HasComponent("Team")) { auto cSpawnerTeam = spawner["Team"]; if ((int)cSpawnerTeam["Team"] != it->Team) { + // If they somehow has a valid class as spectator, don't spawn them. + if (it->Team == cSpawnerTeam["Team"].Enum("Spectator")) { + ++playersSpectating; + break; + } continue; } } @@ -136,7 +140,7 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) if (iter->PlayerID == e.PlayerID) { // If player wants to switch team or class , remove their selected class so they don't spawn. if (e.Command == "SwapToTeamPick" || e.Command == "SwapToClassPick") { - iter->Class = -1; + iter->Class = PlayerClass::None; return true; } break; @@ -150,7 +154,7 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) if (e.Command == "PickTeam") { iter->Team = (ComponentInfo::EnumType)e.Value; } else { - iter->Class = (ComponentInfo::EnumType)e.Value; + iter->Class = static_cast(e.Value); } } else if (m_PlayerEntities.count(e.PlayerID) == 0 || !m_PlayerEntities[e.PlayerID].Valid()) { // If player is not in queue to spawn, then create a spawn request, @@ -159,12 +163,12 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) req.PlayerID = e.PlayerID; if (e.Command == "PickTeam") { req.Team = (ComponentInfo::EnumType)e.Value; - req.Class = -1; // TODO: -1 Signifies no class picked, enum here later? + req.Class = PlayerClass::None; } else { // Should never get here, since you should have picked a team before you ever get a chance to pick class. LOG_WARNING("Sequence error: Should not be able to pick class before team"); req.Team = 1; // TODO: 1 Signifies spectator, should probably have real enum here later. - req.Class = (ComponentInfo::EnumType)e.Value; + req.Class = static_cast(e.Value); } m_SpawnRequests.push_back(req); } else { @@ -229,10 +233,6 @@ bool PlayerSpawnSystem::OnPlayerDeath(Events::PlayerDeath& e) return false; } ComponentWrapper cTeam = e.Player["Team"]; - // A spectator can't die anyway - if ((ComponentInfo::EnumType)cTeam["Team"] == cTeam["Team"].Enum("Spectator")) { - return false; - } if (m_PlayerIDs.count(e.Player.ID) == 0) { return false; @@ -241,13 +241,15 @@ bool PlayerSpawnSystem::OnPlayerDeath(Events::PlayerDeath& e) SpawnRequest req; req.PlayerID = m_PlayerIDs.at(e.Player.ID); req.Team = cTeam["Team"]; - // TODO: Better than temp class state code. + // TODO: Something better than temp class state code, if we ever add class enums in .xml if (e.Player.HasComponent("DashAbility")) { - req.Class = 1; // Assault + req.Class = PlayerClass::Assault; } else if (e.Player.HasComponent("SprintAbility")) { - req.Class = 3; // Sniper + req.Class = PlayerClass::Sniper; + } else if (e.Player.HasComponent("ShieldAbility")) { + req.Class = PlayerClass::Defender; } else { - req.Class = 2; // Defender + req.Class = PlayerClass::None; } m_SpawnRequests.push_back(req); diff --git a/src/Game/Systems/SpectatorCameraSystem.cpp b/src/Game/Systems/SpectatorCameraSystem.cpp index 60b82b0d..d1f2f1ce 100644 --- a/src/Game/Systems/SpectatorCameraSystem.cpp +++ b/src/Game/Systems/SpectatorCameraSystem.cpp @@ -15,7 +15,7 @@ void SpectatorCameraSystem::Update(double dt) if (!m_CamSetToTeamPick && IsClient) { // Find the class pick camera and set them to it, since they need to pick a team before they can leave the screen. EntityWrapper spectatorCam = m_World->GetFirstEntityByName("PickTeamCamera"); - if (spectatorCam.Valid() && spectatorCam.HasComponent("Camera")) { + if (spectatorCam.HasComponent("Camera")) { m_CamSetToTeamPick = true; Events::SetCamera eSetCamera; eSetCamera.CameraEntity = spectatorCam; @@ -59,7 +59,7 @@ bool SpectatorCameraSystem::OnInputCommand(const Events::InputCommand& e) } EntityWrapper spectatorCam = m_World->GetFirstEntityByName(camName); // Set the camera as active, if it exists. - if (spectatorCam.Valid() && spectatorCam.HasComponent("Camera")) { + if (spectatorCam.HasComponent("Camera")) { // Set the class pick button visible if a blue or red team is picked, else invisible. EntityWrapper HUD; if (camName == "SpectatorCamera") { From f24a5a36b4910e192b5de65c342b76ff83bceebf Mon Sep 17 00:00:00 2001 From: William Moberg Date: Wed, 9 Mar 2016 11:44:07 +0100 Subject: [PATCH 49/68] Tiny compiler bug fix. --- src/Game/Systems/PlayerSpawnSystem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Game/Systems/PlayerSpawnSystem.cpp b/src/Game/Systems/PlayerSpawnSystem.cpp index 9b7a9faf..454c5c53 100644 --- a/src/Game/Systems/PlayerSpawnSystem.cpp +++ b/src/Game/Systems/PlayerSpawnSystem.cpp @@ -154,7 +154,7 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) if (e.Command == "PickTeam") { iter->Team = (ComponentInfo::EnumType)e.Value; } else { - iter->Class = static_cast(e.Value); + iter->Class = static_cast((int)e.Value); } } else if (m_PlayerEntities.count(e.PlayerID) == 0 || !m_PlayerEntities[e.PlayerID].Valid()) { // If player is not in queue to spawn, then create a spawn request, @@ -168,7 +168,7 @@ bool PlayerSpawnSystem::OnInputCommand(Events::InputCommand& e) // Should never get here, since you should have picked a team before you ever get a chance to pick class. LOG_WARNING("Sequence error: Should not be able to pick class before team"); req.Team = 1; // TODO: 1 Signifies spectator, should probably have real enum here later. - req.Class = static_cast(e.Value); + req.Class = static_cast((int)e.Value); } m_SpawnRequests.push_back(req); } else { From c9c462f695f392279135e5325a4881fd0f08d62f Mon Sep 17 00:00:00 2001 From: Tleety Date: Wed, 9 Mar 2016 12:31:37 +0100 Subject: [PATCH 50/68] The console now print some info when you are trying to connect to server --- src/Game/Systems/MainMenuSystem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Game/Systems/MainMenuSystem.cpp b/src/Game/Systems/MainMenuSystem.cpp index 6b7015fc..fcb04b4f 100644 --- a/src/Game/Systems/MainMenuSystem.cpp +++ b/src/Game/Systems/MainMenuSystem.cpp @@ -25,6 +25,7 @@ bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e) Events::ConnectRequest event; event.IP = (std::string)entity["ServerIdentity"]["IP"]; event.Port = (int)entity["ServerIdentity"]["Port"]; + printf("\n ----Request Server Connect----\nIP: %s\nPort: %i\n ------------------------------", event.IP, event.Port); m_EventBroker->Publish(event); } } From 70ec075887f6221d7e41f1443169ece14331a285 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Wed, 9 Mar 2016 13:19:56 +0100 Subject: [PATCH 51/68] 3rd person aim improvements --- resources/Schema/Entities/MovementTest.xml | 16 +- .../Schema/Entities/PlayerAssaultBlue.xml | 138 ++--- resources/Schema/Entities/ShootingRange.xml | 273 +++++++++ .../Schema/Entities/ThirdPersonBlendTree.xml | 528 ++++++++++++++++++ src/Game/Systems/PlayerMovementSystem.cpp | 9 +- 5 files changed, 853 insertions(+), 111 deletions(-) create mode 100644 resources/Schema/Entities/ShootingRange.xml create mode 100644 resources/Schema/Entities/ThirdPersonBlendTree.xml diff --git a/resources/Schema/Entities/MovementTest.xml b/resources/Schema/Entities/MovementTest.xml index 8ad34c93..8a99df55 100644 --- a/resources/Schema/Entities/MovementTest.xml +++ b/resources/Schema/Entities/MovementTest.xml @@ -54,7 +54,10 @@ - + + 0.49999982118606567 + 2.5599997043609619 + sModels/Widgets/Lights/DirectionalLightWidget.mesh @@ -100,7 +103,7 @@ - + @@ -113,7 +116,7 @@ - + @@ -138,8 +141,7 @@ ActivateDeactiveShieldF - - 1 + true @@ -155,8 +157,8 @@ Models/Weapons/Blue/DefenderWeaponBlue.mesh - - + + diff --git a/resources/Schema/Entities/PlayerAssaultBlue.xml b/resources/Schema/Entities/PlayerAssaultBlue.xml index 8bceb701..cad75d5b 100644 --- a/resources/Schema/Entities/PlayerAssaultBlue.xml +++ b/resources/Schema/Entities/PlayerAssaultBlue.xml @@ -6,9 +6,7 @@ - - 0.5 - + @@ -31,7 +29,6 @@ - @@ -577,8 +574,8 @@ Schema/Entities/WeaponAssaultBlueWorld.xml - - + + @@ -598,8 +595,8 @@ Schema/Entities/SidearmWeaponWorld.xml - - + + @@ -644,7 +641,7 @@ - ReloadSwitchBlend + UpperBody FinalMovementBlend @@ -706,8 +703,7 @@ CrouchStrafeLeftF - - 1 + true @@ -718,8 +714,7 @@ CrouchStrafeRightF - - 1 + true @@ -732,8 +727,7 @@ CrouchWalkF - - 1 + true @@ -747,7 +741,6 @@ CrouchF - 1 @@ -789,8 +782,7 @@ WalkF - - 1 + true @@ -801,8 +793,7 @@ RunF - - 1 + true @@ -825,8 +816,7 @@ StrafeLeftF - - 1 + true @@ -837,8 +827,7 @@ StrafeRightF - - 1 + true @@ -853,8 +842,7 @@ IdleF - - 1 + true @@ -881,7 +869,6 @@ JumpF - 1 false @@ -976,105 +963,58 @@ - + - ReloadSwitch - WeaponActionBlend - 1 - true + Idle + FireReload - + - ReloadSwitchU - - 1 + IdleAssaultRifleU + + true - + - IdleBlend - ShootBlend + Fire + Reload 0 + true - + - - IdlePrimary - IdleSecondary - 0 - + + ReloadSwitchU + + 0.5 + false + - - - - - IdleAssaultRifleU - - 1 - true - - - - - - - - - IdleSecWepU - - 1 - true - - - - - - + - + - - ShootPrimary - ShootSecondary - 0 - + + ShootFastRifleU + + - - - - - ShootFastRifleU - - 1 - - - - - - - - - ShootSecWepFastU - - - - - - + diff --git a/resources/Schema/Entities/ShootingRange.xml b/resources/Schema/Entities/ShootingRange.xml new file mode 100644 index 00000000..a05403c0 --- /dev/null +++ b/resources/Schema/Entities/ShootingRange.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/Schema/Entities/ThirdPersonBlendTree.xml b/resources/Schema/Entities/ThirdPersonBlendTree.xml new file mode 100644 index 00000000..eb6f319e --- /dev/null +++ b/resources/Schema/Entities/ThirdPersonBlendTree.xml @@ -0,0 +1,528 @@ + + + + + + BlendTreeAim + BlendTreeAssault + + + + + Models/Characters/Assault/AssaultBlue.mesh + + + + + + + + + + R_Arm_Weapon_Joint + + + AssaultWeapon + + + + + + Schema/Entities/WeaponAssaultBlueWorld.xml + + + + + + + + + + + + R_Arm_Weapon_Joint + + + SidearmWeapon + + + + + + Schema/Entities/SidearmWeaponWorld.xml + + + + + + + + + + + + AimPrimary + AimSecondary + 0 + true + + + + + + + + AimSecWepA + + false + true + + + + + + + + + AimRifleA + + false + true + + + + + + + + + + + ReloadSwitchBlend + FinalMovementBlend + + + + + + + + StandCrouchBlend + JumpDashBlend + 2.5146881298480398e-63 + true + + + + + + + + StandMovement + CrouchMovement + 0 + true + + + + + + + + MovementBlend + Idle + 1 + + + + + + + + Walk + StrafeLRBlend + 0 + + + + + + + + Left + Right + 0.033793529385008014 + + + + + + + + CrouchStrafeLeftF + + true + + + + + + + + + CrouchStrafeRightF + + true + + + + + + + + + + + CrouchWalkF + + true + + + + + + + + + + + CrouchF + + + + + + + + + + + + MovementBlend + Idle + 1 + + + + + + + + RunWalkBlend + StrafeLRBlend + 0 + + + + + + + + Walk + Run + 1 + + + + + + + + WalkF + + true + + + + + + + + + RunF + + true + true + + + + + + + + + + + Left + Right + 0.033793529385008014 + + + + + + + + StrafeLeftF + + true + + + + + + + + + StrafeRightF + + true + + + + + + + + + + + + + IdleF + + true + + + + + + + + + + + + + Jump + DashBlend + 1 + true + + + + + + + + JumpF + + false + + + + + + + + + DashFBBlend + DashLRBlend + 0.014621149736541383 + + + + + + + + DashForward + DashBackward + 0.014363533804961248 + + + + + + + + DashForwardF + + 2 + false + + + + + + + + + DashBackwardF + + 2 + false + + + + + + + + + + + DashLeft + DashRight + 4.3244885367500671e-16 + + + + + + + + DashLeftF + + 2 + false + + + + + + + + + DashRightF + + 2 + false + + + + + + + + + + + + + + + + + ReloadSwitch + WeaponActionBlend + 1 + true + + + + + + + + ReloadSwitchU + + + + + + + + + + IdleBlend + ShootBlend + 0 + + + + + + + + IdlePrimary + IdleSecondary + 0 + + + + + + + + IdleAssaultRifleU + + true + + + + + + + + + IdleSecWepU + + true + + + + + + + + + + + ShootPrimary + ShootSecondary + 0 + + + + + + + + ShootFastRifleU + + + + + + + + + + ShootSecWepFastU + + + + + + + + + + + + + + + + diff --git a/src/Game/Systems/PlayerMovementSystem.cpp b/src/Game/Systems/PlayerMovementSystem.cpp index 96061079..99edef2c 100644 --- a/src/Game/Systems/PlayerMovementSystem.cpp +++ b/src/Game/Systems/PlayerMovementSystem.cpp @@ -81,23 +81,22 @@ void PlayerMovementSystem::updateMovementControllers(double dt) cameraOrientation.x += controller->Rotation().x; // Limit camera pitch so we don't break our necks cameraOrientation.x = glm::clamp(cameraOrientation.x, -glm::half_pi(), glm::half_pi()); + // Set third person model aim pitch EntityWrapper playerModel = player.FirstChildByName("PlayerModel"); - - //Third-person aim if (playerModel.Valid()) { EntityWrapper aimPrimaryEntity = playerModel.FirstChildByName("AimPrimary"); if(aimPrimaryEntity.Valid()){ if(aimPrimaryEntity.HasComponent("Animation")) { - float pitch = cameraOrientation.x + 0.2f; - double time = (pitch + glm::half_pi()) / glm::pi(); + float pitch = cameraOrientation.x; + double time = ((pitch + glm::half_pi()) / glm::pi()); (double&)aimPrimaryEntity["Animation"]["Time"] = time; } } EntityWrapper aimSecondaryEntity = playerModel.FirstChildByName("AimSecondary"); if (aimSecondaryEntity.Valid()) { if (aimSecondaryEntity.HasComponent("Animation")) { - float pitch = cameraOrientation.x + 0.2f; + float pitch = cameraOrientation.x; double time = (pitch + glm::half_pi()) / glm::pi(); (double&)aimSecondaryEntity["Animation"]["Time"] = time; } From 555b19c41d6aa11ce81f8b564173f0447443a3ff Mon Sep 17 00:00:00 2001 From: viktorljung Date: Wed, 9 Mar 2016 13:49:28 +0100 Subject: [PATCH 52/68] BoneAttachments now working perfectly --- src/Engine/Rendering/BoneAttachmentSystem.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Engine/Rendering/BoneAttachmentSystem.cpp b/src/Engine/Rendering/BoneAttachmentSystem.cpp index 43dc8634..14db0466 100644 --- a/src/Engine/Rendering/BoneAttachmentSystem.cpp +++ b/src/Engine/Rendering/BoneAttachmentSystem.cpp @@ -50,13 +50,16 @@ void BoneAttachmentSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapp glm::vec4 perspective; glm::decompose(boneTransform, scale, rotation, translation, skew, perspective); - glm::vec3 angles = glm::vec3(-glm::pitch(rotation), -glm::yaw(rotation), -glm::roll(rotation)); + rotation = glm::quat((glm::vec3)entity["BoneAttachment"]["OrientationOffset"]) * rotation; + + rotation.w = -rotation.w; + glm::vec3 angles = glm::eulerAngles(rotation); if ((bool)entity["BoneAttachment"]["InheritPosition"]) { (glm::vec3&)entity["Transform"]["Position"] = translation + (glm::vec3)entity["BoneAttachment"]["PositionOffset"]; } if ((bool)entity["BoneAttachment"]["InheritOrientation"]) { - (glm::vec3&)entity["Transform"]["Orientation"] = angles + (glm::vec3)entity["BoneAttachment"]["OrientationOffset"]; + (glm::vec3&)entity["Transform"]["Orientation"] = angles; } if ((bool)entity["BoneAttachment"]["InheritScale"]) { (glm::vec3&)entity["Transform"]["Scale"] = scale * (glm::vec3)entity["BoneAttachment"]["ScaleOffset"]; From ddde50b69054436110c219c0d415941458de6dc3 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Wed, 9 Mar 2016 14:27:50 +0100 Subject: [PATCH 53/68] Inverse seems to be the same as -w --- src/Engine/Rendering/BoneAttachmentSystem.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Engine/Rendering/BoneAttachmentSystem.cpp b/src/Engine/Rendering/BoneAttachmentSystem.cpp index 14db0466..c1cdf0f2 100644 --- a/src/Engine/Rendering/BoneAttachmentSystem.cpp +++ b/src/Engine/Rendering/BoneAttachmentSystem.cpp @@ -51,8 +51,7 @@ void BoneAttachmentSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapp glm::decompose(boneTransform, scale, rotation, translation, skew, perspective); rotation = glm::quat((glm::vec3)entity["BoneAttachment"]["OrientationOffset"]) * rotation; - - rotation.w = -rotation.w; + rotation = glm::inverse(rotation); glm::vec3 angles = glm::eulerAngles(rotation); if ((bool)entity["BoneAttachment"]["InheritPosition"]) { From 09171a1a18c33ccfc0deb042d21430e195aa1315 Mon Sep 17 00:00:00 2001 From: stiffly Date: Wed, 9 Mar 2016 14:33:20 +0100 Subject: [PATCH 54/68] WIP connect from menu --- include/Engine/Network/Client.h | 3 +++ include/Engine/Network/NetworkClient.h | 2 +- include/Engine/Network/TCPClient.h | 2 +- include/Engine/Network/UDPClient.h | 2 +- src/Engine/Network/Client.cpp | 19 ++++++++++++++++++- src/Engine/Network/TCPClient.cpp | 5 ++++- src/Engine/Network/UDPClient.cpp | 5 +++-- src/Game/Systems/ServerListSystem.cpp | 1 - 8 files changed, 31 insertions(+), 8 deletions(-) diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 715c5370..9be447be 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -30,6 +30,7 @@ #include "Network/ESearchForServers.h" #include "../Game/Events/EDashAbility.h" #include "Network/EDisplayServerlist.h" +#include "Network/EConnectRequest.h" class Client : public Network { @@ -128,6 +129,8 @@ private: bool OnDoubleJump(Events::DoubleJump & e); EventRelay m_EDashAbility; bool OnDashAbility(const Events::DashAbility& e); + EventRelay m_EConnectRequest; + bool OnConnectRequest(const Events::ConnectRequest& e); bool OnSearchForServers(const Events::SearchForServers& e); UDPClient m_ServerlistRequest; diff --git a/include/Engine/Network/NetworkClient.h b/include/Engine/Network/NetworkClient.h index 4adc68f5..1b6af2ea 100644 --- a/include/Engine/Network/NetworkClient.h +++ b/include/Engine/Network/NetworkClient.h @@ -11,7 +11,7 @@ class NetworkClient public: NetworkClient(); virtual ~NetworkClient(); - virtual void Connect(std::string playerName, std::string address, int port) = 0; + virtual bool Connect(std::string playerName, std::string address, int port) = 0; virtual void Disconnect() = 0; virtual void Receive(Packet& packet) = 0; virtual void Send(Packet & packet) = 0; diff --git a/include/Engine/Network/TCPClient.h b/include/Engine/Network/TCPClient.h index 2108fa3d..13bd2db5 100644 --- a/include/Engine/Network/TCPClient.h +++ b/include/Engine/Network/TCPClient.h @@ -10,7 +10,7 @@ public: TCPClient(); ~TCPClient(); - void Connect(std::string playerName, std::string address, int port); + bool Connect(std::string playerName, std::string address, int port); void Disconnect(); void Receive(Packet& packet); void Send(Packet & packet); diff --git a/include/Engine/Network/UDPClient.h b/include/Engine/Network/UDPClient.h index 42c27783..0550b152 100644 --- a/include/Engine/Network/UDPClient.h +++ b/include/Engine/Network/UDPClient.h @@ -10,7 +10,7 @@ public: UDPClient(); ~UDPClient(); - void Connect(std::string playerName, std::string address, int port); + bool Connect(std::string playerName, std::string address, int port); void Disconnect(); void Receive(Packet& packet); void Send(Packet & packet); diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index f1155c3b..bac0acee 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -35,6 +35,7 @@ void Client::Connect(std::string address, int port) EVENT_SUBSCRIBE_MEMBER(m_EDoubleJump, &Client::OnDoubleJump); EVENT_SUBSCRIBE_MEMBER(m_EDashAbility, &Client::OnDashAbility); EVENT_SUBSCRIBE_MEMBER(m_ESearchForServers, &Client::OnSearchForServers); + EVENT_SUBSCRIBE_MEMBER(m_EConnectRequest, &Client::OnConnectRequest); auto config = ResourceManager::Load("Config.ini"); m_Address = address; if (address.empty()) { @@ -472,7 +473,7 @@ bool Client::OnInputCommand(const Events::InputCommand & e) if (e.Command == "ConnectToServer") { // Connect for now if (e.Value > 0) { - m_Reliable.Connect(m_PlayerName, m_Address, m_Port); + //m_Reliable.Connect(m_PlayerName, m_Address, m_Port); // m_Unreliable.Connect(m_PlayerName, m_Address, m_Port); } //LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID); @@ -545,6 +546,22 @@ bool Client::OnDashAbility(const Events::DashAbility& e) return true; } + +bool Client::OnConnectRequest(const Events::ConnectRequest& e) +{ + if (m_Reliable.Connect(m_PlayerName, e.IP, e.Port)) { + // The client send a successful connect message + auto rootEntities = m_World->GetDirectChildren(EntityID_Invalid); + for (auto it = rootEntities.first; it != rootEntities.second; it++) { + m_World->DeleteEntity(it->first); + } + + } else { + // The client could not send a successful connect message + } + return false; +} + bool Client::OnSearchForServers(const Events::SearchForServers& e) { m_SearchingForServers = true; diff --git a/src/Engine/Network/TCPClient.cpp b/src/Engine/Network/TCPClient.cpp index b3aa7d1b..df9c159a 100644 --- a/src/Engine/Network/TCPClient.cpp +++ b/src/Engine/Network/TCPClient.cpp @@ -10,7 +10,7 @@ TCPClient::~TCPClient() { } -void TCPClient::Connect(std::string playerName, std::string address, int port) +bool TCPClient::Connect(std::string playerName, std::string address, int port) { if (m_Socket) { if (m_IsConnected) { @@ -19,6 +19,7 @@ void TCPClient::Connect(std::string playerName, std::string address, int port) Send(packet); LOG_INFO("Connect message sent again!"); } + return true; } else if (!m_IsConnected) { boost::system::error_code error = boost::asio::error::host_not_found; @@ -34,11 +35,13 @@ void TCPClient::Connect(std::string playerName, std::string address, int port) packet.WriteString(playerName); Send(packet); LOG_INFO("Connect message sent!"); + return true; } // If error else { m_Socket->close(); m_Socket = nullptr; + return false; } } } diff --git a/src/Engine/Network/UDPClient.cpp b/src/Engine/Network/UDPClient.cpp index 1d71c155..15682000 100644 --- a/src/Engine/Network/UDPClient.cpp +++ b/src/Engine/Network/UDPClient.cpp @@ -10,14 +10,15 @@ UDPClient::~UDPClient() { } -void UDPClient::Connect(std::string playerName, std::string address, int port) +bool UDPClient::Connect(std::string playerName, std::string address, int port) { if (m_Socket) { - return; + return false; } m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address().from_string(address), port); m_Socket = boost::shared_ptr(new boost::asio::ip::udp::socket(m_IOService)); m_Socket->open(boost::asio::ip::udp::v4()); + return true; } void UDPClient::Disconnect() diff --git a/src/Game/Systems/ServerListSystem.cpp b/src/Game/Systems/ServerListSystem.cpp index f2813b64..a12907eb 100644 --- a/src/Game/Systems/ServerListSystem.cpp +++ b/src/Game/Systems/ServerListSystem.cpp @@ -48,6 +48,5 @@ bool ServerListSystem::OnServerListRecieved(const Events::DisplayServerlist& e) (int&)cIdentity["PlayersConnected"] = e.Serverlist[i].PlayersConnected; } } - return 1; } From 500ebfa08c87180753ed13d5dae2e00c03fcc99d Mon Sep 17 00:00:00 2001 From: Tleety Date: Wed, 9 Mar 2016 14:34:02 +0100 Subject: [PATCH 55/68] Menu should now show the correct server IP instead of default. Start of a StartMenu entity that will show when the game is started. --- resources/Schema/Entities/StartMenu.xml | 87 +++++++++++++++++++++++++ src/Game/Systems/MainMenuSystem.cpp | 4 +- src/Game/Systems/ServerListSystem.cpp | 5 +- 3 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 resources/Schema/Entities/StartMenu.xml diff --git a/resources/Schema/Entities/StartMenu.xml b/resources/Schema/Entities/StartMenu.xml new file mode 100644 index 00000000..ced29305 --- /dev/null +++ b/resources/Schema/Entities/StartMenu.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + Schema/Entities/CP_Rocky.xml + + + + + + + + + + + + + + + + 0.10000000149011612 + + + + + + + + + + + 0.20000000298023224 + + + + + + + + + + + + + + + + + + + + + + + + + Schema/Entities/MainMenu.xml + + + + + + + + + + + + + + + + + + diff --git a/src/Game/Systems/MainMenuSystem.cpp b/src/Game/Systems/MainMenuSystem.cpp index fcb04b4f..f3ff439f 100644 --- a/src/Game/Systems/MainMenuSystem.cpp +++ b/src/Game/Systems/MainMenuSystem.cpp @@ -23,8 +23,8 @@ bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e) EntityWrapper serverIdentityEntity = entity.FirstParentWithComponent("ServerIdentity"); if(serverIdentityEntity.Valid()) { Events::ConnectRequest event; - event.IP = (std::string)entity["ServerIdentity"]["IP"]; - event.Port = (int)entity["ServerIdentity"]["Port"]; + event.IP = (std::string)serverIdentityEntity["ServerIdentity"]["IP"]; + event.Port = (int)serverIdentityEntity["ServerIdentity"]["Port"]; printf("\n ----Request Server Connect----\nIP: %s\nPort: %i\n ------------------------------", event.IP, event.Port); m_EventBroker->Publish(event); } diff --git a/src/Game/Systems/ServerListSystem.cpp b/src/Game/Systems/ServerListSystem.cpp index f2813b64..21dea084 100644 --- a/src/Game/Systems/ServerListSystem.cpp +++ b/src/Game/Systems/ServerListSystem.cpp @@ -37,11 +37,12 @@ bool ServerListSystem::OnServerListRecieved(const Events::DisplayServerlist& e) for (int i = 0; i < e.Serverlist.size(); i++) { //Create Identities for each server and place them on the right position. EntityWrapper newIdentity = SpawnerSystem::Spawn(identitySpawner, identitySpawner); + EntityWrapper serverIdentityEntity = newIdentity.FirstChildByName("ServerIdentity"); glm::vec3 offset = (glm::vec3)serverListEntity["ServerList"]["Offset"]; - (glm::vec3&)newIdentity["Transform"]["Position"] = offset * (float)i; + (glm::vec3&)serverIdentityEntity["Transform"]["Position"] = offset * (float)i; - auto& cIdentity = newIdentity["ServerIdentity"]; + auto& cIdentity = serverIdentityEntity["ServerIdentity"]; (std::string&)cIdentity["IP"] = e.Serverlist[i].Address; (std::string&)cIdentity["ServerName"] = e.Serverlist[i].Name; (int&)cIdentity["Port"] = e.Serverlist[i].Port; From 1211888ce14236af80a3ab74945c040360453b01 Mon Sep 17 00:00:00 2001 From: stiffly Date: Wed, 9 Mar 2016 15:10:32 +0100 Subject: [PATCH 56/68] The world is deleted upon connection to a server. --- src/Engine/Network/Client.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index bac0acee..6b5dd092 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -549,15 +549,22 @@ bool Client::OnDashAbility(const Events::DashAbility& e) bool Client::OnConnectRequest(const Events::ConnectRequest& e) { + std::vector childrenToBeDeleted; + auto rootEntites = m_World->GetDirectChildren(EntityID_Invalid); + for (auto it = rootEntites.first; it != rootEntites.second; it++) { + childrenToBeDeleted.push_back(it->second); + } + for (int i = 0; i < childrenToBeDeleted.size(); ++i) { + m_World->DeleteEntity(childrenToBeDeleted[i]); + } if (m_Reliable.Connect(m_PlayerName, e.IP, e.Port)) { // The client send a successful connect message - auto rootEntities = m_World->GetDirectChildren(EntityID_Invalid); - for (auto it = rootEntities.first; it != rootEntities.second; it++) { - m_World->DeleteEntity(it->first); - } + return true; } else { // The client could not send a successful connect message + return false; + // Load the main menu again ? } return false; } From a76a04260f751e4bd10e92ce88694e548c4356cd Mon Sep 17 00:00:00 2001 From: Tleety Date: Wed, 9 Mar 2016 15:10:54 +0100 Subject: [PATCH 57/68] StartSystem skeleton and some changes to the StartMenu --- include/Game/Systems/StartSystem.h | 18 ++++ resources/Schema/Entities/MainMenu.xml | 109 ++++++++++++------------ resources/Schema/Entities/StartMenu.xml | 6 +- src/Game/Systems/StartSystem.cpp | 8 ++ 4 files changed, 83 insertions(+), 58 deletions(-) create mode 100644 include/Game/Systems/StartSystem.h create mode 100644 src/Game/Systems/StartSystem.cpp diff --git a/include/Game/Systems/StartSystem.h b/include/Game/Systems/StartSystem.h new file mode 100644 index 00000000..9b89d80a --- /dev/null +++ b/include/Game/Systems/StartSystem.h @@ -0,0 +1,18 @@ +#ifndef StartSystem_h__ +#define StartSystem_h__ + +#include "Core/System.h" +#include "Core/ResourceManager.h" +#include "Core/Event.h" +#include "Core/EventBroker.h" + +class StartSystem : public ImpureSystem +{ +public: + StartSystem(SystemParams params); + virtual void Update(double dt) override; + +private: +}; + +#endif \ No newline at end of file diff --git a/resources/Schema/Entities/MainMenu.xml b/resources/Schema/Entities/MainMenu.xml index cefb25e2..4c2d6587 100644 --- a/resources/Schema/Entities/MainMenu.xml +++ b/resources/Schema/Entities/MainMenu.xml @@ -12,52 +12,11 @@ - - + + - - - - - - - - - - - - Textures/Core/White.png - true - - - - - - - - - - - - - Credits - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - @@ -70,7 +29,8 @@ Textures/Core/White.png true - + false + Play @@ -87,13 +47,12 @@ Play Fonts/DroidSans.ttf,64 - - + - + @@ -115,7 +74,8 @@ Textures/Core/White.png true - + false + @@ -128,13 +88,53 @@ Option Fonts/DroidSans.ttf,64 - - + - + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + false + + + + + + + + + + + + Credits + Fonts/DroidSans.ttf,64 + + + + + + @@ -156,7 +156,7 @@ Textures/Core/White.png true - + @@ -169,13 +169,12 @@ Quit Fonts/DroidSans.ttf,64 - - + - + diff --git a/resources/Schema/Entities/StartMenu.xml b/resources/Schema/Entities/StartMenu.xml index ced29305..2785effe 100644 --- a/resources/Schema/Entities/StartMenu.xml +++ b/resources/Schema/Entities/StartMenu.xml @@ -34,7 +34,7 @@ - + @@ -46,11 +46,11 @@ - + - + diff --git a/src/Game/Systems/StartSystem.cpp b/src/Game/Systems/StartSystem.cpp new file mode 100644 index 00000000..acc1395d --- /dev/null +++ b/src/Game/Systems/StartSystem.cpp @@ -0,0 +1,8 @@ +#include "../Game/Systems/StartSystem.h" + +StartSystem::StartSystem(SystemParams params) + : System(params) + , ImpureSystem() +{ + +} \ No newline at end of file From 49040e9c4bdb37fb59da4d25ca39bfcc11a157bf Mon Sep 17 00:00:00 2001 From: Tleety Date: Wed, 9 Mar 2016 15:29:42 +0100 Subject: [PATCH 58/68] StartMenu system now sets the main menu camera to active as long as it exists. --- include/Game/Systems/StartSystem.h | 5 +++++ resources/Schema/Entities/StartMenu.xml | 6 +++--- src/Game/Game.cpp | 2 ++ src/Game/Systems/StartSystem.cpp | 27 ++++++++++++++++++++++++- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/include/Game/Systems/StartSystem.h b/include/Game/Systems/StartSystem.h index 9b89d80a..c7764e1b 100644 --- a/include/Game/Systems/StartSystem.h +++ b/include/Game/Systems/StartSystem.h @@ -5,6 +5,7 @@ #include "Core/ResourceManager.h" #include "Core/Event.h" #include "Core/EventBroker.h" +#include "Rendering/ESetCamera.h" class StartSystem : public ImpureSystem { @@ -13,6 +14,10 @@ public: virtual void Update(double dt) override; private: + EntityWrapper m_activeCamera = EntityWrapper::Invalid; + + EventRelay m_ECameraActivated; + bool OnCameraActivated(const Events::SetCamera& e); }; #endif \ No newline at end of file diff --git a/resources/Schema/Entities/StartMenu.xml b/resources/Schema/Entities/StartMenu.xml index 2785effe..15bcb542 100644 --- a/resources/Schema/Entities/StartMenu.xml +++ b/resources/Schema/Entities/StartMenu.xml @@ -34,7 +34,7 @@ - + @@ -46,11 +46,11 @@ - + - + diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index 2515ab82..806d26c1 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -39,6 +39,7 @@ #include "GUI/ButtonSystem.h" #include "Game/Systems/MainMenuSystem.h" #include "Game/Systems/ServerListSystem.h" +#include "Game/Systems/StartSystem.h" Game::Game(int argc, char* argv[]) @@ -153,6 +154,7 @@ Game::Game(int argc, char* argv[]) m_SystemPipeline->AddSystem(updateOrderLevel); m_SystemPipeline->AddSystem(updateOrderLevel); m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer); + m_SystemPipeline->AddSystem(updateOrderLevel); // Populate Octree with collidables ++updateOrderLevel; m_SystemPipeline->AddSystem(updateOrderLevel, m_OctreeCollision, "Collidable"); diff --git a/src/Game/Systems/StartSystem.cpp b/src/Game/Systems/StartSystem.cpp index acc1395d..4c67b210 100644 --- a/src/Game/Systems/StartSystem.cpp +++ b/src/Game/Systems/StartSystem.cpp @@ -4,5 +4,30 @@ StartSystem::StartSystem(SystemParams params) : System(params) , ImpureSystem() { + EVENT_SUBSCRIBE_MEMBER(m_ECameraActivated, &StartSystem::OnCameraActivated); +} -} \ No newline at end of file +void StartSystem::Update(double dt) +{ + auto cameras = m_World->GetComponents("Camera"); + if(cameras == nullptr) { + return; + } + for(auto& cCamera: *cameras) { + EntityWrapper cameraEntity = EntityWrapper(m_World, cCamera.EntityID); + if(cameraEntity == m_activeCamera){ + return; + } + if(cameraEntity.Name() == "Overview_Camera_Start_Menu") { + Events::SetCamera event; + event.CameraEntity = cameraEntity; + m_EventBroker->Publish(event); + } + } +} + +bool StartSystem::OnCameraActivated(const Events::SetCamera& e) +{ + m_activeCamera = e.CameraEntity; + return 1; +} From 9d368348d5ebda42979fc62709e0023951246f63 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Wed, 9 Mar 2016 15:48:57 +0100 Subject: [PATCH 59/68] Updated 3rd person and 1st person animation trees for assault to allow for third person weapon animations --- assets | 2 +- include/Game/Systems/Weapon/WeaponBehaviour.h | 4 + .../Schema/Entities/PlayerAssaultBlue.xml | 581 ++++++++---------- .../Schema/Entities/WeaponAssaultBlueView.xml | 72 +-- .../Entities/WeaponDefenderBlueView.xml | 20 +- .../Systems/Weapon/AssaultWeaponBehaviour.cpp | 31 +- .../Weapon/DefenderWeaponBehaviour.cpp | 38 +- 7 files changed, 346 insertions(+), 402 deletions(-) diff --git a/assets b/assets index d7685a31..d48c77c8 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit d7685a31afeb4ede0a1a50799ad43c85f3efd104 +Subproject commit d48c77c854317333e38917a2be76069df969426d diff --git a/include/Game/Systems/Weapon/WeaponBehaviour.h b/include/Game/Systems/Weapon/WeaponBehaviour.h index a21ed6d5..3f3b6559 100644 --- a/include/Game/Systems/Weapon/WeaponBehaviour.h +++ b/include/Game/Systems/Weapon/WeaponBehaviour.h @@ -60,7 +60,9 @@ protected: EntityWrapper Player; EntityWrapper WeaponEntity; EntityWrapper FirstPersonEntity; + EntityWrapper FirstPersonPlayerModel; EntityWrapper ThirdPersonEntity; + EntityWrapper ThirdPersonPlayerModel; }; IRenderer* m_Renderer; @@ -301,7 +303,9 @@ private: wi.Player = player; wi.WeaponEntity = player; wi.FirstPersonEntity = firstPersonWeapon; + wi.FirstPersonPlayerModel = firstPersonWeapon; wi.ThirdPersonEntity = thirdPersonWeapon; + wi.ThirdPersonPlayerModel = thirdPersonWeapon.FirstParentWithComponent("Model"); OnEquip(cWeapon, wi); } diff --git a/resources/Schema/Entities/PlayerAssaultBlue.xml b/resources/Schema/Entities/PlayerAssaultBlue.xml index 8bceb701..5f245a53 100644 --- a/resources/Schema/Entities/PlayerAssaultBlue.xml +++ b/resources/Schema/Entities/PlayerAssaultBlue.xml @@ -6,9 +6,7 @@ - - 0.5 - + @@ -550,10 +548,10 @@ - - BlendTreeAim - BlendTreeAssault - + + BlendTreeUpper + BlendTreeLower + @@ -577,8 +575,8 @@ Schema/Entities/WeaponAssaultBlueWorld.xml - - + + @@ -598,142 +596,80 @@ Schema/Entities/SidearmWeaponWorld.xml - - + + - + - AimPrimary - AimSecondary - 0 + StandCrouchBlend + JumpDashBlend + 2.5146881298480398e-63 true - - - - AimSecWepA - - false - true - - - - - - - - - AimRifleA - - false - true - - - - - - - - - - - ReloadSwitchBlend - FinalMovementBlend - - - - - + - StandCrouchBlend - JumpDashBlend - 2.5146881298480398e-63 + StandMovement + CrouchMovement + 0 true - + - StandMovement - CrouchMovement - 0 - true + MovementBlend + Idle + 1 - + - MovementBlend - Idle - 1 + Walk + StrafeLRBlend + 0 - + - Walk - StrafeLRBlend - 0 + Left + Right + 0.033793529385008014 - - - - Left - Right - 0.033793529385008014 - - - - - - - - CrouchStrafeLeftF - - 1 - true - - - - - - - - - CrouchStrafeRightF - - 1 - true - - - - - - - - + - CrouchWalkF - - 1 + CrouchStrafeLeftF + + true + + + + + + + + + CrouchStrafeRightF + true @@ -742,119 +678,11 @@ - + - CrouchF - - 1 - - - - - - - - - - - MovementBlend - Idle - 1 - - - - - - - - RunWalkBlend - StrafeLRBlend - 2.4565650245976452e-16 - - - - - - - - Walk - Run - 1.2938206818383024e-24 - - - - - - - - WalkF - - 1 - true - - - - - - - - - RunF - - 1 - true - - - - - - - - - - - Left - Right - 0.033793529385008014 - - - - - - - - StrafeLeftF - - 1 - true - - - - - - - - - StrafeRightF - - 1 - true - - - - - - - - - - - - - IdleF - - 1 + CrouchWalkF + true @@ -863,70 +691,65 @@ - - - - - - Jump - DashBlend - 1 - true - - - - - + - JumpF - - 1 - false + CrouchF + - + + + + + + MovementBlend + Idle + 1 + + + + + - DashFBBlend - DashLRBlend - 0.014621149736541383 + RunWalkBlend + StrafeLRBlend + 2.4565650245976452e-16 - + - DashForward - DashBackward - 0.014363533804961248 + Walk + Run + 1.2938206818383024e-24 - + - DashForwardF - - 2 - false + WalkF + + true - + - DashBackwardF - - 2 - false + RunF + + true @@ -934,35 +757,33 @@ - + - DashLeft - DashRight - 4.3244885367500671e-16 + Left + Right + 0.033793529385008014 - + - DashLeftF - - 2 - false + StrafeLeftF + + true - + - DashRightF - - 2 - false + StrafeRightF + + true @@ -972,71 +793,186 @@ + + + + IdleF + + true + + + + + + + + + + + + + Jump + DashBlend + 1 + true + + + + + + + + JumpF + + false + + + + + + + + + DashFBBlend + DashLRBlend + 0.014621149736541383 + + + + + + + + DashForward + DashBackward + 0.014363533804961248 + + + + + + + + DashForwardF + + 2 + false + + + + + + + + + DashBackwardF + + 2 + false + + + + + + + + + + + DashLeft + DashRight + 4.3244885367500671e-16 + + + + + + + + DashLeftF + + 2 + false + + + + + + + + + DashRightF + + 2 + false + + + + + + + - + + + + + + AssaultWeaponBlend + SidearmWeapon + 0 + true + + + + + - - ReloadSwitch - WeaponActionBlend - 1 - true - + + Aim + WeaponBlend + - + - - ReloadSwitchU - - 1 - - - - - - - - - IdleBlend - ShootBlend - 0 - + + MovementBlend + ActionBlend + - + - IdlePrimary - IdleSecondary - 0 + Fire + Reload + 1 - + - IdleAssaultRifleU - - 1 - true + ReloadSwitchU + 0.5 + false - + - IdleSecWepU - - 1 - true + ShootFastRifleU + false @@ -1044,31 +980,33 @@ - + - ShootPrimary - ShootSecondary + Idle + Run 0 - + - ShootFastRifleU - - 1 + IdleAssaultRifleU + true + true - + - ShootSecWepFastU + IdleAssaultRifleU + true + true @@ -1078,6 +1016,19 @@ + + + + AimRifleA + + 0.10000000149011612 + false + true + + + + + diff --git a/resources/Schema/Entities/WeaponAssaultBlueView.xml b/resources/Schema/Entities/WeaponAssaultBlueView.xml index 235a9480..05b65bbb 100644 --- a/resources/Schema/Entities/WeaponAssaultBlueView.xml +++ b/resources/Schema/Entities/WeaponAssaultBlueView.xml @@ -4,7 +4,7 @@ MovementBlend - FinalBlend + ActionBlend Models/Characters/Assault/FirstPersonAssaultBlue.mesh @@ -13,54 +13,34 @@ - + - BlendTreeAssaultWeapon - BlendTreeSecondaryWeapon + Fire + Reload 0 true - + - - Fire - Reload - 0 - true - + + ReloadSwitchF + 0.5 + false + - - - - - ReloadSwitchF - 0.5 - false - - - - - - - - - ShootRifleF - 1 - false - - - - - - + - + + + ShootRifleF + false + @@ -78,11 +58,10 @@ - + - IdleF - 1 + RunF true true @@ -90,11 +69,10 @@ - + - RunF - 1 + IdleF true true @@ -113,8 +91,8 @@ Models/Weapons/Blue/AssaultWeaponBlue.mesh - - + + @@ -149,9 +127,9 @@ true - - - + + + diff --git a/resources/Schema/Entities/WeaponDefenderBlueView.xml b/resources/Schema/Entities/WeaponDefenderBlueView.xml index 493c7243..c22e7200 100644 --- a/resources/Schema/Entities/WeaponDefenderBlueView.xml +++ b/resources/Schema/Entities/WeaponDefenderBlueView.xml @@ -27,9 +27,7 @@ - ActivateDeactiveShieldF - - 1 + ActivateDeactivateShieldF false @@ -50,7 +48,6 @@ ShootShotgunF - 1 false @@ -71,7 +68,6 @@ ShotgunReloadTwoF - 1 @@ -91,7 +87,6 @@ ShotgunReloadOneF - 1 false @@ -102,7 +97,6 @@ ShotgunReloadThreeF - 1 false @@ -132,7 +126,6 @@ IdleF - 1 true true @@ -144,7 +137,6 @@ RunF - 1 true true @@ -163,8 +155,8 @@ Models/Weapons/Blue/DefenderWeaponBlue.mesh - - + + @@ -197,9 +189,9 @@ true - - - + + + diff --git a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp index 13c3d8a3..dddf5fdd 100644 --- a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp @@ -72,7 +72,7 @@ void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& const float& movementSpeed = cPlayer["MovementSpeed"]; float speed = glm::length((const glm::vec3&)cPhysics["Velocity"]); float animationWeight = glm::min(speed, movementSpeed) / movementSpeed; - EntityWrapper rootNode = wi.FirstPersonEntity.FirstParentWithComponent("Model"); + EntityWrapper rootNode = wi.FirstPersonEntity; if (rootNode.Valid()) { EntityWrapper blend = rootNode.FirstChildByName("MovementBlend"); if (blend.Valid()) { @@ -125,7 +125,20 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) reloadTimer = reloadTime; // Play animation - playAnimationAndReturn(wi.FirstPersonEntity, "BlendTreeAssaultWeapon", "Reload"); + playAnimationAndReturn(wi.FirstPersonEntity, "ActionBlend", "Reload"); + // Third person anim + Events::AutoAnimationBlend b1; + b1.RootNode = wi.ThirdPersonPlayerModel; + b1.NodeName = "Reload"; + b1.Restart = true; + b1.Start = true; + m_EventBroker->Publish(b1); + Events::AutoAnimationBlend b2; + b2.RootNode = wi.ThirdPersonPlayerModel; + b2.NodeName = "MovementBlend"; + b2.AnimationEntity = wi.ThirdPersonPlayerModel.FirstChildByName("AssaultWeaponBlend").FirstChildByName("Reload"); + m_EventBroker->Publish(b2); + // Spawn explosion effect if (wi.FirstPersonEntity.Valid()) { if (IsClient) { @@ -233,7 +246,19 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi } // Play animation - playAnimationAndReturn(wi.FirstPersonEntity, "BlendTreeAssaultWeapon", "Fire"); + playAnimationAndReturn(wi.FirstPersonEntity, "ActionBlend", "Fire"); + // Third person anim + Events::AutoAnimationBlend b1; + b1.RootNode = wi.ThirdPersonPlayerModel; + b1.NodeName = "Fire"; + b1.Restart = true; + b1.Start = true; + m_EventBroker->Publish(b1); + Events::AutoAnimationBlend b2; + b2.RootNode = wi.ThirdPersonPlayerModel; + b2.NodeName = "MovementBlend"; + b2.AnimationEntity = wi.ThirdPersonPlayerModel.FirstChildByName("AssaultWeaponBlend").FirstChildByName("Fire"); + m_EventBroker->Publish(b2); // Sound Events::PlaySoundOnEntity e; diff --git a/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp b/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp index c18f9397..835b5378 100644 --- a/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp @@ -139,17 +139,14 @@ bool DefenderWeaponBehaviour::OnInputCommand(ComponentWrapper cWeapon, WeaponInf if (IsClient) { EntityWrapper root = wi.FirstPersonEntity; if (root.Valid()) { - EntityWrapper subTree = root.FirstChildByName("FinalBlend"); - if (subTree.Valid()) { - EntityWrapper animationNode = subTree.FirstChildByName("Shield"); - if (animationNode.Valid()) { - Events::AutoAnimationBlend eFireBlend; - eFireBlend.RootNode = root; - eFireBlend.NodeName = "Shield"; - eFireBlend.Restart = true; - eFireBlend.Start = true; - m_EventBroker->Publish(eFireBlend); - } + EntityWrapper animationNode = root.FirstChildByName("Shield"); + if (animationNode.Valid()) { + Events::AutoAnimationBlend eFireBlend; + eFireBlend.RootNode = root; + eFireBlend.NodeName = "Shield"; + eFireBlend.Restart = true; + eFireBlend.Start = true; + m_EventBroker->Publish(eFireBlend); } } } @@ -159,17 +156,14 @@ bool DefenderWeaponBehaviour::OnInputCommand(ComponentWrapper cWeapon, WeaponInf if (IsClient) { EntityWrapper root = wi.FirstPersonEntity; if (root.Valid()) { - EntityWrapper subTree = root.FirstChildByName("FinalBlend"); - if (subTree.Valid()) { - EntityWrapper animationNode = subTree.FirstChildByName("ActionBlend"); - if (animationNode.Valid()) { - Events::AutoAnimationBlend eFireBlend; - eFireBlend.RootNode = root; - eFireBlend.NodeName = "ActionBlend"; - eFireBlend.Restart = true; - eFireBlend.Start = true; - m_EventBroker->Publish(eFireBlend); - } + EntityWrapper animationNode = root.FirstChildByName("ActionBlend"); + if (animationNode.Valid()) { + Events::AutoAnimationBlend eFireBlend; + eFireBlend.RootNode = root; + eFireBlend.NodeName = "ActionBlend"; + eFireBlend.Restart = true; + eFireBlend.Start = true; + m_EventBroker->Publish(eFireBlend); } } } From fa0b52caec253c9c8fcb504986c1789c670be608 Mon Sep 17 00:00:00 2001 From: stiffly Date: Wed, 9 Mar 2016 15:49:42 +0100 Subject: [PATCH 60/68] When you disconnect you will delete the world and return to the menu. --- include/Engine/Network/Client.h | 4 +++- src/Engine/Network/Client.cpp | 42 +++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 9be447be..3033542d 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -17,6 +17,7 @@ #include "Network/TCPClient.h" #include "Network/SnapshotDefinitions.h" #include "Core/World.h" +#include "Core/EntityFile.h" #include "Core/EventBroker.h" #include "Core/ConfigFile.h" #include "Core/EPlayerDeath.h" @@ -31,7 +32,6 @@ #include "../Game/Events/EDashAbility.h" #include "Network/EDisplayServerlist.h" #include "Network/EConnectRequest.h" - class Client : public Network { public: @@ -109,6 +109,8 @@ private: void sendLocalPlayerTransform(); void becomePlayer(); void displayServerlist(); + void removeWorld(); + void createMainMenu(); // Mapping Logic // Returns if local EntityID exist in map bool clientServerMapsHasEntity(EntityID clientEntityID); diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 6b5dd092..f9905511 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -181,8 +181,8 @@ void Client::parseTCPConnect(Packet& packet) Packet UnreliablePacket(MessageType::Connect, m_SendPacketID); // Add player id and other stuff packet.WritePrimitive(m_PlayerID); - // m_Unreliable.Send(packet); - // LOG_INFO("Sent UDP Connect Server"); + // m_Unreliable.Send(packet); + // LOG_INFO("Sent UDP Connect Server"); } void Client::parsePlayerConnected(Packet & packet) @@ -457,12 +457,14 @@ void Client::parseSnapshot(Packet& packet) void Client::disconnect() { + removeWorld(); m_IsConnected = false; m_PreviousPacketID = 0; m_PacketID = 0; Packet packet(MessageType::Disconnect, m_SendPacketID); m_Reliable.Send(packet); m_Reliable.Disconnect(); + createMainMenu(); } bool Client::OnInputCommand(const Events::InputCommand & e) @@ -549,22 +551,16 @@ bool Client::OnDashAbility(const Events::DashAbility& e) bool Client::OnConnectRequest(const Events::ConnectRequest& e) { - std::vector childrenToBeDeleted; - auto rootEntites = m_World->GetDirectChildren(EntityID_Invalid); - for (auto it = rootEntites.first; it != rootEntites.second; it++) { - childrenToBeDeleted.push_back(it->second); - } - for (int i = 0; i < childrenToBeDeleted.size(); ++i) { - m_World->DeleteEntity(childrenToBeDeleted[i]); - } - if (m_Reliable.Connect(m_PlayerName, e.IP, e.Port)) { - // The client send a successful connect message + removeWorld(); + if (m_Reliable.Connect(m_PlayerName, e.IP, e.Port)) { + // The client sent a successful connect message return true; } else { // The client could not send a successful connect message + createMainMenu(); + // Load the main menu again ? return false; - // Load the main menu again ? } return false; } @@ -695,6 +691,26 @@ void Client::displayServerlist() } } + +void Client::removeWorld() +{ + std::vector childrenToBeDeleted; + auto rootEntites = m_World->GetDirectChildren(EntityID_Invalid); + for (auto it = rootEntites.first; it != rootEntites.second; it++) { + childrenToBeDeleted.push_back(it->second); + } + for (int i = 0; i < childrenToBeDeleted.size(); ++i) { + m_World->DeleteEntity(childrenToBeDeleted[i]); + } +} + + +void Client::createMainMenu() +{ + auto entityFile = ResourceManager::Load("Schema/Entities/MainMenu.xml"); + entityFile->MergeInto(m_World); +} + bool Client::clientServerMapsHasEntity(EntityID clientEntityID) { if (m_ClientIDToServerID.find(clientEntityID) != m_ClientIDToServerID.end()) { From 91cad561a42879e9bfe481157f64e4ddb487c2ea Mon Sep 17 00:00:00 2001 From: Teejoon Date: Wed, 9 Mar 2016 16:51:24 +0100 Subject: [PATCH 61/68] Some more optimization and fixed sorting of render job objects in RenderSystem --- include/Engine/Rendering/ModelJob.h | 6 +- include/Engine/Rendering/RenderJob.h | 11 +- resources/Shaders/ForwardPlus.frag.glsl | 7 +- resources/Shaders/Picking.vert.glsl | 3 +- resources/Shaders/PickingSkinned.vert.glsl | 3 +- src/Engine/Rendering/DrawFinalPass.cpp | 417 ++++++++++++++++----- src/Engine/Rendering/PickingPass.cpp | 58 +-- src/Engine/Rendering/RenderSystem.cpp | 2 +- src/Engine/Rendering/Util/ScreenCoords.cpp | 2 +- 9 files changed, 372 insertions(+), 137 deletions(-) diff --git a/include/Engine/Rendering/ModelJob.h b/include/Engine/Rendering/ModelJob.h index 05a4e5b0..22a4614d 100644 --- a/include/Engine/Rendering/ModelJob.h +++ b/include/Engine/Rendering/ModelJob.h @@ -111,7 +111,7 @@ struct ModelJob : RenderJob Color = modelComponent["Color"]; GlowIntensity = ((double)modelComponent["GlowIntensity"]); Entity = modelComponent.EntityID; - glm::vec3 abspos = Transform::AbsolutePosition(world, modelComponent.EntityID); + glm::vec3 abspos = glm::vec3(matrix[3][0], matrix[3][1], matrix[3][2]); glm::vec3 worldpos = glm::vec3(camera->ViewMatrix() * glm::vec4(abspos, 1)); Depth = worldpos.z; World = world; @@ -164,7 +164,9 @@ struct ModelJob : RenderJob bool IsShielded; void CalculateHash() override { - Hash = ShaderID << 20 + ModelID << 10 + TextureID; + Hash = TextureID; + Hash += ModelID << 10; + Hash += ShaderID << 20; } }; diff --git a/include/Engine/Rendering/RenderJob.h b/include/Engine/Rendering/RenderJob.h index bcffc4a5..6fd8963e 100644 --- a/include/Engine/Rendering/RenderJob.h +++ b/include/Engine/Rendering/RenderJob.h @@ -16,16 +16,15 @@ struct RenderJob public: float Depth; + bool operator<(const RenderJob& rhs) + { + return this->Hash < rhs.Hash; + } + protected: uint64_t Hash; virtual void CalculateHash() = 0; - - bool operator<(const RenderJob& rhs) - { - return this->Hash < rhs.Hash; - } - }; #endif \ No newline at end of file diff --git a/resources/Shaders/ForwardPlus.frag.glsl b/resources/Shaders/ForwardPlus.frag.glsl index b76ba3e6..91d362c0 100644 --- a/resources/Shaders/ForwardPlus.frag.glsl +++ b/resources/Shaders/ForwardPlus.frag.glsl @@ -118,7 +118,12 @@ LightResult CalcDirectionalLightSource(vec4 direction, vec4 color, float intensi return result; } -#include "Shaders/Util/CommonUniforms.glsl" +vec4 CalcNormalMappedValue(vec3 normal, vec3 tangent, vec3 bitangent, vec2 textureCoordinate, sampler2D normalMap) +{ + mat3 TBN = mat3(tangent, bitangent, normal); + vec3 NormalMap = texture(normalMap, textureCoordinate).xyz * 2.0 - vec3(1.0); + return vec4(TBN * normalize(NormalMap), 0.0); +} void main() { diff --git a/resources/Shaders/Picking.vert.glsl b/resources/Shaders/Picking.vert.glsl index a10121cf..00013383 100644 --- a/resources/Shaders/Picking.vert.glsl +++ b/resources/Shaders/Picking.vert.glsl @@ -1,6 +1,5 @@ #version 430 -#include "StandarUniform.glsl" -layout(location = PVM_UNIFORM_LOCATION) uniform mat4 PVM; +uniform mat4 PVM; layout(location = 0) in vec3 Position; layout(location = 1) in vec3 Normal; diff --git a/resources/Shaders/PickingSkinned.vert.glsl b/resources/Shaders/PickingSkinned.vert.glsl index 98a5b394..4d72fa49 100644 --- a/resources/Shaders/PickingSkinned.vert.glsl +++ b/resources/Shaders/PickingSkinned.vert.glsl @@ -1,6 +1,5 @@ #version 430 -#include "StandarUniform.glsl" -layout(location = PVM_UNIFORM_LOCATION) uniform mat4 PVM; +uniform mat4 PVM; uniform mat4 Bones[100]; layout(location = 0) in vec3 Position; diff --git a/src/Engine/Rendering/DrawFinalPass.cpp b/src/Engine/Rendering/DrawFinalPass.cpp index b364688a..0b33d166 100644 --- a/src/Engine/Rendering/DrawFinalPass.cpp +++ b/src/Engine/Rendering/DrawFinalPass.cpp @@ -343,6 +343,8 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& GLuint explosionSkinnedHandle = m_ExplosionEffectSkinnedProgram->GetHandle(); GLuint explosionSplatMapSkinnedHandle = m_ExplosionEffectSplatMapSkinnedProgram->GetHandle(); GLuint forwardSplatMapSkinnedHandle = m_ForwardPlusSplatMapSkinnedProgram->GetHandle(); + GLuint lastShader = 0; + unsigned int lastModel = 0; glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, m_LightCullingPass->LightSSBO()); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, m_LightCullingPass->LightGridSSBO()); @@ -359,9 +361,17 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& case RawModel::MaterialType::SingleTextures: { if (explosionEffectJob->Model->IsSkinned()) { - - m_ExplosionEffectSkinnedProgram->Bind(); - GLERROR("Bind ExplosionEffectSkinned program"); + if (lastShader != m_ExplosionEffectSkinnedProgram->GetHandle()) { + m_ExplosionEffectSkinnedProgram->Bind(); + lastShader = m_ExplosionEffectSkinnedProgram->GetHandle(); + GLERROR("Bind ExplosionEffectSkinned program"); + glUniform1i(glGetUniformLocation(explosionSkinnedHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionSkinnedHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionSkinnedHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffectSkinned Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionSkinnedHandle, explosionEffectJob, scene); //bind textures @@ -381,8 +391,17 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& } else { - m_ExplosionEffectProgram->Bind(); - GLERROR("Bind ExplosionEffect program"); + if (lastShader != m_ExplosionEffectProgram->GetHandle()) { + m_ExplosionEffectProgram->Bind(); + lastShader = m_ExplosionEffectProgram->GetHandle(); + GLERROR("Bind ExplosionEffect program"); + glUniform1i(glGetUniformLocation(explosionHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffect Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionHandle, explosionEffectJob, scene); //bind textures @@ -396,8 +415,17 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& case RawModel::MaterialType::SplatMapping: { if (explosionEffectJob->Model->IsSkinned()) { - m_ExplosionEffectSplatMapSkinnedProgram->Bind(); - GLERROR("Bind ExplosionEffectSplatMapSkinned program"); + if (lastShader != m_ExplosionEffectSplatMapSkinnedProgram->GetHandle()) { + m_ExplosionEffectSplatMapSkinnedProgram->Bind(); + lastShader = m_ExplosionEffectSplatMapSkinnedProgram->GetHandle(); + GLERROR("Bind ExplosionEffectSplatMapSkinned program"); + glUniform1i(glGetUniformLocation(explosionSplatMapSkinnedHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionSplatMapSkinnedHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffectSplatMapSkinned Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionSplatMapSkinnedHandle, explosionEffectJob, scene); //bind textures @@ -413,9 +441,17 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& } else { - m_ExplosionEffectSplatMapProgram->Bind(); - GLERROR("Bind ExplosionEffectSplatMap program"); - //bind uniforms + if (lastShader != m_ExplosionEffectSplatMapProgram->GetHandle()) { + m_ExplosionEffectSplatMapProgram->Bind(); + lastShader = m_ExplosionEffectSplatMapProgram->GetHandle(); + GLERROR("Bind ExplosionEffectSplatMap program"); + glUniform1i(glGetUniformLocation(explosionSplatMapHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionSplatMapHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionSplatMapHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffectSplatMap Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionSplatMapHandle, explosionEffectJob, scene); //bind textures @@ -428,8 +464,11 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& glDisable(GL_CULL_FACE); //draw - glBindVertexArray(explosionEffectJob->Model->VAO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, explosionEffectJob->Model->ElementBuffer); + if (lastModel != explosionEffectJob->ModelID) { + glBindVertexArray(explosionEffectJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, explosionEffectJob->Model->ElementBuffer); + lastModel = explosionEffectJob->ModelID; + } glDrawElements(GL_TRIANGLES, explosionEffectJob->EndIndex - explosionEffectJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(explosionEffectJob->StartIndex*sizeof(unsigned int))); glEnable(GL_CULL_FACE); GLERROR("explosion effect end"); @@ -443,8 +482,17 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& case RawModel::MaterialType::SingleTextures: { if (modelJob->Model->IsSkinned()) { - m_ForwardPlusSkinnedProgram->Bind(); - GLERROR("Bind ForwardPlusSkinnedProgram"); + if (lastShader != m_ForwardPlusSkinnedProgram->GetHandle()) { + m_ForwardPlusSkinnedProgram->Bind(); + lastShader = m_ForwardPlusSkinnedProgram->GetHandle(); + GLERROR("Bind ForwardPlusSkinnedProgram program"); + glUniform1i(glGetUniformLocation(forwardSkinnedHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardSkinnedHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardSkinnedHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ForwardPlusSkinnedProgram Uniforms"); + } //bind uniforms BindModelUniforms(forwardSkinnedHandle, modelJob, scene); //bind textures @@ -462,8 +510,17 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0])); } else { - m_ForwardPlusProgram->Bind(); - GLERROR("Bind ForwardPlusProgram"); + if (lastShader != m_ForwardPlusProgram->GetHandle()) { + m_ForwardPlusProgram->Bind(); + lastShader = m_ForwardPlusProgram->GetHandle(); + GLERROR("Bind ForwardPlusProgram program"); + glUniform1i(glGetUniformLocation(forwardHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ForwardPlusProgram Uniforms"); + } //bind uniforms BindModelUniforms(forwardHandle, modelJob, scene); //bind textures @@ -477,8 +534,17 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& case RawModel::MaterialType::SplatMapping: { if (modelJob->Model->IsSkinned()) { - m_ForwardPlusSplatMapSkinnedProgram->Bind(); - GLERROR("Bind SplatMap program"); + if (lastShader != m_ForwardPlusSplatMapSkinnedProgram->GetHandle()) { + m_ForwardPlusSplatMapSkinnedProgram->Bind(); + lastShader = m_ForwardPlusSplatMapSkinnedProgram->GetHandle(); + GLERROR("Bind SkinnedSplatMapProgram program"); + glUniform1i(glGetUniformLocation(forwardSplatMapSkinnedHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardSplatMapSkinnedHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardSplatMapSkinnedHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind SkinnedSplatMapProgram Uniforms"); + } //bind uniforms BindModelUniforms(forwardSplatMapSkinnedHandle, modelJob, scene); //bind textures @@ -494,8 +560,17 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& } else { - m_ForwardPlusSplatMapProgram->Bind(); - GLERROR("Bind SplatMap program"); + if (lastShader != m_ForwardPlusSplatMapProgram->GetHandle()) { + m_ForwardPlusSplatMapProgram->Bind(); + lastShader = m_ForwardPlusSplatMapProgram->GetHandle(); + GLERROR("Bind SplatMap program"); + glUniform1i(glGetUniformLocation(forwardSplatMapHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardSplatMapHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardSplatMapHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind SplatMap Uniforms"); + } //bind uniforms BindModelUniforms(forwardSplatMapHandle, modelJob, scene); //bind textures @@ -506,8 +581,11 @@ void DrawFinalPass::DrawModelRenderQueues(std::list>& } } //draw - glBindVertexArray(modelJob->Model->VAO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); + if (lastModel != modelJob->ModelID) { + glBindVertexArray(modelJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); + lastModel = modelJob->ModelID; + } glDrawElements(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(modelJob->StartIndex*sizeof(unsigned int))); if (GLERROR("models end")) { continue; @@ -536,6 +614,8 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listGetHandle(); GLuint explosionSplatMapSkinnedShieldCheckHandle = m_ExplosionEffectSplatMapSkinnedShieldCheckProgram->GetHandle(); GLuint forwardSplatMapSkinnedShieldCheckHandle = m_ForwardPlusSplatMapSkinnedShieldCheckProgram->GetHandle(); + GLuint lastShader = 0; + unsigned int lastModel = 0; glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, m_LightCullingPass->LightSSBO()); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, m_LightCullingPass->LightGridSSBO()); @@ -556,9 +636,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->IsSkinned()) { - - m_ExplosionEffectSkinnedShieldCheckProgram->Bind(); - GLERROR("Bind ExplosionEffectSkinned program"); + if (lastShader != m_ExplosionEffectSkinnedShieldCheckProgram->GetHandle()) { + m_ExplosionEffectSkinnedShieldCheckProgram->Bind(); + lastShader = m_ExplosionEffectSkinnedShieldCheckProgram->GetHandle(); + GLERROR("Bind ExplosionEffectSkinned program"); + glUniform1i(glGetUniformLocation(explosionSkinnedShieldCheckHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedShieldCheckHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedShieldCheckHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionSkinnedShieldCheckHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionSkinnedShieldCheckHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffectSkinned Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionSkinnedShieldCheckHandle, explosionEffectJob, scene); //bind textures @@ -577,8 +665,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listBind(); - GLERROR("Bind ExplosionEffect program"); + if (lastShader != m_ExplosionEffectShieldCheckProgram->GetHandle()) { + m_ExplosionEffectShieldCheckProgram->Bind(); + lastShader = m_ExplosionEffectShieldCheckProgram->GetHandle(); + GLERROR("Bind ExplosionEffect program"); + glUniform1i(glGetUniformLocation(explosionShieldCheckHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionShieldCheckHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionShieldCheckHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionShieldCheckHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionShieldCheckHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffect Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionShieldCheckHandle, explosionEffectJob, scene); //bind textures @@ -593,8 +690,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->IsSkinned()) { - m_ExplosionEffectSplatMapSkinnedShieldCheckProgram->Bind(); - GLERROR("Bind ExplosionEffectSplatMapSkinned program"); + if (lastShader != m_ExplosionEffectSplatMapSkinnedShieldCheckProgram->GetHandle()) { + m_ExplosionEffectSplatMapSkinnedShieldCheckProgram->Bind(); + lastShader = m_ExplosionEffectSplatMapSkinnedShieldCheckProgram->GetHandle(); + GLERROR("Bind ExplosionEffectSplatMapSkinned program"); + glUniform1i(glGetUniformLocation(explosionSplatMapSkinnedShieldCheckHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedShieldCheckHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedShieldCheckHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionSplatMapSkinnedShieldCheckHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionSplatMapSkinnedShieldCheckHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffectSplatMapSkinned Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionSplatMapSkinnedShieldCheckHandle, explosionEffectJob, scene); //bind textures @@ -611,9 +717,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listBind(); - GLERROR("Bind ExplosionEffectSplatMap program"); - //bind uniforms + if (lastShader != m_ExplosionEffectSplatMapShieldCheckProgram->GetHandle()) { + m_ExplosionEffectSplatMapShieldCheckProgram->Bind(); + lastShader = m_ExplosionEffectSplatMapShieldCheckProgram->GetHandle(); + GLERROR("Bind ExplosionEffectSplatMap program"); + glUniform1i(glGetUniformLocation(explosionSplatMapShieldCheckHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapShieldCheckHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapShieldCheckHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionSplatMapShieldCheckHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionSplatMapShieldCheckHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffectSplatMap Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionSplatMapShieldCheckHandle, explosionEffectJob, scene); //bind textures @@ -629,9 +743,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->IsSkinned()) { - - m_ExplosionEffectSkinnedProgram->Bind(); - GLERROR("Bind ExplosionEffectSkinned program"); + if (lastShader != m_ExplosionEffectSkinnedProgram->GetHandle()) { + m_ExplosionEffectSkinnedProgram->Bind(); + lastShader = m_ExplosionEffectSkinnedProgram->GetHandle(); + GLERROR("Bind ExplosionEffectSkinned program"); + glUniform1i(glGetUniformLocation(explosionSkinnedHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionSkinnedHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionSkinnedHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffectSkinned Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionSkinnedHandle, explosionEffectJob, scene); //bind textures @@ -649,8 +771,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listBind(); - GLERROR("Bind ExplosionEffect program"); + if (lastShader != m_ExplosionEffectProgram->GetHandle()) { + m_ExplosionEffectProgram->Bind(); + lastShader = m_ExplosionEffectProgram->GetHandle(); + GLERROR("Bind ExplosionEffect program"); + glUniform1i(glGetUniformLocation(explosionHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffect Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionHandle, explosionEffectJob, scene); //bind textures @@ -664,8 +795,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->IsSkinned()) { - m_ExplosionEffectSplatMapSkinnedProgram->Bind(); - GLERROR("Bind ExplosionEffectSplatMapSkinned program"); + if (lastShader != m_ExplosionEffectSplatMapSkinnedProgram->GetHandle()) { + m_ExplosionEffectSplatMapSkinnedProgram->Bind(); + lastShader = m_ExplosionEffectSplatMapSkinnedProgram->GetHandle(); + GLERROR("Bind ExplosionEffectSkinnedSplatMap program"); + glUniform1i(glGetUniformLocation(explosionSplatMapSkinnedHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionSplatMapSkinnedHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffectSkinnedSplatMap Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionSplatMapSkinnedHandle, explosionEffectJob, scene); //bind textures @@ -681,9 +821,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listBind(); - GLERROR("Bind ExplosionEffectSplatMap program"); - //bind uniforms + if (lastShader != m_ExplosionEffectSplatMapProgram->GetHandle()) { + m_ExplosionEffectSplatMapProgram->Bind(); + lastShader = m_ExplosionEffectSplatMapProgram->GetHandle(); + GLERROR("Bind ExplosionEffectSplatMap program"); + glUniform1i(glGetUniformLocation(explosionSplatMapHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(explosionSplatMapHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(explosionSplatMapHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ExplosionEffectSplatMap Uniforms"); + } //bind uniforms BindExplosionUniforms(explosionSplatMapHandle, explosionEffectJob, scene); //bind textures @@ -697,8 +845,11 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->VAO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, explosionEffectJob->Model->ElementBuffer); + if (lastModel != explosionEffectJob->ModelID) { + glBindVertexArray(explosionEffectJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, explosionEffectJob->Model->ElementBuffer); + lastModel = explosionEffectJob->ModelID; + } glDrawElements(GL_TRIANGLES, explosionEffectJob->EndIndex - explosionEffectJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(explosionEffectJob->StartIndex*sizeof(unsigned int))); glEnable(GL_CULL_FACE); GLERROR("explosion effect end"); @@ -713,8 +864,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->IsSkinned()) { - m_ForwardPlusSkinnedShieldCheckProgram->Bind(); - GLERROR("Bind ForwardPlusSkinnedProgram"); + if (lastShader != m_ForwardPlusSkinnedShieldCheckProgram->GetHandle()) { + m_ForwardPlusSkinnedShieldCheckProgram->Bind(); + lastShader = m_ForwardPlusSkinnedShieldCheckProgram->GetHandle(); + GLERROR("Bind ForwardPlusSkinnedProgram program"); + glUniform1i(glGetUniformLocation(forwardSkinnedShieldCheckHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedShieldCheckHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedShieldCheckHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardSkinnedShieldCheckHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardSkinnedShieldCheckHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ForwardPlusSkinnedProgram Uniforms"); + } //bind uniforms BindModelUniforms(forwardSkinnedShieldCheckHandle, modelJob, scene); //bind textures @@ -733,8 +893,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listBind(); - GLERROR("Bind ForwardPlusProgram"); + if (lastShader != m_ForwardPlusShieldCheckProgram->GetHandle()) { + m_ForwardPlusShieldCheckProgram->Bind(); + lastShader = m_ForwardPlusShieldCheckProgram->GetHandle(); + GLERROR("Bind ForwardPlusProgram program"); + glUniform1i(glGetUniformLocation(forwardShieldCheckHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardShieldCheckHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardShieldCheckHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardShieldCheckHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardShieldCheckHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ForwardPlusProgram Uniforms"); + } //bind uniforms BindModelUniforms(forwardShieldCheckHandle, modelJob, scene); //bind textures @@ -748,8 +917,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->IsSkinned()) { - m_ForwardPlusSplatMapSkinnedShieldCheckProgram->Bind(); - GLERROR("Bind SplatMap program"); + if (lastShader != m_ForwardPlusSplatMapSkinnedShieldCheckProgram->GetHandle()) { + m_ForwardPlusSplatMapSkinnedShieldCheckProgram->Bind(); + lastShader = m_ForwardPlusSplatMapSkinnedShieldCheckProgram->GetHandle(); + GLERROR("Bind ForwardPlusProgramSplatMapSkinned program"); + glUniform1i(glGetUniformLocation(forwardSplatMapSkinnedShieldCheckHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedShieldCheckHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedShieldCheckHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardSplatMapSkinnedShieldCheckHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardSplatMapSkinnedShieldCheckHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ForwardPlusProgramSplatMapSkinned Uniforms"); + } //bind uniforms BindModelUniforms(forwardSplatMapSkinnedShieldCheckHandle, modelJob, scene); //bind textures @@ -765,8 +943,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listBind(); - GLERROR("Bind SplatMap program"); + if (lastShader != m_ForwardPlusSplatMapShieldCheckProgram->GetHandle()) { + m_ForwardPlusSplatMapShieldCheckProgram->Bind(); + lastShader = m_ForwardPlusSplatMapShieldCheckProgram->GetHandle(); + GLERROR("Bind SplatMap program"); + glUniform1i(glGetUniformLocation(forwardSplatShieldCheckHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatShieldCheckHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatShieldCheckHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardSplatShieldCheckHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardSplatShieldCheckHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind SplatMap Uniforms"); + } //bind uniforms BindModelUniforms(forwardSplatShieldCheckHandle, modelJob, scene); //bind textures @@ -782,8 +969,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->IsSkinned()) { - m_ForwardPlusSkinnedProgram->Bind(); - GLERROR("Bind ForwardPlusSkinnedProgram"); + if (lastShader != m_ForwardPlusSkinnedProgram->GetHandle()) { + m_ForwardPlusSkinnedProgram->Bind(); + lastShader = m_ForwardPlusSkinnedProgram->GetHandle(); + GLERROR("Bind ForwardPlusSkinnedProgram program"); + glUniform1i(glGetUniformLocation(forwardSkinnedHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardSkinnedHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardSkinnedHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ForwardPlusSkinnedProgram Uniforms"); + } //bind uniforms BindModelUniforms(forwardSkinnedHandle, modelJob, scene); //bind textures @@ -802,8 +998,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listBind(); - GLERROR("Bind ForwardPlusProgram"); + if (lastShader != m_ForwardPlusProgram->GetHandle()) { + m_ForwardPlusProgram->Bind(); + lastShader = m_ForwardPlusProgram->GetHandle(); + GLERROR("Bind ForwardPlusProgram program"); + glUniform1i(glGetUniformLocation(forwardHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind ForwardPlusProgram Uniforms"); + } //bind uniforms BindModelUniforms(forwardHandle, modelJob, scene); //bind textures @@ -817,8 +1022,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->IsSkinned()) { - m_ForwardPlusSplatMapSkinnedProgram->Bind(); - GLERROR("Bind SplatMap program"); + if (lastShader != m_ForwardPlusSplatMapSkinnedProgram->GetHandle()) { + m_ForwardPlusSplatMapSkinnedProgram->Bind(); + lastShader = m_ForwardPlusSplatMapSkinnedProgram->GetHandle(); + GLERROR("Bind SplatMap program"); + glUniform1i(glGetUniformLocation(forwardSplatMapSkinnedHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardSplatMapSkinnedHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardSplatMapSkinnedHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind SplatMap Uniforms"); + } //bind uniforms BindModelUniforms(forwardSplatMapSkinnedHandle, modelJob, scene); //bind textures @@ -834,8 +1048,17 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listBind(); - GLERROR("Bind SplatMap program"); + if (lastShader != m_ForwardPlusSplatMapProgram->GetHandle()) { + m_ForwardPlusSplatMapProgram->Bind(); + lastShader = m_ForwardPlusSplatMapProgram->GetHandle(); + GLERROR("Bind SplatMap program"); + glUniform1i(glGetUniformLocation(forwardSplatMapHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(forwardSplatMapHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(forwardSplatMapHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind SplatMap Uniforms"); + } //bind uniforms BindModelUniforms(forwardSplatMapHandle, modelJob, scene); //bind textures @@ -847,8 +1070,11 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::listModel->VAO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); + if (lastModel != modelJob->ModelID) { + glBindVertexArray(modelJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); + lastModel = modelJob->ModelID; + } glDrawElements(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(modelJob->StartIndex*sizeof(unsigned int))); if (GLERROR("models end")) { continue; @@ -953,15 +1179,25 @@ void DrawFinalPass::DrawShieldedModelRenderQueue(std::list>& jobs, RenderScene& scene) { - - + GLuint shaderSkinnedHandle = m_FillDepthStencilBufferSkinnedProgram->GetHandle(); + GLuint shaderHandle = m_FillDepthStencilBufferProgram->GetHandle(); + GLuint lastShader = 0; for (auto &job : jobs) { auto modelJob = std::dynamic_pointer_cast(job); if(modelJob->Model->IsSkinned()) { - m_FillDepthStencilBufferSkinnedProgram->Bind(); - GLuint shaderHandle = m_FillDepthStencilBufferSkinnedProgram->GetHandle(); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); + if (lastShader != m_FillDepthStencilBufferSkinnedProgram->GetHandle()) { + m_FillDepthStencilBufferSkinnedProgram->Bind(); + lastShader = m_FillDepthStencilBufferSkinnedProgram->GetHandle(); + glUniform1i(glGetUniformLocation(shaderSkinnedHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(shaderSkinnedHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(shaderSkinnedHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind Uniforms 1"); + } + + glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); GLERROR("Bind PVM uniform"); std::vector frameBones; @@ -973,8 +1209,17 @@ void DrawFinalPass::DrawToDepthStencilBuffer(std::listBind(); - GLuint shaderHandle = m_FillDepthStencilBufferProgram->GetHandle(); + if (lastShader != m_FillDepthStencilBufferProgram->GetHandle()) { + m_FillDepthStencilBufferProgram->Bind(); + lastShader = m_FillDepthStencilBufferProgram->GetHandle(); + glUniform1i(glGetUniformLocation(shaderHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform2f(glGetUniformLocation(shaderHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); + glUniform4fv(glGetUniformLocation(shaderHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); + GLERROR("Bind Uniforms 2"); + } + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); GLERROR("Bind PVM uniform"); } @@ -998,6 +1243,9 @@ void DrawFinalPass::DrawSprites(std::list>&jobs, Rend GLuint shaderHandle = m_SpriteProgram->GetHandle(); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniform3fv(glGetUniformLocation(shaderHandle, "CameraPos"), 1, glm::value_ptr(scene.Camera->Position())); + for(auto& job : jobs) { auto spriteJob = std::dynamic_pointer_cast(job); RenderState jobState; @@ -1007,9 +1255,6 @@ void DrawFinalPass::DrawSprites(std::list>&jobs, Rend jobState.Disable(GL_DEPTH_TEST); } glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * spriteJob->Matrix)); - - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); - glUniform3fv(glGetUniformLocation(shaderHandle, "CameraPos"), 1, glm::value_ptr(scene.Camera->Position())); glUniform4fv(glGetUniformLocation(shaderHandle, "Color"), 1, glm::value_ptr(spriteJob->Color)); glUniform4fv(glGetUniformLocation(shaderHandle, "FillColor"), 1, glm::value_ptr(spriteJob->FillColor)); glUniform1f(glGetUniformLocation(shaderHandle, "FillPercentage"), spriteJob->FillPercentage); @@ -1039,14 +1284,8 @@ void DrawFinalPass::DrawSprites(std::list>&jobs, Rend void DrawFinalPass::BindExplosionUniforms(GLuint shaderHandle, std::shared_ptr& job, RenderScene& scene) { - glUniform1i(glGetUniformLocation(shaderHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); - GLERROR("Bind 1 uniform"); glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(job->Matrix)); GLERROR("Bind 2 uniform"); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); - GLERROR("Bind 3 uniform"); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); - GLERROR("Bind 4 uniform"); glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * job->Matrix)); GLERROR("Bind PVM uniform"); glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "VM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix() * job->Matrix)); @@ -1054,9 +1293,6 @@ void DrawFinalPass::BindExplosionUniforms(GLuint shaderHandle, std::shared_ptrMatrix)))); GLERROR("Bind TIM uniform"); - glUniform2f(glGetUniformLocation(shaderHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); - GLERROR("Bind 5 uniform"); - glUniform3fv(glGetUniformLocation(shaderHandle, "ExplosionOrigin"), 1, glm::value_ptr(job->ExplosionOrigin)); GLERROR("Bind 6 uniform"); glUniform1f(glGetUniformLocation(shaderHandle, "TimeSinceDeath"), job->TimeSinceDeath); @@ -1086,25 +1322,15 @@ void DrawFinalPass::BindExplosionUniforms(GLuint shaderHandle, std::shared_ptrFillPercentage); GLERROR("Bind 19 uniform"); - glUniform4fv(glGetUniformLocation(shaderHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); - GLERROR("Bind 20 uniform"); glUniform1f(glGetUniformLocation(shaderHandle, "GlowIntensity"), job->GlowIntensity); GLERROR("END"); } void DrawFinalPass::BindModelUniforms(GLuint shaderHandle, std::shared_ptr& job, RenderScene& scene) { - glUniform1i(glGetUniformLocation(shaderHandle, "SSAOQuality"), m_SSAOPass->TextureQuality()); - GLERROR("Bind 1 uniform"); GLint Location_M = glGetUniformLocation(shaderHandle, "M"); glUniformMatrix4fv(Location_M, 1, GL_FALSE, glm::value_ptr(job->Matrix)); GLERROR("Bind 2 uniform"); - GLint Location_V = glGetUniformLocation(shaderHandle, "V"); - glUniformMatrix4fv(Location_V, 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); - GLERROR("Bind 3 uniform"); - GLint Location_P = glGetUniformLocation(shaderHandle, "P"); - glUniformMatrix4fv(Location_P, 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); - GLERROR("Bind 4 uniform"); glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * job->Matrix)); GLERROR("Bind PVM uniform"); glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "VM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix() * job->Matrix)); @@ -1112,10 +1338,6 @@ void DrawFinalPass::BindModelUniforms(GLuint shaderHandle, std::shared_ptrMatrix)))); GLERROR("Bind TIM uniform"); - GLint Location_ScreenDimensions = glGetUniformLocation(shaderHandle, "ScreenDimensions"); - glUniform2f(Location_ScreenDimensions, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height); - GLERROR("Bind 5 uniform"); - GLint Location_FillPercentage = glGetUniformLocation(shaderHandle, "FillPercentage"); glUniform1f(Location_FillPercentage, job->FillPercentage); GLERROR("Bind 6 uniform"); @@ -1127,11 +1349,6 @@ void DrawFinalPass::BindModelUniforms(GLuint shaderHandle, std::shared_ptrColor)); - GLERROR("Bind 9 uniform"); - GLint Location_AmbientColor = glGetUniformLocation(shaderHandle, "AmbientColor"); - glUniform4fv(Location_AmbientColor, 1, glm::value_ptr(scene.AmbientColor)); - - GLERROR("Bind 10 uniform"); GLint Location_GlowIntensity = glGetUniformLocation(shaderHandle, "GlowIntensity"); glUniform1f(Location_GlowIntensity, job->GlowIntensity); diff --git a/src/Engine/Rendering/PickingPass.cpp b/src/Engine/Rendering/PickingPass.cpp index 3f97e375..b5162e72 100644 --- a/src/Engine/Rendering/PickingPass.cpp +++ b/src/Engine/Rendering/PickingPass.cpp @@ -62,6 +62,8 @@ void PickingPass::Draw(RenderScene& scene) //TODO: Render: Add code for more jobs than modeljobs. GLuint shaderHandle = m_PickingProgram->GetHandle(); GLuint shaderSkinnedHandle = m_PickingSkinnedProgram->GetHandle(); + GLuint lastShader = 0; + unsigned int lastModel = 0; m_PickingProgram->Bind(); if (scene.ClearDepth) { //glClear(GL_DEPTH_BUFFER_BIT); @@ -98,8 +100,11 @@ void PickingPass::Draw(RenderScene& scene) m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo; if (modelJob->Model->IsSkinned()) { - m_PickingSkinnedProgram->Bind(); - glUniformMatrix4fv(100, 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); + if (lastShader != m_PickingSkinnedProgram->GetHandle()) { + m_PickingSkinnedProgram->Bind(); + lastShader = m_PickingSkinnedProgram->GetHandle(); + } + glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); glUniform2fv(glGetUniformLocation(shaderSkinnedHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1]))); std::vector frameBones; @@ -112,13 +117,19 @@ void PickingPass::Draw(RenderScene& scene) } else { - m_PickingProgram->Bind(); - glUniformMatrix4fv(100, 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); + if (lastShader != m_PickingProgram->GetHandle()) { + m_PickingProgram->Bind(); + lastShader = m_PickingProgram->GetHandle(); + } + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); glUniform2fv(glGetUniformLocation(shaderHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1]))); } - glBindVertexArray(modelJob->Model->VAO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); + if (lastModel != modelJob->ModelID) { + glBindVertexArray(modelJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); + lastModel = modelJob->ModelID; + } glDrawElements(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(modelJob->StartIndex * sizeof(unsigned int))); } } @@ -204,10 +215,11 @@ void PickingPass::Draw(RenderScene& scene) m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo; if (modelJob->Model->IsSkinned()) { - m_PickingSkinnedProgram->Bind(); - glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix)); - glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + if (lastShader != m_PickingSkinnedProgram->GetHandle()) { + m_PickingSkinnedProgram->Bind(); + lastShader = m_PickingSkinnedProgram->GetHandle(); + } + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); glUniform2fv(glGetUniformLocation(shaderSkinnedHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1]))); std::vector frameBones; @@ -220,19 +232,24 @@ void PickingPass::Draw(RenderScene& scene) glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0])); } else { - m_PickingProgram->Bind(); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix)); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + if (lastShader != m_PickingProgram->GetHandle()) { + m_PickingProgram->Bind(); + lastShader = m_PickingProgram->GetHandle(); + } + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * modelJob->Matrix)); glUniform2fv(glGetUniformLocation(shaderHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1]))); } - glBindVertexArray(modelJob->Model->VAO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); + if (lastModel != modelJob->ModelID) { + glBindVertexArray(modelJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); + lastModel = modelJob->ModelID; + } glDrawElements(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(modelJob->StartIndex * sizeof(unsigned int))); } } + m_PickingProgram->Bind(); for (auto& job : scene.Jobs.SpriteJob) { auto spriteJob = std::dynamic_pointer_cast(job); if (!spriteJob->Pickable) { @@ -267,14 +284,11 @@ void PickingPass::Draw(RenderScene& scene) m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo; - m_PickingProgram->Bind(); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(spriteJob->Matrix)); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); + glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "PVM"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix() * scene.Camera->ViewMatrix() * spriteJob->Matrix)); glUniform2fv(glGetUniformLocation(shaderHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1]))); - glBindVertexArray(spriteJob->Model->VAO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, spriteJob->Model->ElementBuffer); + glBindVertexArray(spriteJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, spriteJob->Model->ElementBuffer); glDrawElements(GL_TRIANGLES, spriteJob->EndIndex - spriteJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(spriteJob->StartIndex * sizeof(unsigned int))); } } diff --git a/src/Engine/Rendering/RenderSystem.cpp b/src/Engine/Rendering/RenderSystem.cpp index a1f00c88..a91530d3 100644 --- a/src/Engine/Rendering/RenderSystem.cpp +++ b/src/Engine/Rendering/RenderSystem.cpp @@ -448,7 +448,7 @@ void RenderSystem::Update(double dt) fillModels(scene.Jobs); fillPointLights(scene.Jobs.PointLight, m_World); //TODO: Make sure all objects needed are also sorted. - scene.Jobs.OpaqueObjects.sort(); + scene.Jobs.OpaqueObjects.sort([](auto& a, auto& b) {return *a < *b; }); fillSprites(scene.Jobs.SpriteJob, m_World); fillDirectionalLights(scene.Jobs.DirectionalLight, m_World); fillText(scene.Jobs.Text, m_World); diff --git a/src/Engine/Rendering/Util/ScreenCoords.cpp b/src/Engine/Rendering/Util/ScreenCoords.cpp index 8b7768c8..a858524d 100644 --- a/src/Engine/Rendering/Util/ScreenCoords.cpp +++ b/src/Engine/Rendering/Util/ScreenCoords.cpp @@ -37,7 +37,7 @@ ScreenCoords::PixelData ScreenCoords::ToPixelData(float x, float y, FrameBuffer* glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, &pdata); GLERROR("glReadPixels(pdata) Error"); PickDataBuffer->Unbind(); - + GLERROR("Unbind Error"); glBindFramebuffer(GL_FRAMEBUFFER, DepthBuffer); GLERROR("glBindFramebuffer(DepthBuffer) Error"); float depthData; From 11041660399208a26f76843a5174a502ff2f3091 Mon Sep 17 00:00:00 2001 From: Tleety Date: Wed, 9 Mar 2016 17:24:21 +0100 Subject: [PATCH 62/68] TextureSprite Resource that use GL_NEAREST for sampling aswell as some StartMenu changes --- assets | 2 +- include/Engine/Rendering/BlurHUD.h | 2 +- include/Engine/Rendering/SpriteJob.h | 5 +- include/Engine/Rendering/Texture.h | 2 +- include/Engine/Rendering/TextureSprite.h | 26 + .../Engine/Rendering/Util/CommonFunctions.h | 18 +- resources/Schema/Entities/MainMenu.xml | 227 +- resources/Schema/Entities/ServerList.xml | 2 +- resources/Schema/Entities/StartMenu.xml | 9113 ++++++++++++++++- src/Engine/Rendering/BlurHUD.cpp | 2 +- src/Engine/Rendering/DrawBloomPass.cpp | 2 +- src/Engine/Rendering/DrawFinalPass.cpp | 10 +- src/Engine/Rendering/Model.cpp | 18 +- src/Engine/Rendering/Renderer.cpp | 4 +- src/Engine/Rendering/SSAOPass.cpp | 2 +- src/Engine/Rendering/Texture.cpp | 16 +- src/Engine/Rendering/TextureSprite.cpp | 11 + src/Engine/Rendering/Util/CommonFunctions.cpp | 18 - src/Game/Game.cpp | 2 + src/Game/Systems/DamageIndicatorSystem.cpp | 2 +- src/Game/Systems/MainMenuSystem.cpp | 1 - 21 files changed, 9375 insertions(+), 110 deletions(-) create mode 100644 include/Engine/Rendering/TextureSprite.h create mode 100644 src/Engine/Rendering/TextureSprite.cpp diff --git a/assets b/assets index 52ea74c5..2bf82ffb 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 52ea74c5d5996ebcd7b064e0a8be469c9f07926e +Subproject commit 2bf82ffb6efb5f7f93c6c7bd32bbbbeae1eff44a diff --git a/include/Engine/Rendering/BlurHUD.h b/include/Engine/Rendering/BlurHUD.h index ca3b7270..783e8a2f 100644 --- a/include/Engine/Rendering/BlurHUD.h +++ b/include/Engine/Rendering/BlurHUD.h @@ -48,7 +48,7 @@ private: //const LightCullingPass* m_LightCullingPass int m_Iterations = 3; int m_Quality = 0; - float m_BlurQuality = 2.f; + float m_BlurQuality = 4.f; GLuint m_GaussianTexture_horiz = 0; GLuint m_GaussianTexture_vert = 0; diff --git a/include/Engine/Rendering/SpriteJob.h b/include/Engine/Rendering/SpriteJob.h index 2533d4d4..c323fa06 100644 --- a/include/Engine/Rendering/SpriteJob.h +++ b/include/Engine/Rendering/SpriteJob.h @@ -7,6 +7,7 @@ #include "../GLM.h" #include "../Core/ComponentWrapper.h" #include "Texture.h" +#include "TextureSprite.h" #include "Model.h" #include "RenderJob.h" #include "../Core/ResourceManager.h" @@ -24,9 +25,9 @@ struct SpriteJob : RenderJob ::RawModel::MaterialProperties matProp = Model->MaterialGroups().front(); TextureID = 0; - DiffuseTexture = CommonFunctions::LoadTexture(cSprite["DiffuseTexture"], true); + DiffuseTexture = CommonFunctions::TryLoadResource(cSprite["DiffuseTexture"]); - IncandescenceTexture = CommonFunctions::LoadTexture(cSprite["GlowMap"], true); + IncandescenceTexture = CommonFunctions::TryLoadResource(cSprite["GlowMap"]); StartIndex = matProp.material->StartIndex; EndIndex = matProp.material->EndIndex; diff --git a/include/Engine/Rendering/Texture.h b/include/Engine/Rendering/Texture.h index d159e636..030a4b65 100644 --- a/include/Engine/Rendering/Texture.h +++ b/include/Engine/Rendering/Texture.h @@ -9,7 +9,7 @@ class Texture : public BaseTexture { friend class ResourceManager; -private: +protected: Texture(std::string path); public: diff --git a/include/Engine/Rendering/TextureSprite.h b/include/Engine/Rendering/TextureSprite.h new file mode 100644 index 00000000..f8527664 --- /dev/null +++ b/include/Engine/Rendering/TextureSprite.h @@ -0,0 +1,26 @@ +#ifndef TextureSprite_h__ +#define TextureSprite_h__ + +#include "../OpenGL.h" +#include "BaseTexture.h" +#include "Texture.h" +#include "PNG.h" + +class TextureSprite : public Texture +{ + friend class ResourceManager; + +protected: + TextureSprite(std::string path); + +public: + ~TextureSprite(); + + void Bind(GLenum textureUnit = GL_TEXTURE0); + + GLuint m_Texture = 0; + unsigned char* Data = nullptr; + +}; + +#endif diff --git a/include/Engine/Rendering/Util/CommonFunctions.h b/include/Engine/Rendering/Util/CommonFunctions.h index 1ed3d82a..94cf8683 100644 --- a/include/Engine/Rendering/Util/CommonFunctions.h +++ b/include/Engine/Rendering/Util/CommonFunctions.h @@ -8,7 +8,23 @@ namespace CommonFunctions { -Texture* LoadTexture(std::string path, bool threaded); + +//Loads Texture/SpriteTexture and return null if it fails +template +Texture* TryLoadResource(std::string path) +{ + Texture* img; + try { + img = ResourceManager::Load(path); + } catch (const Resource::StillLoadingException&) { + img = ResourceManager::Load("Textures/Core/ErrorTexture.png"); + } catch (const std::exception&) { + img = nullptr; + } + + return img; +} + void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type); void GenerateMultiSampleTexture(GLuint* texture, int numSamples, glm::vec2 dimensions, GLint internalFormat); void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint format, GLenum type, GLint numMipMaps); diff --git a/resources/Schema/Entities/MainMenu.xml b/resources/Schema/Entities/MainMenu.xml index 4c2d6587..e6cc6ef4 100644 --- a/resources/Schema/Entities/MainMenu.xml +++ b/resources/Schema/Entities/MainMenu.xml @@ -13,7 +13,7 @@ - + @@ -30,7 +30,7 @@ true false - + Play @@ -52,52 +52,45 @@ - + - - - - - - - - - - + - - - Textures/Core/White.png - true - - false - - - - - + - - - - - - Option - Fonts/DroidSans.ttf,64 - - - - - - - - - - + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + @@ -116,7 +109,7 @@ true false - + @@ -134,12 +127,121 @@ - + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + false + + + + + + + + + + + + Option + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + @@ -156,7 +258,8 @@ Textures/Core/White.png true - + false + @@ -174,12 +277,46 @@ - + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + diff --git a/resources/Schema/Entities/ServerList.xml b/resources/Schema/Entities/ServerList.xml index 68c10bf7..f9a601f5 100644 --- a/resources/Schema/Entities/ServerList.xml +++ b/resources/Schema/Entities/ServerList.xml @@ -36,7 +36,7 @@ Textures/Core/White.png true - + diff --git a/resources/Schema/Entities/StartMenu.xml b/resources/Schema/Entities/StartMenu.xml index 15bcb542..2ad8f377 100644 --- a/resources/Schema/Entities/StartMenu.xml +++ b/resources/Schema/Entities/StartMenu.xml @@ -14,11 +14,8773 @@ - Schema/Entities/CP_Rocky.xml + Schema/Entities/NewMap2version5NEW.xml - + + + + + 7.0999304984909202 + + + + + + + + + + + + + + 2 + Models/Props/GroundTest.mesh + + + + + + + + Models/Props/Walls/SciFiWallTop.mesh + + + + + + + + + Models/Props/Walls/SciFiWallBig.mesh + true + + + + + + + + + + Models/Props/Walls/SciFiWallMedium.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallSmall1.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallSmall2.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallBig.mesh + + + + + + + + + + + + Models/Props/Walls/SciFiWallMedium.mesh + + + + + + + + + + + + Models/Props/Walls/SciFiWallSmall3.mesh + + + + + + + + + + Models/Props/Walls/SciFiWallSmall4.mesh + + + + + + + + + + + + Models/Highgrounds/Highground1.mesh + + + + + + + + + + Models/Highgrounds/Highground2.mesh + + + + + + + + + + + Models/Highgrounds/Highground3.mesh + + + + + + + + + + + Models/Highgrounds/Highground24.mesh + + + + + + + + + + + Models/Highgrounds/Hg13.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg25.mesh + + + + + + + + + + + + Models/Highgrounds/Hg26.mesh + + + + + + + + + + + + Models/Highgrounds/Hg9.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg4.mesh + + + + + + + + + + + + + + Models/Highgrounds/Hg10.mesh + + + + + + + + + + + + + + Models/Highgrounds/Hg19.mesh + + + + + + + + + + + + + + Models/Highgrounds/Hg19.mesh + + + + + + + + + + + + + + + Models/Highgrounds/Highground12.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg16.mesh + + + + + + + + + + + + Models/Highgrounds/Hg15.mesh + + + + + + + + + + + + Models/Highgrounds/Hg14.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg13.mesh + + + + + + + + + + + + Models/Highgrounds/Hg11.mesh + + + + + + + + + + + + Models/Highgrounds/Hg20.mesh + + + + + + + + + + + + Models/Highgrounds/Hg18.mesh + + + + + + + + + + + + Models/Highgrounds/Hg19.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg17.mesh + + + + + + + + + + + + + + + Models/Highgrounds/Hg8.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg7.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg3.mesh + + + + + + + + + + + + + + + Models/Highgrounds/Highground3.mesh + + + + + + + + + + + + Models/Highgrounds/Highground1.mesh + + + + + + + + + + + Models/Highgrounds/Highground2.mesh + + + + + + + + + + + + + + Models/Highgrounds/Hg1.mesh + + + + + + + + + + + Models/Highgrounds/Hg2.mesh + + + + + + + + + + + + + + Models/Highgrounds/Highground5.mesh + + + + + + + + + + + + Models/Highgrounds/Hg6.mesh + + + + + + + + + + + + Models/Highgrounds/Hg8.mesh + + + + + + + + + + + + Models/Highgrounds/Hg10.mesh + + + + + + + + + + + + Models/Highgrounds/Hg4.mesh + + + + + + + + + + + + Models/Highgrounds/Hg7.mesh + + + + + + + + + + + + Models/Highgrounds/Hg17.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg19.mesh + + + + + + + + + + + + Models/Highgrounds/Hg18.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg20.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg16.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg9.mesh + + + + + + + + + + + + Models/Highgrounds/Hg3.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg19.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + Models/Highgrounds/Hg10.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + + + Models/Highgrounds/Highground22.mesh + + + + + + + + + + + + Models/Highgrounds/Hg8.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg19.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg21.mesh + + + + + + + + + + + + Models/Highgrounds/Hg11.mesh + + + + + + + + + + + + Models/Highgrounds/Hg3.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg17.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg8.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + + + Models/Highgrounds/Hg28.mesh + + + + + + + + + + + Models/Highgrounds/Hg10.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg27.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg15.mesh + + + + + + + + + + + + + + Models/Highgrounds/Hg13.mesh + + + + + + + + + + + + + + + Models/Highgrounds/Hg27.mesh + + + + + + + + + + + + Models/Highgrounds/Hg23.mesh + + + + + + + + + + + + + + + Models/Highgrounds/Hg27.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg23.mesh + + + + + + + + + + + + + + + Models/Highgrounds/Hg28.mesh + + + + + + + + + + + + Models/Highgrounds/Hg10.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg27.mesh + + + + + + + + + + + + + Models/Highgrounds/Hg15.mesh + + + + + + + + + + + + + + Models/Highgrounds/Hg13.mesh + + + + + + + + + + + + + + + Models/Highgrounds/Hg1.mesh + + + + + + + + + + + + Models/Highgrounds/Hg2.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar1Blue.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar1Red.mesh + + + + + + + + + + + + + 4 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + 4 + Models/Props/Pillars/SciFiPillar1Red.mesh + + + + + + + + + + + + + + 4 + Models/Props/Pillars/SciFiPillar3Red.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + 4 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + 4 + Models/Props/Pillars/SciFiPillar3Red.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 5 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 4 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 2 + + + + + + + + + + + + 3 + + + + + + + + + + + + 2 + 1 + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 4 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Red.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar1Red.mesh + + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/mediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/mediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/mediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/mediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/mediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/mediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/mediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Core/UnitPlane.mesh + + true + + + + + + + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + Models/Props/Walls/smallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/mediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 5 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalRed.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + 4 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + 2 + + + + + + + + + + + + 3 + + + + + + + + + + + + 2 + 1 + + + + + + + + + + + + + + 4 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/mediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + + Models/Props/Stones/MediumStone2.mesh + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + + Models/Props/Stones/BigStone.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone1.mesh + + + + + + + + + + + + + + Models/Props/Stones/SmallStone2.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + Models/Props/Walls/SpecialWall1.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar1Blue.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + + Models/Props/Pillars/SciFiBridgePillar1.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridge1Blue.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + Models/Props/Bridges/SciFiBridgeDefense.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + Models/Props/SciFiHolder1.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + Models/Props/Walls/SmallWall3.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall3.mesh + + + + + + + + + + + + + + Models/Core/UnitPlane.mesh + + true + + + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + + + + Models/Props/Pillars/StonePillar.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + 4 + Models/Props/Pillars/SciFiPillar2Red.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + 4 + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + 4 + Models/Props/Pillars/SciFiPillar3Blue.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar1Blue.mesh + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + 6 + Models/Props/Pillars/SciFiPillar2Blue.mesh + + + + + + + + + + + + + + 4 + Models/Props/Pillars/SciFiPillar3Blue.mesh + + + + + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + + + 10 + + + + + + + + + + + + 10 + + + + + + + + + + + 1 + + + + + + + + + + + + 10 + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + Schema/Entities/PlayerAssaultRed.xml + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + Models/Characters/Assault/AssaultTPose.mesh + false + + + + + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 3 + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 15 + 1 + + + + + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointBlue.mesh + + + + + + + + + + -15 + + + + 4 + + + + + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointNeutral.mesh + + + + + + + + + + 15 + 2 + + + + + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + Models/Props/CapturePoint/CapturePointRed.mesh + + + + + + + + + + 15 + + + + + + + + + + + + Models/Core/UnitCylinder.mesh + + true + + + + + + + + + + + + + + + + + + + + + + Schema/Entities/PlayerAssaultBlue.xml + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + Models/Core/UnitCube.mesh + + + + + + + + + + + + @@ -34,7 +8796,7 @@ - + @@ -46,7 +8808,7 @@ - + @@ -70,7 +8832,348 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + false + + + + Play + 1 + + + + + + + + + + + Play + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + false + + + + + + + + + + + + Credits + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + false + + + + + + + + + + + + Option + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + + + + + + + + + + + + + + Textures/Core/White.png + true + + false + + + + + + + + + + + + Quit + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + Textures/HUD/ButtonCorner_16.png + + + + + + + + + + + + + + + + + + + + + + + + + + + Schema/Entities/ServerList.xml + + + + + + + + + + diff --git a/src/Engine/Rendering/BlurHUD.cpp b/src/Engine/Rendering/BlurHUD.cpp index 422b9ec4..8fdb7f1a 100644 --- a/src/Engine/Rendering/BlurHUD.cpp +++ b/src/Engine/Rendering/BlurHUD.cpp @@ -10,7 +10,7 @@ BlurHUD::BlurHUD(IRenderer* renderer) void BlurHUD::InitializeTextures() { - m_BlackTexture = CommonFunctions::LoadTexture("Textures/Core/Black.png", false); + m_BlackTexture = CommonFunctions::TryLoadResource("Textures/Core/Black.png"); m_ScreenQuad = ResourceManager::Load("Models/Core/ScreenQuad.mesh"); } diff --git a/src/Engine/Rendering/DrawBloomPass.cpp b/src/Engine/Rendering/DrawBloomPass.cpp index 73f73cc4..1392f715 100644 --- a/src/Engine/Rendering/DrawBloomPass.cpp +++ b/src/Engine/Rendering/DrawBloomPass.cpp @@ -11,7 +11,7 @@ DrawBloomPass::DrawBloomPass(IRenderer* renderer, ConfigFile* config) void DrawBloomPass::InitializeTextures() { - m_BlackTexture = CommonFunctions::LoadTexture("Textures/Core/Black.png", false); + m_BlackTexture = CommonFunctions::TryLoadResource("Textures/Core/Black.png"); } void DrawBloomPass::ChangeQuality(int quality) diff --git a/src/Engine/Rendering/DrawFinalPass.cpp b/src/Engine/Rendering/DrawFinalPass.cpp index edde3ef5..dce4ea05 100644 --- a/src/Engine/Rendering/DrawFinalPass.cpp +++ b/src/Engine/Rendering/DrawFinalPass.cpp @@ -14,11 +14,11 @@ DrawFinalPass::DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCulling void DrawFinalPass::InitializeTextures() { - m_WhiteTexture = CommonFunctions::LoadTexture("Textures/Core/White.png", false); - m_BlackTexture = CommonFunctions::LoadTexture("Textures/Core/Black.png", false); - m_NeutralNormalTexture = CommonFunctions::LoadTexture("Textures/Core/NeutralNormalMap.png", false); - m_GreyTexture = CommonFunctions::LoadTexture("Textures/Core/Grey.png", false); - m_ErrorTexture = CommonFunctions::LoadTexture("Textures/Core/ErrorTexture.png", false); + m_WhiteTexture = CommonFunctions::TryLoadResource("Textures/Core/White.png"); + m_BlackTexture = CommonFunctions::TryLoadResource("Textures/Core/Black.png"); + m_NeutralNormalTexture = CommonFunctions::TryLoadResource("Textures/Core/NeutralNormalMap.png"); + m_GreyTexture = CommonFunctions::TryLoadResource("Textures/Core/Grey.png"); + m_ErrorTexture = CommonFunctions::TryLoadResource("Textures/Core/ErrorTexture.png"); } void DrawFinalPass::InitializeFrameBuffers() diff --git a/src/Engine/Rendering/Model.cpp b/src/Engine/Rendering/Model.cpp index 3f8e20e1..d34ce809 100644 --- a/src/Engine/Rendering/Model.cpp +++ b/src/Engine/Rendering/Model.cpp @@ -10,31 +10,31 @@ Model::Model(std::string fileName) case RawModel::MaterialType::SingleTextures: { RawModel::MaterialSingleTextures* materialSingleTexture = static_cast(materialProperty.material); - materialSingleTexture->ColorMap.Texture = CommonFunctions::LoadTexture(materialSingleTexture->ColorMap.TexturePath, false); - materialSingleTexture->NormalMap.Texture = CommonFunctions::LoadTexture(materialSingleTexture->NormalMap.TexturePath, false); - materialSingleTexture->SpecularMap.Texture = CommonFunctions::LoadTexture(materialSingleTexture->SpecularMap.TexturePath, false); - materialSingleTexture->IncandescenceMap.Texture = CommonFunctions::LoadTexture(materialSingleTexture->IncandescenceMap.TexturePath, false); + materialSingleTexture->ColorMap.Texture = CommonFunctions::TryLoadResource(materialSingleTexture->ColorMap.TexturePath); + materialSingleTexture->NormalMap.Texture = CommonFunctions::TryLoadResource(materialSingleTexture->NormalMap.TexturePath); + materialSingleTexture->SpecularMap.Texture = CommonFunctions::TryLoadResource(materialSingleTexture->SpecularMap.TexturePath); + materialSingleTexture->IncandescenceMap.Texture = CommonFunctions::TryLoadResource(materialSingleTexture->IncandescenceMap.TexturePath); } break; case RawModel::MaterialType::SplatMapping: { RawModel::MaterialSplatMapping* materialSplatMapping = static_cast(materialProperty.material); - materialSplatMapping->SplatMap.Texture = CommonFunctions::LoadTexture(materialSplatMapping->SplatMap.TexturePath, false); + materialSplatMapping->SplatMap.Texture = CommonFunctions::TryLoadResource(materialSplatMapping->SplatMap.TexturePath); for (auto& texture : materialSplatMapping->ColorMaps) { - texture.Texture = CommonFunctions::LoadTexture(texture.TexturePath, false); + texture.Texture = CommonFunctions::TryLoadResource(texture.TexturePath); } for (auto& texture : materialSplatMapping->NormalMaps) { - texture.Texture = CommonFunctions::LoadTexture(texture.TexturePath, false); + texture.Texture = CommonFunctions::TryLoadResource(texture.TexturePath); } for (auto& texture : materialSplatMapping->SpecularMaps) { - texture.Texture = CommonFunctions::LoadTexture(texture.TexturePath, false); + texture.Texture = CommonFunctions::TryLoadResource(texture.TexturePath); } for (auto& texture : materialSplatMapping->IncandescenceMaps) { - texture.Texture = CommonFunctions::LoadTexture(texture.TexturePath, false); + texture.Texture = CommonFunctions::TryLoadResource(texture.TexturePath); } } break; diff --git a/src/Engine/Rendering/Renderer.cpp b/src/Engine/Rendering/Renderer.cpp index f58e6208..308c9c94 100644 --- a/src/Engine/Rendering/Renderer.cpp +++ b/src/Engine/Rendering/Renderer.cpp @@ -220,8 +220,8 @@ PickData Renderer::Pick(glm::vec2 screenCoord) void Renderer::InitializeTextures() { - m_ErrorTexture = CommonFunctions::LoadTexture("Textures/Core/ErrorTexture.png", false); - m_WhiteTexture = CommonFunctions::LoadTexture("Textures/Core/White.png", false); + m_ErrorTexture = CommonFunctions::TryLoadResource("Textures/Core/ErrorTexture.png"); + m_WhiteTexture = CommonFunctions::TryLoadResource("Textures/Core/White.png"); } diff --git a/src/Engine/Rendering/SSAOPass.cpp b/src/Engine/Rendering/SSAOPass.cpp index 3b11535f..6f48c9eb 100644 --- a/src/Engine/Rendering/SSAOPass.cpp +++ b/src/Engine/Rendering/SSAOPass.cpp @@ -4,7 +4,7 @@ SSAOPass::SSAOPass(IRenderer* renderer, ConfigFile* config) : m_Renderer(renderer) , m_Config(config) { - m_WhiteTexture = CommonFunctions::LoadTexture("Textures/Core/White.png", false); + m_WhiteTexture = CommonFunctions::TryLoadResource("Textures/Core/White.png"); ChangeQuality(m_Config->Get("SSAO.Quality", 0)); diff --git a/src/Engine/Rendering/Texture.cpp b/src/Engine/Rendering/Texture.cpp index 03347044..fdf387c2 100644 --- a/src/Engine/Rendering/Texture.cpp +++ b/src/Engine/Rendering/Texture.cpp @@ -4,18 +4,6 @@ Texture::Texture(std::string path) { PNG* img = ResourceManager::Load(path); //TODO: Make this threaded. Catch exeptions in all other load places. - //PNG image(path); - - //if (img->Width == 0 && img->Height == 0 || img->Format == Image::ImageFormat::Unknown) { - // //image = PNG("Textures/Core/ErrorTexture.png"); - // //return; // Temporary fix to remove crash - - // if (img->Width == 0 && img->Height == 0 || img->Format == Image::ImageFormat::Unknown) { - // LOG_ERROR("Couldn't even load the error texture. This is a dark day indeed."); - // return; - // } - //} - this->Width = img->Width; this->Height = img->Height; this->Data = img->Data; @@ -29,9 +17,9 @@ Texture::Texture(std::string path) format = GL_RGBA; break; } - - + // Construct the OpenGL texture + glGenTextures(1, &m_Texture); glBindTexture(GL_TEXTURE_2D, m_Texture); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); diff --git a/src/Engine/Rendering/TextureSprite.cpp b/src/Engine/Rendering/TextureSprite.cpp new file mode 100644 index 00000000..178aebf0 --- /dev/null +++ b/src/Engine/Rendering/TextureSprite.cpp @@ -0,0 +1,11 @@ +#include "Rendering/TextureSprite.h" + +TextureSprite::TextureSprite(std::string path) + :Texture(path) +{ + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_NEAREST); + GLERROR("Texture load"); +} \ No newline at end of file diff --git a/src/Engine/Rendering/Util/CommonFunctions.cpp b/src/Engine/Rendering/Util/CommonFunctions.cpp index 913e005e..e1344928 100644 --- a/src/Engine/Rendering/Util/CommonFunctions.cpp +++ b/src/Engine/Rendering/Util/CommonFunctions.cpp @@ -1,23 +1,5 @@ #include "Rendering/Util/CommonFunctions.h" -Texture* CommonFunctions::LoadTexture(std::string path, bool threaded) -{ - Texture* img; - try { - if(threaded) { - img = ResourceManager::Load(path); - } else { - img = ResourceManager::Load(path); - } - } catch (const Resource::StillLoadingException&) { - img = ResourceManager::Load("Textures/Core/ErrorTexture.png"); - } catch (const std::exception&) { - img = nullptr; - } - - return img; -} - void CommonFunctions::GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) { glDeleteTextures(1, texture); diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index 806d26c1..ccdd1785 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -40,6 +40,7 @@ #include "Game/Systems/MainMenuSystem.h" #include "Game/Systems/ServerListSystem.h" #include "Game/Systems/StartSystem.h" +#include "Rendering/TextureSprite.h" Game::Game(int argc, char* argv[]) @@ -51,6 +52,7 @@ Game::Game(int argc, char* argv[]) ResourceManager::RegisterType("Model"); ResourceManager::RegisterType("RawModel"); ResourceManager::RegisterType("Texture"); + ResourceManager::RegisterType("TextureSprite"); ResourceManager::RegisterType("Png"); ResourceManager::RegisterType("ShaderProgram"); ResourceManager::RegisterType("EntityFile"); diff --git a/src/Game/Systems/DamageIndicatorSystem.cpp b/src/Game/Systems/DamageIndicatorSystem.cpp index e68f741d..4c1272e2 100644 --- a/src/Game/Systems/DamageIndicatorSystem.cpp +++ b/src/Game/Systems/DamageIndicatorSystem.cpp @@ -8,7 +8,7 @@ DamageIndicatorSystem::DamageIndicatorSystem(SystemParams params) EVENT_SUBSCRIBE_MEMBER(m_ESetCamera, &DamageIndicatorSystem::OnSetCamera); //load texture to cache - auto texture = CommonFunctions::LoadTexture("Textures/DamageIndicator.png", false); + auto texture = CommonFunctions::TryLoadResource("Textures/DamageIndicator.png"); auto entityFile = ResourceManager::Load("Schema/Entities/DamageIndicator.xml"); } diff --git a/src/Game/Systems/MainMenuSystem.cpp b/src/Game/Systems/MainMenuSystem.cpp index f3ff439f..848070b4 100644 --- a/src/Game/Systems/MainMenuSystem.cpp +++ b/src/Game/Systems/MainMenuSystem.cpp @@ -82,7 +82,6 @@ bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e) } } else { //Serverlist submenu is open, close it. - printf("\n\nMenuShit\n\n"); m_World->DeleteEntity(m_OpenSubMenu.ID); m_OpenSubMenu = EntityWrapper::Invalid; } From 85e63acda0b5ee55776ecef07ee13799bcceddda Mon Sep 17 00:00:00 2001 From: Teejoon Date: Wed, 9 Mar 2016 17:36:30 +0100 Subject: [PATCH 63/68] removed standarduniforms --- assets | 2 +- resources/Shaders/StandarUniform.glsl | 55 --------------------------- 2 files changed, 1 insertion(+), 56 deletions(-) delete mode 100644 resources/Shaders/StandarUniform.glsl diff --git a/assets b/assets index d48c77c8..8ca6eba0 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit d48c77c854317333e38917a2be76069df969426d +Subproject commit 8ca6eba0f329b83f7d5fba87fca74cb18eeb0bd0 diff --git a/resources/Shaders/StandarUniform.glsl b/resources/Shaders/StandarUniform.glsl deleted file mode 100644 index 9fc4b6f8..00000000 --- a/resources/Shaders/StandarUniform.glsl +++ /dev/null @@ -1,55 +0,0 @@ -//----- SHADER DEFINES ----- -#define MAX_BONES 100 -#define MIN_AMBIENT_LIGHT 0.3 - -//----- UNIFORM LOCATION ----- -#define PVM_UNIFORM_LOCATION 100 -#define VM_UNIFORM_LOCATION 101 -#define VP_UNIFORM_LOCATION 102 -#define TIM_UNIFORM_LOCATION 103 -#define M_UNIFORM_LOCATION 104 -#define V_UNIFORM_LOCATION 105 -#define P_UNIFORM_LOCATION 106 - -#define BONES_LOCATION 200 - -#define AMBIENT_COLOR_UNIFORM_LOCATION 300 -#define COLOR_UNIFORM_LOCATION 301 -#define DIFFUSE_COLOR_UNIFORM_LOCATION 302 -#define SCREEN_DIMENSIONS_UNIFORM_LOCATION 303 -#define FILL_COLOR_UNIFORM_LOCATION 304 -#define FILL_PERCENTAGE_UNIFORM_LOCATION 305 -#define GLOW_INTENSITY_UNIFORM_LOCATION 306 -#define CAMERA_POSITION_UNIFORM_LOCATION 306 -#define SSAO_QUALITY_UNIFORM_LOCATION 308 - -#define LOCAL_UNIFORM_LOCATION1; - -//----- TEXTURE LOCATION ----- -#define SSAO_TEXTURE_LOCATION 0 -#define SHADOW_TEXTURE_LOCATION 1 -#define LOCAL_TEXTURE_LOCATION1 2 -#define LOCAL_TEXTURE_LOCATION2 3 -#define LOCAL_TEXTURE_LOCATION3 4 -#define LOCAL_TEXTURE_LOCATION4 5 -#define LOCAL_TEXTURE_LOCATION5 6 -#define LOCAL_TEXTURE_LOCATION6 7 -#define LOCAL_TEXTURE_LOCATION7 8 -#define LOCAL_TEXTURE_LOCATION8 9 -#define LOCAL_TEXTURE_LOCATION9 10 -#define LOCAL_TEXTURE_LOCATION10 11 -#define LOCAL_TEXTURE_LOCATION11 12 -#define LOCAL_TEXTURE_LOCATION12 13 -#define LOCAL_TEXTURE_LOCATION13 14 -#define LOCAL_TEXTURE_LOCATION14 15 -#define LOCAL_TEXTURE_LOCATION15 16 -#define LOCAL_TEXTURE_LOCATION16 17 -#define LOCAL_TEXTURE_LOCATION17 18 -#define LOCAL_TEXTURE_LOCATION18 19 -#define LOCAL_TEXTURE_LOCATION19 20 -#define LOCAL_TEXTURE_LOCATION20 21 -#define LOCAL_TEXTURE_LOCATION21 22 -#define LOCAL_TEXTURE_LOCATION22 23 -#define LOCAL_TEXTURE_LOCATION23 24 -#define LOCAL_TEXTURE_LOCATION24 25 -#define LOCAL_TEXTURE_LOCATION25 26 From d093284569da1571658b1b83b9ec693a7ced2e3e Mon Sep 17 00:00:00 2001 From: Tleety Date: Wed, 9 Mar 2016 17:37:40 +0100 Subject: [PATCH 64/68] Rename variable --- include/Game/Systems/StartSystem.h | 2 +- src/Game/Systems/StartSystem.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/Game/Systems/StartSystem.h b/include/Game/Systems/StartSystem.h index c7764e1b..fb2231e9 100644 --- a/include/Game/Systems/StartSystem.h +++ b/include/Game/Systems/StartSystem.h @@ -14,7 +14,7 @@ public: virtual void Update(double dt) override; private: - EntityWrapper m_activeCamera = EntityWrapper::Invalid; + EntityWrapper m_ActiveCamera = EntityWrapper::Invalid; EventRelay m_ECameraActivated; bool OnCameraActivated(const Events::SetCamera& e); diff --git a/src/Game/Systems/StartSystem.cpp b/src/Game/Systems/StartSystem.cpp index 4c67b210..3efc2ec3 100644 --- a/src/Game/Systems/StartSystem.cpp +++ b/src/Game/Systems/StartSystem.cpp @@ -15,7 +15,7 @@ void StartSystem::Update(double dt) } for(auto& cCamera: *cameras) { EntityWrapper cameraEntity = EntityWrapper(m_World, cCamera.EntityID); - if(cameraEntity == m_activeCamera){ + if(cameraEntity == m_ActiveCamera){ return; } if(cameraEntity.Name() == "Overview_Camera_Start_Menu") { @@ -28,6 +28,6 @@ void StartSystem::Update(double dt) bool StartSystem::OnCameraActivated(const Events::SetCamera& e) { - m_activeCamera = e.CameraEntity; + m_ActiveCamera = e.CameraEntity; return 1; } From fdc37a9fe94be8e5f20901d26db32b3c7a805395 Mon Sep 17 00:00:00 2001 From: stiffly Date: Wed, 9 Mar 2016 17:49:04 +0100 Subject: [PATCH 65/68] Loads the correct menu --- src/Engine/Network/Client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index f9905511..b4eafbcb 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -707,7 +707,7 @@ void Client::removeWorld() void Client::createMainMenu() { - auto entityFile = ResourceManager::Load("Schema/Entities/MainMenu.xml"); + auto entityFile = ResourceManager::Load("Schema/Entities/StartMenu.xml"); entityFile->MergeInto(m_World); } From 0b58f32f32a3814a3040e56096e0c2646f6aaa5e Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Wed, 9 Mar 2016 18:01:32 +0100 Subject: [PATCH 66/68] Fixed third person animations over network --- include/Game/Systems/Weapon/WeaponBehaviour.h | 6 ++---- src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp | 10 ---------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/include/Game/Systems/Weapon/WeaponBehaviour.h b/include/Game/Systems/Weapon/WeaponBehaviour.h index 3f3b6559..cd067f36 100644 --- a/include/Game/Systems/Weapon/WeaponBehaviour.h +++ b/include/Game/Systems/Weapon/WeaponBehaviour.h @@ -293,10 +293,8 @@ private: firstPersonWeapon = SpawnerSystem::Spawn(firstPersonAttachment, firstPersonAttachment); } } - if (IsServer) { - if (thirdPersonAttachment.Valid()) { - thirdPersonWeapon = SpawnerSystem::Spawn(thirdPersonAttachment, thirdPersonAttachment); - } + if (thirdPersonAttachment.Valid()) { + thirdPersonWeapon = SpawnerSystem::Spawn(thirdPersonAttachment, thirdPersonAttachment); } WeaponInfo& wi = m_ActiveWeapons[player]; diff --git a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp index dddf5fdd..6d8006aa 100644 --- a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp @@ -133,11 +133,6 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) b1.Restart = true; b1.Start = true; m_EventBroker->Publish(b1); - Events::AutoAnimationBlend b2; - b2.RootNode = wi.ThirdPersonPlayerModel; - b2.NodeName = "MovementBlend"; - b2.AnimationEntity = wi.ThirdPersonPlayerModel.FirstChildByName("AssaultWeaponBlend").FirstChildByName("Reload"); - m_EventBroker->Publish(b2); // Spawn explosion effect if (wi.FirstPersonEntity.Valid()) { @@ -254,11 +249,6 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi b1.Restart = true; b1.Start = true; m_EventBroker->Publish(b1); - Events::AutoAnimationBlend b2; - b2.RootNode = wi.ThirdPersonPlayerModel; - b2.NodeName = "MovementBlend"; - b2.AnimationEntity = wi.ThirdPersonPlayerModel.FirstChildByName("AssaultWeaponBlend").FirstChildByName("Fire"); - m_EventBroker->Publish(b2); // Sound Events::PlaySoundOnEntity e; From d42d886dcc22604394b11d19a72b391795119e50 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Wed, 9 Mar 2016 18:27:09 +0100 Subject: [PATCH 67/68] 3rd person animations synced with 1st person animations --- include/Engine/Core/EntityWrapper.h | 2 +- .../Engine/Input/FirstPersonInputController.h | 46 ++++++++-- .../Schema/Entities/PlayerAssaultBlue.xml | 92 ++++++++++--------- src/Engine/Core/EntityWrapper.cpp | 2 +- src/Engine/Rendering/AnimationSystem.cpp | 5 +- src/Engine/Rendering/BlendTree.cpp | 2 - src/Game/Systems/PlayerMovementSystem.cpp | 34 +++---- .../Systems/Weapon/AssaultWeaponBehaviour.cpp | 11 +-- 8 files changed, 107 insertions(+), 87 deletions(-) diff --git a/include/Engine/Core/EntityWrapper.h b/include/Engine/Core/EntityWrapper.h index dfa835f7..305fc21f 100644 --- a/include/Engine/Core/EntityWrapper.h +++ b/include/Engine/Core/EntityWrapper.h @@ -23,7 +23,7 @@ struct EntityWrapper static const EntityWrapper Invalid; - const std::string Name(); + const std::string Name() const; bool HasComponent(const std::string& componentType); void AttachComponent(const char* componentName); EntityWrapper Parent(); diff --git a/include/Engine/Input/FirstPersonInputController.h b/include/Engine/Input/FirstPersonInputController.h index 75726fd3..30d1f945 100644 --- a/include/Engine/Input/FirstPersonInputController.h +++ b/include/Engine/Input/FirstPersonInputController.h @@ -153,6 +153,31 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm m_EventBroker->Publish(aeb); } } + + + EntityWrapper firstPersonModel = m_PlayerEntity.FirstChildByName("Hands"); + if (firstPersonModel.Valid()) { + if (val > 0) { // Walk/Run + if (!m_Crouching) { + Events::AutoAnimationBlend aeb; + aeb.Duration = 0.1; + aeb.NodeName = "Run"; + aeb.RootNode = firstPersonModel; + aeb.Start = true; + m_EventBroker->Publish(aeb); + } + } else if (val < 0) { // Walk/run Backwards + if (!m_Crouching) { + Events::AutoAnimationBlend aeb; + aeb.Duration = 0.1; + aeb.NodeName = "Run"; + aeb.RootNode = firstPersonModel; + aeb.Start = true; + aeb.Reverse = true; + m_EventBroker->Publish(aeb); + } + } + } } } if (e.Command == "Right") { @@ -187,27 +212,36 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm } //Animation - if (glm::length2(m_Movement) < 0.1f) { + if (glm::length2(m_Movement) < 0.25f) { //Blend to Idle if (m_PlayerEntity.Valid()) { EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); if (playerModel.Valid()) { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.2; + aeb.Duration = 0.1; aeb.NodeName = "Idle"; aeb.RootNode = playerModel; + aeb.Start = true; + m_EventBroker->Publish(aeb); + } + EntityWrapper firstPersonModel = m_PlayerEntity.FirstChildByName("Hands"); + if (firstPersonModel.Valid()) { + Events::AutoAnimationBlend aeb; + aeb.Duration = 0.1; + aeb.NodeName = "Idle"; + aeb.RootNode = firstPersonModel; + aeb.Start = true; m_EventBroker->Publish(aeb); } } } else { - //Blend to movement if (m_PlayerEntity.Valid()) { EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); if (playerModel.Valid()) { Events::AutoAnimationBlend aeb; - aeb.Duration = 0.2; - aeb.NodeName = "MovementBlend"; + aeb.Duration = 0.1; + aeb.NodeName = "DirectionBlend"; aeb.RootNode = playerModel; m_EventBroker->Publish(aeb); } @@ -226,7 +260,7 @@ bool FirstPersonInputController::OnCommand(const Events::InputComm glm::vec2 direction = glm::normalize(glm::vec2(m_Movement.x, m_Movement.z)); double weight = glm::abs(glm::dot(glm::vec2(1, 0), direction)); Events::SetBlendWeight sbw; - sbw.NodeName = "MovementBlend"; + sbw.NodeName = "DirectionBlend"; sbw.Weight = weight; sbw.RootNode = playerModel; m_EventBroker->Publish(sbw); diff --git a/resources/Schema/Entities/PlayerAssaultBlue.xml b/resources/Schema/Entities/PlayerAssaultBlue.xml index 780d3531..64141757 100644 --- a/resources/Schema/Entities/PlayerAssaultBlue.xml +++ b/resources/Schema/Entities/PlayerAssaultBlue.xml @@ -2,7 +2,6 @@ - @@ -22,6 +21,7 @@ + @@ -463,7 +463,7 @@ - Textures/Icons/Abilities/Superman-01.png + Textures\Icons\Abilities\Superman-01.png false @@ -504,25 +504,25 @@ - - AssaultWeapon - Schema/Entities/WeaponAssaultBlueView.xml + + AssaultWeapon + - - DefenderWeapon - Schema/Entities/WeaponDefenderBlueView.xml + + DefenderWeapon + @@ -566,19 +566,19 @@ R_Arm_Weapon_Joint + + Schema/Entities/WeaponAssaultBlueWorld.xml + + + + + AssaultWeapon - - Schema/Entities/WeaponAssaultBlueWorld.xml - - - - - @@ -587,26 +587,26 @@ R_Arm_Weapon_Joint + + Schema/Entities/SidearmWeaponWorld.xml + + + + + SidearmWeapon - - Schema/Entities/SidearmWeaponWorld.xml - - - - - - StandCrouchBlend + MovementBlend JumpDashBlend 2.5146881298480398e-63 true @@ -628,7 +628,7 @@ - MovementBlend + DirectionBlend Idle 1 @@ -659,7 +659,7 @@ CrouchStrafeLeftF - + true @@ -670,7 +670,7 @@ CrouchStrafeRightF - + true @@ -683,7 +683,7 @@ CrouchWalkF - + true @@ -696,7 +696,8 @@ CrouchF - + + true @@ -707,7 +708,7 @@ - MovementBlend + DirectionBlend Idle 1 @@ -738,7 +739,7 @@ WalkF - + true @@ -749,7 +750,8 @@ RunF - + + 2 true @@ -772,7 +774,8 @@ StrafeLeftF - + + 2 true @@ -783,7 +786,8 @@ StrafeRightF - + + 2 true @@ -798,7 +802,7 @@ IdleF - + true @@ -856,7 +860,7 @@ DashForwardF - 2 + 1.7999999523162842 false @@ -868,7 +872,7 @@ DashBackwardF - 2 + 1.7999999523162842 false @@ -887,24 +891,24 @@ - + - DashLeftF + DashRightF - 2 + 1.7999999523162842 false - + - DashRightF + DashLeftF - 2 + 1.7999999523162842 false @@ -981,7 +985,7 @@ - + Idle @@ -995,6 +999,7 @@ IdleAssaultRifleU + true true @@ -1006,6 +1011,7 @@ IdleAssaultRifleU + true true diff --git a/src/Engine/Core/EntityWrapper.cpp b/src/Engine/Core/EntityWrapper.cpp index cba90ded..a85127ad 100644 --- a/src/Engine/Core/EntityWrapper.cpp +++ b/src/Engine/Core/EntityWrapper.cpp @@ -3,7 +3,7 @@ const EntityWrapper EntityWrapper::Invalid = EntityWrapper(nullptr, EntityID_Invalid); -const std::string EntityWrapper::Name() +const std::string EntityWrapper::Name() const { return World->GetName(ID); } diff --git a/src/Engine/Rendering/AnimationSystem.cpp b/src/Engine/Rendering/AnimationSystem.cpp index be00a0f4..93a603a7 100644 --- a/src/Engine/Rendering/AnimationSystem.cpp +++ b/src/Engine/Rendering/AnimationSystem.cpp @@ -127,9 +127,12 @@ void AnimationSystem::UpdateAnimations(double dt) void AnimationSystem::UpdateWeights(double dt) { for (auto it = m_AutoBlendQueues.begin(); it != m_AutoBlendQueues.end(); ) { + LOG_INFO("%s", it->first.Name().c_str()); + it->second.PrintQueue(); + if(it->second.HasActiveBlendJob()) { AutoBlendQueue::AutoBlendJob& blendJob = it->second.GetActiveBlendJob(); - + LOG_INFO("%s", blendJob.RootNode.Name().c_str()); std::shared_ptr blendTree = it->second.GetBlendTree(); if (blendTree != nullptr) { if (blendJob.Duration != 0.0) { diff --git a/src/Engine/Rendering/BlendTree.cpp b/src/Engine/Rendering/BlendTree.cpp index 1ecafc56..ca22cd74 100644 --- a/src/Engine/Rendering/BlendTree.cpp +++ b/src/Engine/Rendering/BlendTree.cpp @@ -214,7 +214,6 @@ BlendTree::AutoBlendInfo BlendTree::AutoBlendStep(AutoBlendInfo blendInfo) } } } - return blendInfo; } @@ -333,7 +332,6 @@ BlendTree::AutoBlendInfo BlendTree::AutoBlendStep(AutoBlendInfo blendInfo) } } } - } return blendInfo; diff --git a/src/Game/Systems/PlayerMovementSystem.cpp b/src/Game/Systems/PlayerMovementSystem.cpp index 99edef2c..cfe7356c 100644 --- a/src/Game/Systems/PlayerMovementSystem.cpp +++ b/src/Game/Systems/PlayerMovementSystem.cpp @@ -85,7 +85,7 @@ void PlayerMovementSystem::updateMovementControllers(double dt) // Set third person model aim pitch EntityWrapper playerModel = player.FirstChildByName("PlayerModel"); if (playerModel.Valid()) { - EntityWrapper aimPrimaryEntity = playerModel.FirstChildByName("AimPrimary"); + EntityWrapper aimPrimaryEntity = playerModel.FirstChildByName("Aim"); if(aimPrimaryEntity.Valid()){ if(aimPrimaryEntity.HasComponent("Animation")) { float pitch = cameraOrientation.x; @@ -93,14 +93,6 @@ void PlayerMovementSystem::updateMovementControllers(double dt) (double&)aimPrimaryEntity["Animation"]["Time"] = time; } } - EntityWrapper aimSecondaryEntity = playerModel.FirstChildByName("AimSecondary"); - if (aimSecondaryEntity.Valid()) { - if (aimSecondaryEntity.HasComponent("Animation")) { - float pitch = cameraOrientation.x; - double time = (pitch + glm::half_pi()) / glm::pi(); - (double&)aimSecondaryEntity["Animation"]["Time"] = time; - } - } } } @@ -212,7 +204,7 @@ void PlayerMovementSystem::updateMovementControllers(double dt) { Events::AutoAnimationBlend aeb; aeb.Duration = 0.25; - aeb.NodeName = "StandCrouchBlend"; + aeb.NodeName = "MovementBlend"; aeb.RootNode = playerModel; aeb.Start = true; aeb.Restart = false; @@ -243,11 +235,11 @@ void PlayerMovementSystem::updateMovementControllers(double dt) { Events::AutoAnimationBlend aeb; aeb.Duration = 0.25; - aeb.NodeName = "StandCrouchBlend"; + aeb.NodeName = "MovementBlend"; aeb.RootNode = playerModel; aeb.Start = true; aeb.Restart = false; - aeb.AnimationEntity = playerModel.FirstChildByName("Jump"); + aeb.AnimationEntity = playerModel.FirstChildByName("BlendTreeLower").FirstChildByName("Jump"); m_EventBroker->Publish(aeb); } } @@ -376,12 +368,12 @@ void PlayerMovementSystem::spawnHexagon(EntityWrapper target) bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) { EntityWrapper player(m_World, e.Player); - if (!player.Valid() || !IsClient){// || player.ID == LocalPlayer.ID) { + if (!player.Valid()){// || !IsClient || player.ID == LocalPlayer.ID) { return false; } - auto entityFile = ResourceManager::Load("Schema/Entities/DashEffect.xml"); - EntityWrapper dashEffect = entityFile->MergeInto(m_World); +// auto entityFile = ResourceManager::Load("Schema/Entities/DashEffect.xml"); + // EntityWrapper dashEffect = entityFile->MergeInto(m_World); EntityWrapper playerModel = player.FirstChildByName("PlayerModel"); for (auto& kv : m_PlayerInputControllers) { @@ -409,9 +401,8 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) { Events::AutoAnimationBlend aeb; aeb.Duration = 0.2; - aeb.NodeName = "StandCrouchBlend"; + aeb.NodeName = "MovementBlend"; aeb.RootNode = playerModel; - aeb.Delay = 0.2; aeb.Start = true; aeb.Restart = false; aeb.AnimationEntity = playerModel.FirstChildByName("DashRight"); @@ -430,9 +421,8 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) { Events::AutoAnimationBlend aeb; aeb.Duration = 0.2; - aeb.NodeName = "StandCrouchBlend"; + aeb.NodeName = "MovementBlend"; aeb.RootNode = playerModel; - aeb.Delay = 0.2; aeb.Start = true; aeb.Restart = false; aeb.AnimationEntity = playerModel.FirstChildByName("DashLeft"); @@ -453,9 +443,8 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) { Events::AutoAnimationBlend aeb; aeb.Duration = 0.2; - aeb.NodeName = "StandCrouchBlend"; + aeb.NodeName = "MovementBlend"; aeb.RootNode = playerModel; - aeb.Delay = 0.2; aeb.Start = true; aeb.Restart = false; aeb.AnimationEntity = playerModel.FirstChildByName("DashForward"); @@ -474,9 +463,8 @@ bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) { Events::AutoAnimationBlend aeb; aeb.Duration = 0.2; - aeb.NodeName = "StandCrouchBlend"; + aeb.NodeName = "MovementBlend"; aeb.RootNode = playerModel; - aeb.Delay = 0.2; aeb.Start = true; aeb.Restart = false; aeb.AnimationEntity = playerModel.FirstChildByName("DashBackward"); diff --git a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp index dddf5fdd..8c92b35b 100644 --- a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp @@ -133,11 +133,6 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) b1.Restart = true; b1.Start = true; m_EventBroker->Publish(b1); - Events::AutoAnimationBlend b2; - b2.RootNode = wi.ThirdPersonPlayerModel; - b2.NodeName = "MovementBlend"; - b2.AnimationEntity = wi.ThirdPersonPlayerModel.FirstChildByName("AssaultWeaponBlend").FirstChildByName("Reload"); - m_EventBroker->Publish(b2); // Spawn explosion effect if (wi.FirstPersonEntity.Valid()) { @@ -247,6 +242,7 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi // Play animation playAnimationAndReturn(wi.FirstPersonEntity, "ActionBlend", "Fire"); + // Third person anim Events::AutoAnimationBlend b1; b1.RootNode = wi.ThirdPersonPlayerModel; @@ -254,11 +250,6 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi b1.Restart = true; b1.Start = true; m_EventBroker->Publish(b1); - Events::AutoAnimationBlend b2; - b2.RootNode = wi.ThirdPersonPlayerModel; - b2.NodeName = "MovementBlend"; - b2.AnimationEntity = wi.ThirdPersonPlayerModel.FirstChildByName("AssaultWeaponBlend").FirstChildByName("Fire"); - m_EventBroker->Publish(b2); // Sound Events::PlaySoundOnEntity e; From 1bfd0cce5eed54cddd4861232c5ed52f1b4a918c Mon Sep 17 00:00:00 2001 From: viktorljung Date: Wed, 9 Mar 2016 18:36:53 +0100 Subject: [PATCH 68/68] Idel --- resources/Schema/Entities/WeaponAssaultBlueView.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/resources/Schema/Entities/WeaponAssaultBlueView.xml b/resources/Schema/Entities/WeaponAssaultBlueView.xml index 05b65bbb..49015151 100644 --- a/resources/Schema/Entities/WeaponAssaultBlueView.xml +++ b/resources/Schema/Entities/WeaponAssaultBlueView.xml @@ -72,7 +72,7 @@ - IdleF + IdelF true true @@ -91,8 +91,8 @@ Models/Weapons/Blue/AssaultWeaponBlue.mesh - - + + @@ -127,9 +127,9 @@ true - - - + + +