diff --git a/Code/DanBias.sln b/Code/DanBias.sln index e14d2c37..033e050e 100644 --- a/Code/DanBias.sln +++ b/Code/DanBias.sln @@ -47,6 +47,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Utilities", "Misc\Utilities EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LevelLoader", "Game\LevelLoader\LevelLoader.vcxproj", "{6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameServerDebugEnvironment", "Game\LanServer\GameServerDebugEnvironment\GameServerDebugEnvironment.vcxproj", "{67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -715,6 +717,40 @@ Global {6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}.RelWithDebInfo|x64.ActiveCfg = Release|Win32 {6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}.RelWithDebInfo|x86.ActiveCfg = Release|Win32 {6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}.RelWithDebInfo|x86.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Win32.ActiveCfg = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Win32.Build.0 = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|x64.ActiveCfg = Debug|x64 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|x64.Build.0 = Debug|x64 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|x86.ActiveCfg = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|x86.Build.0 = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Any CPU.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Win32.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|x64.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|x86.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|x86.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Any CPU.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Mixed Platforms.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Win32.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Win32.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|x64.ActiveCfg = Release|x64 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|x64.Build.0 = Release|x64 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|x86.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|x86.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|x64.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|x86.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -737,5 +773,6 @@ Global {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE} = {1322B12B-5E37-448A-AAAF-F637460DCB23} {604A12A7-07BF-4482-BDF3-7101C811F121} = {C83A6FAD-E71F-4B1E-9D63-E93E61DDC012} {C8CBA520-5D7D-4D61-A8DA-6E05FD132BCB} = {C83A6FAD-E71F-4B1E-9D63-E93E61DDC012} + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE} = {C83A6FAD-E71F-4B1E-9D63-E93E61DDC012} EndGlobalSection EndGlobal diff --git a/Code/Game/GameClient/DanBiasGame_Impl.cpp b/Code/Game/GameClient/DanBiasGame_Impl.cpp index b978597c..b0107a17 100644 --- a/Code/Game/GameClient/DanBiasGame_Impl.cpp +++ b/Code/Game/GameClient/DanBiasGame_Impl.cpp @@ -106,9 +106,9 @@ namespace DanBias Graphics::API::Update( dt ); data.capFrame += dt; - if(data.capFrame > 0.03) + if(data.capFrame > 0.03f) { - switch( Update(dt) ) + switch( Update(data.capFrame) ) { case Result_continue: break; case Result_quit: return DanBiasClientReturn_Success; @@ -117,7 +117,7 @@ namespace DanBias } if(Render() != S_OK) return DanBiasClientReturn_Error; - data.capFrame = 0; + data.capFrame -= 0.03f; } if(data.networkClient.IsConnected()) @@ -143,7 +143,7 @@ namespace DanBias p.texturePath = L"..\\Content\\Textures\\"; p.Resolution = Oyster::Math::Float2( 1280.0f, 720.0f ); //! @todo fix proper amb value - p.AmbientValue = 1.0f; + p.AmbientValue = 1.3f; if(Oyster::Graphics::API::Init(data.window->GetHWND(), false, false, p) != Oyster::Graphics::API::Sucsess) return E_FAIL; diff --git a/Code/Game/GameClient/GameClient.vcxproj.user b/Code/Game/GameClient/GameClient.vcxproj.user index 2e28d6f7..4b847ee6 100644 --- a/Code/Game/GameClient/GameClient.vcxproj.user +++ b/Code/Game/GameClient/GameClient.vcxproj.user @@ -1,7 +1,7 @@  - true + false $(OutDir) diff --git a/Code/Game/GameClient/GameClientState/Buttons/ButtonEllipse.h b/Code/Game/GameClient/GameClientState/Buttons/ButtonEllipse.h index 7d9a9a5d..57c6008d 100644 --- a/Code/Game/GameClient/GameClientState/Buttons/ButtonEllipse.h +++ b/Code/Game/GameClient/GameClientState/Buttons/ButtonEllipse.h @@ -7,9 +7,6 @@ #include "EventButtonGUI.h" -//Only for testing because we don't have any other input -#include "../WindowManager/WindowShell.h" - namespace DanBias { namespace Client @@ -18,24 +15,25 @@ namespace DanBias class ButtonEllipse : public EventButtonGUI { public: - ButtonEllipse() - : EventButtonGUI(), radius(0) + ButtonEllipse(std::wstring textureName, std::wstring buttonText, + Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, + Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) + : EventButtonGUI(textureName, buttonText, textColor, backColor, hoverColor, pressedColor, owner, pos, size, resize) {} - ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Owner owner, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) - : EventButtonGUI(textureName, buttonText, textColor, owner, pos, size, resize) + ButtonEllipse(std::wstring textureName, std::wstring buttonText, + Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, + EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) + : EventButtonGUI(textureName, buttonText, textColor, backColor, hoverColor, pressedColor, func, pos, size, resize) {} - ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) - : EventButtonGUI(textureName, buttonText, textColor, func, pos, size, resize) + ButtonEllipse(std::wstring textureName, std::wstring buttonText, + Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, + EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) + : EventButtonGUI(textureName, buttonText, textColor, backColor, hoverColor, pressedColor, func, owner, pos, size, resize) {} - ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) - : EventButtonGUI(textureName, buttonText, textColor, func, owner, pos, size, resize) - {} - ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) - : EventButtonGUI(textureName, buttonText, textColor, func, owner, userData, pos, size, resize) + ButtonEllipse(std::wstring textureName, std::wstring buttonText, + Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, + EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) + : EventButtonGUI(textureName, buttonText, textColor, backColor, hoverColor, pressedColor, func, owner, userData, pos, size, resize) {} virtual ~ButtonEllipse() {} @@ -43,7 +41,6 @@ namespace DanBias //Circle vs point collision bool Collision(Oyster::Event::MouseInput& input) { - //Should come from the InputClass float xMouse = input.x, yMouse = input.y; double normx = (xMouse - pos.x) / size.x; diff --git a/Code/Game/GameClient/GameClientState/Buttons/ButtonRectangle.h b/Code/Game/GameClient/GameClientState/Buttons/ButtonRectangle.h index 7f3db825..33098568 100644 --- a/Code/Game/GameClient/GameClientState/Buttons/ButtonRectangle.h +++ b/Code/Game/GameClient/GameClientState/Buttons/ButtonRectangle.h @@ -6,9 +6,6 @@ #define DANBIAS_CLIENT_BUTTON_RECTANGLE_H #include "EventButtonGUI.h" -#include -//Only for testing because we don't have any other input -#include "../WindowManager/WindowShell.h" namespace DanBias { @@ -18,55 +15,46 @@ namespace DanBias class ButtonRectangle : public EventButtonGUI { public: - ButtonRectangle() - : EventButtonGUI(), width(0), height(0) - {} ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, - Owner owner, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) - : EventButtonGUI(textureName, buttonText, - textColor, backColor, hoverColor, pressedColor, - owner, pos, size, resize) + Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) + : EventButtonGUI(textureName, buttonText + , textColor, backColor, hoverColor, pressedColor + , owner, pos, size, resize) {} ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, - EventFunc func, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) - : EventButtonGUI(textureName, buttonText, - textColor, backColor, hoverColor, pressedColor, - func, pos, size, resize) + EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) + : EventButtonGUI(textureName, buttonText + , textColor, backColor, hoverColor, pressedColor + , func, pos, size, resize) {} ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, - EventFunc func, Owner owner, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) - : EventButtonGUI(textureName, buttonText, - textColor, backColor, hoverColor, pressedColor, - func, owner, pos, size, resize) + EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) + : EventButtonGUI(textureName, buttonText + , textColor, backColor, hoverColor, pressedColor + , func, owner, pos, size, resize) {} ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, - EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) - : EventButtonGUI(textureName, buttonText, - textColor, backColor, hoverColor, pressedColor, - func, owner, userData, pos, size, resize) + EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) + : EventButtonGUI(textureName, buttonText + , textColor, backColor, hoverColor, pressedColor + , func, owner, userData, pos, size, resize) {} virtual ~ButtonRectangle() {} - //Circle vs point collision + //Rectangle vs point collision bool Collision(Oyster::Event::MouseInput& input) { - //Should come from the InputClass float xMouse = input.x, yMouse = input.y; float widthTemp = pos.x - size.x * 0.5f; float widthTemp2 = pos.x + size.x * 0.5f; float heightTemp = pos.y - size.y * 0.5f; float heightTemp2 = pos.y + size.y * 0.5f; - //std::cout << p.x << ' ' << p.y << ' ' << widthTemp << ' ' << heightTemp << std::endl; if(xMouse >= widthTemp && xMouse <= widthTemp2 && yMouse >= heightTemp && yMouse <= heightTemp2) diff --git a/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h b/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h index 3ae09043..c14d24f2 100644 --- a/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h +++ b/Code/Game/GameClient/GameClientState/Buttons/EventButtonGUI.h @@ -7,6 +7,7 @@ #include "EventHandler/EventButton.h" #include "DllInterfaces/GFXAPI.h" +#include "../WindowManager/WindowShell.h" namespace DanBias { @@ -37,26 +38,27 @@ namespace DanBias textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) { CreateTexture(textureName); + this->resizedSize = size; if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); } EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, - EventFunc func, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) + EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) : EventButton(func), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) { CreateTexture(textureName); + this->resizedSize = size; if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); } EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, - EventFunc func, Owner owner, Oyster::Math::Float3 pos, - Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) + EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) : EventButton(func, owner), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) { CreateTexture(textureName); + this->resizedSize = size; if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); } EventButtonGUI(std::wstring textureName, std::wstring buttonText, @@ -66,6 +68,7 @@ namespace DanBias textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) { CreateTexture(textureName); + this->resizedSize = size; if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); } virtual ~EventButtonGUI() @@ -92,15 +95,15 @@ namespace DanBias if(EventButton::GetState() == ButtonState_None) { - Oyster::Graphics::API::RenderGuiElement(texture, pos, size, backColor); + Oyster::Graphics::API::RenderGuiElement(texture, pos, resizedSize, backColor); } else if(EventButton::GetState() == ButtonState_Hover) { - Oyster::Graphics::API::RenderGuiElement(texture, pos, size, hoverColor); + Oyster::Graphics::API::RenderGuiElement(texture, pos, resizedSize, hoverColor); } else { - Oyster::Graphics::API::RenderGuiElement(texture, pos, size, pressedColor); + Oyster::Graphics::API::RenderGuiElement(texture, pos, resizedSize, pressedColor); } } @@ -121,15 +124,18 @@ namespace DanBias GetClientRect(WindowShell::GetHWND(), &r); if(resize == ResizeAspectRatio_Height) - size.y *= (float)r.right/(float)r.bottom; + resizedSize.y = size.y * ((float)r.right/(float)r.bottom); else if(resize == ResizeAspectRatio_Width) - size.x *= (float)r.bottom/(float)r.right; + resizedSize.x = size.x * ((float)r.bottom/(float)r.right); } protected: Oyster::Math::Float3 pos; Oyster::Math::Float2 size; + //The new calculated resize, it's only used for the button not the text right now. + Oyster::Math::Float2 resizedSize; + Oyster::Graphics::API::Texture texture; std::wstring buttonText; diff --git a/Code/Game/GameClient/GameClientState/C_Object.cpp b/Code/Game/GameClient/GameClientState/C_Object.cpp index ccea9a86..50664a92 100644 --- a/Code/Game/GameClient/GameClientState/C_Object.cpp +++ b/Code/Game/GameClient/GameClientState/C_Object.cpp @@ -16,8 +16,10 @@ C_Object::C_Object() } C_Object::~C_Object() { - + if( this->model ) + this->Release(); } + bool C_Object::Init(ModelInitData modelInit) { position = modelInit.position; diff --git a/Code/Game/GameClient/GameClientState/C_obj/C_Player.cpp b/Code/Game/GameClient/GameClientState/C_obj/C_Player.cpp index b6420f53..60d3f184 100644 --- a/Code/Game/GameClient/GameClientState/C_obj/C_Player.cpp +++ b/Code/Game/GameClient/GameClientState/C_obj/C_Player.cpp @@ -20,5 +20,5 @@ bool C_Player::Init(ModelInitData modelInit) void C_Player::playAnimation(std::wstring animation, bool loop) { if(model) - Oyster::Graphics::API::PlayAnimation(model, L"movement", loop); + Oyster::Graphics::API::PlayAnimation(model, animation, loop); } \ No newline at end of file diff --git a/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp b/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp index f2f3c1ad..14b16838 100644 --- a/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp +++ b/Code/Game/GameClient/GameClientState/Camera_FPSV2.cpp @@ -4,6 +4,12 @@ using namespace ::Oyster::Math3D; using namespace ::Utility::Value; +inline Quaternion Transform( const Quaternion &transformer, const Quaternion &transformee ) +{ +// return transformer * transformee; + return transformee * transformer; +} + Camera_FPSV2::Camera_FPSV2() { // this->head is default set to identity uniformprojection at origo this->pitchUp = 0.0f; @@ -46,7 +52,7 @@ void Camera_FPSV2::SetRotation( const Quaternion &rotation ) } this->body.rotation = rotation; - this->head.SetRotation( rotation * Rotation(this->pitchUp, WorldAxisOf(rotation, Float3::standard_unit_x) ) ); + this->head.SetRotation( Transform(rotation, Rotation(this->pitchUp, WorldAxisOf(rotation, Float3::standard_unit_x))) ); this->pitchHaveChanged = false; } @@ -74,7 +80,7 @@ void Camera_FPSV2::UpdateOrientation() { if( this->pitchHaveChanged ) { - this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x) ) ); + this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) ); this->pitchHaveChanged = false; } @@ -87,7 +93,7 @@ void Camera_FPSV2::UpdateOrientation() void Camera_FPSV2::SnapUpToNormal( const Float3 &normal ) { this->body.rotation = Rotation( SnapAngularAxis(AngularAxis(this->body.rotation), WorldAxisOf(this->body.rotation, Float3::standard_unit_y), normal) ); - this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x) ) ); + this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) ); this->pitchHaveChanged = false; } @@ -164,7 +170,7 @@ Float4x4 & Camera_FPSV2::GetViewMatrix( Float4x4 &targetMem ) const { if( this->pitchHaveChanged ) { - this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x) ) ); + this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) ); this->pitchHaveChanged = false; } @@ -180,7 +186,7 @@ Float4x4 & Camera_FPSV2::GetViewsProjMatrix( Float4x4 &targetMem ) const { if( this->pitchHaveChanged ) { - this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x) ) ); + this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) ); this->pitchHaveChanged = false; } @@ -191,7 +197,7 @@ Float3 Camera_FPSV2::GetNormalOf( const Float3 &axis ) const { if( this->pitchHaveChanged ) { - this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x) ) ); + this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) ); this->pitchHaveChanged = false; } @@ -212,7 +218,7 @@ Float3 Camera_FPSV2::GetLook() const { if( this->pitchHaveChanged ) { - this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x) ) ); + this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) ); this->pitchHaveChanged = false; } diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 3d9ced8d..462422a6 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -89,6 +89,8 @@ bool GameState::Init( SharedStateContent &shared ) Float aspectRatio = gfxOp.Resolution.x / gfxOp.Resolution.y; this->privData->camera.SetPerspectiveProjection( Utility::Value::Radian(90.0f), aspectRatio, 0.1f, 1000.0f ); Graphics::API::SetProjection( this->privData->camera.GetProjectionMatrix() ); + gfxOp.AmbientValue = 1.0f; + Graphics::API::SetOptions(gfxOp); //tell server ready this->privData->nwClient->Send( Protocol_General_Status(Protocol_General_Status::States_ready) ); @@ -105,6 +107,7 @@ bool GameState::Init( SharedStateContent &shared ) light->second->Render(); } + return true; } @@ -189,47 +192,49 @@ bool GameState::Render() light->second->Render(); }*/ - // RB DEBUG render wire frame - //if(this->privData->renderWhireframe) - //{ - // Oyster::Graphics::API::StartRenderWireFrame(); - // - // Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(Float3( 0,132, 20)); - // Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(Float3( 0.5f, 0.5f, 0.5f)); - // Oyster::Math3D::Float4x4 world = translation * scale; - // Oyster::Graphics::API::RenderDebugCube( world ); - // Oyster::Graphics::API::RenderDebugCube(this->privData->player.getRBWorld()); - // - // staticObject = this->privData->staticObjects->begin(); - // for( ; staticObject != this->privData->staticObjects->end(); ++staticObject ) - // { - // if( staticObject->second->getBRtype() == RB_Type_Cube) - // { - // Oyster::Graphics::API::RenderDebugCube( staticObject->second->getRBWorld()); - // } - // if( staticObject->second->getBRtype() == RB_Type_Sphere) - // { - // Oyster::Graphics::API::RenderDebugSphere( staticObject->second->getRBWorld()); - // } - // } - // - // dynamicObject = this->privData->dynamicObjects->begin(); - // for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject ) - // { - // if( dynamicObject->second ) - // { - // if( dynamicObject->second->getBRtype() == RB_Type_Cube) - // { - // Oyster::Graphics::API::RenderDebugCube( dynamicObject->second->getRBWorld()); - // } - // if( dynamicObject->second->getBRtype() == RB_Type_Sphere) - // { - // Oyster::Graphics::API::RenderDebugSphere( dynamicObject->second->getRBWorld()); - // } - // } - // } - //} - // !RB DEBUG +#ifdef _DEBUG + //RB DEBUG render wire frame + if(this->privData->renderWhireframe) + { + Oyster::Graphics::API::StartRenderWireFrame(); + + Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(Float3( 0,132, 20)); + Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(Float3( 0.5f, 0.5f, 0.5f)); + Oyster::Math3D::Float4x4 world = translation * scale; + Oyster::Graphics::API::RenderDebugCube( world ); + Oyster::Graphics::API::RenderDebugCube(this->privData->player.getRBWorld()); + + staticObject = this->privData->staticObjects->begin(); + for( ; staticObject != this->privData->staticObjects->end(); ++staticObject ) + { + if( staticObject->second->getBRtype() == RB_Type_Cube) + { + Oyster::Graphics::API::RenderDebugCube( staticObject->second->getRBWorld()); + } + if( staticObject->second->getBRtype() == RB_Type_Sphere) + { + Oyster::Graphics::API::RenderDebugSphere( staticObject->second->getRBWorld()); + } + } + + dynamicObject = this->privData->dynamicObjects->begin(); + for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject ) + { + if( dynamicObject->second ) + { + if( dynamicObject->second->getBRtype() == RB_Type_Cube) + { + Oyster::Graphics::API::RenderDebugCube( dynamicObject->second->getRBWorld()); + } + if( dynamicObject->second->getBRtype() == RB_Type_Sphere) + { + Oyster::Graphics::API::RenderDebugSphere( dynamicObject->second->getRBWorld()); + } + } + } + } + //!RB DEBUG +#endif Oyster::Graphics::API::EndFrame(); return true; @@ -237,6 +242,7 @@ bool GameState::Render() bool GameState::Release() { + Graphics::API::Option o = Graphics::API::GetOption(); if( privData ) { auto staticObject = this->privData->staticObjects->begin(); @@ -480,6 +486,12 @@ const GameClientState::NetEvent & GameState::DataRecieved( const GameClientState // if is this player. Remember to change camera if( this->privData->myId == decoded.object_ID ) { + if( !Within(position.Dot(position), 2500.0f, 90000.0f) ) + { // HACK: bug trap + const char *breakPoint = "Something is wrong."; + position = Float3( 0.0f, 160.0f, 0.0f ); + } + this->privData->camera.SetPosition( position ); this->privData->camera.SetRotation( rotation ); this->privData->player.setPos( position ); diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index b2475cc6..de4f57d5 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -152,18 +152,18 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) RBInitData RBData; if(oh->boundingVolume.geoType == CollisionGeometryType_Box) { - RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.box.position; + RBData.position = ((Float3)oh->position + (Float3)oh->boundingVolume.box.position) * (Float3)oh->scale; RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation - RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size; + RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size * 2; RBData.type = RB_Type_Cube; staticObject->InitRB( RBData ); } if(oh->boundingVolume.geoType == CollisionGeometryType_Sphere) { - RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.sphere.position; + RBData.position = ((Float3)oh->position + (Float3)oh->boundingVolume.box.position) * (Float3)oh->scale; RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation - RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius; + RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius * 2; RBData.type = RB_Type_Sphere; staticObject->InitRB( RBData ); } @@ -196,18 +196,18 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) RBInitData RBData; if(oh->boundingVolume.geoType == CollisionGeometryType_Box) { - RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.box.position; + RBData.position = ((Float3)oh->position + (Float3)oh->boundingVolume.box.position) * (Float3)oh->scale; RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation - RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size; + RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size * 2; RBData.type = RB_Type_Cube; dynamicObject->InitRB( RBData ); } if(oh->boundingVolume.geoType == CollisionGeometryType_Sphere) { - RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.sphere.position; + RBData.position = ((Float3)oh->position + (Float3)oh->boundingVolume.box.position) * (Float3)oh->scale; RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation - RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius; + RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius * 2; RBData.type = RB_Type_Sphere; dynamicObject->InitRB( RBData ); } diff --git a/Code/Game/GameLogic/CollisionManager.cpp b/Code/Game/GameLogic/CollisionManager.cpp index 4c21fc8a..7b2b7ce1 100644 --- a/Code/Game/GameLogic/CollisionManager.cpp +++ b/Code/Game/GameLogic/CollisionManager.cpp @@ -22,10 +22,14 @@ using namespace GameLogic; //Physics::ICustomBody::SubscriptMessage void Player::PlayerCollision(Oyster::Physics::ICustomBody *rigidBodyPlayer, Oyster::Physics::ICustomBody *obj, Oyster::Math::Float kineticEnergyLoss) { - Player *player = ((Player*)(rigidBodyPlayer->GetCustomTag())); Object *realObj = (Object*)obj->GetCustomTag(); //needs to be changed? + if(!realObj) + return; + if(!player) + return; + switch (realObj->GetObjectType()) { case ObjectSpecialType::ObjectSpecialType_Generic: diff --git a/Code/Game/GameLogic/Game.cpp b/Code/Game/GameLogic/Game.cpp index 8b77dea4..8dd7ffa6 100644 --- a/Code/Game/GameLogic/Game.cpp +++ b/Code/Game/GameLogic/Game.cpp @@ -77,7 +77,7 @@ Game::PlayerData* Game::CreatePlayer() found = true; freeID = i; - for(int j = 0; j < players.Size(); j++) + for(int j = 0; j < (int)players.Size(); j++) { if(this->players[j] && this->players[j]->GetID() == freeID) @@ -125,7 +125,6 @@ bool Game::NewFrame() { if(this->players[i] && this->players[i]->player) this->players[i]->player->EndFrame(); } - return true; } diff --git a/Code/Game/GameLogic/Game_PlayerData.cpp b/Code/Game/GameLogic/Game_PlayerData.cpp index a79b2a9f..ed964724 100644 --- a/Code/Game/GameLogic/Game_PlayerData.cpp +++ b/Code/Game/GameLogic/Game_PlayerData.cpp @@ -5,36 +5,37 @@ using namespace GameLogic; Game::PlayerData::PlayerData() { - //set some stats that are appropriate to a player - - Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,180,0); - - Oyster::Math::Float3 size = Oyster::Math::Float3(0.25f,2.0f,0.5f); - Oyster::Math::Float mass = 60; + Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,250,0); + Oyster::Math::Float height = 2.0f; + Oyster::Math::Float radius = 0.5f; + Oyster::Math::Float mass = 40; Oyster::Math::Float restitutionCoeff = 0.5f; Oyster::Math::Float frictionCoeff_Static = 0.4f; Oyster::Math::Float frictionCoeff_Dynamic = 0.3f; - //sbDesc.quaternion = Oyster::Math::Float3(0, Oyster::Math::pi, 0); //create rigid body - Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCollisionBox(size, Oyster::Math::Float4(0, 0, 0, 1), centerPosition, mass, 0.5f, 0.8f, 0.6f ); + Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCharacter( height, radius, Oyster::Math::Float4(0, 0, 0, 1), + centerPosition, mass, restitutionCoeff, + frictionCoeff_Static, frictionCoeff_Dynamic ); rigidBody->SetAngularFactor(0.0f); //create player with this rigid body - this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player,0,0); + this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player, 0, 0); } Game::PlayerData::PlayerData(int playerID,int teamID) { - Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,180,0); - Oyster::Math::Float3 size = Oyster::Math::Float3(0.25f,2.0f,0.5f); - Oyster::Math::Float mass = 60; + Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,250,0); + Oyster::Math::Float height = 2.0f; + Oyster::Math::Float radius = 0.5f; + Oyster::Math::Float mass = 40; Oyster::Math::Float restitutionCoeff = 0.5f; Oyster::Math::Float frictionCoeff_Static = 0.4f; Oyster::Math::Float frictionCoeff_Dynamic = 0.3f; - //sbDesc.quaternion = Oyster::Math::Float3(0, Oyster::Math::pi, 0); //create rigid body - Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCollisionBox(size, Oyster::Math::Float4(0, 0, 0, 1), centerPosition, mass, 0.5f, 0.8f, 0.6f ); + Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCharacter( height, radius, Oyster::Math::Float4(0, 0, 0, 1), + centerPosition, mass, restitutionCoeff, + frictionCoeff_Static, frictionCoeff_Dynamic ); rigidBody->SetAngularFactor(0.0f); //create player with this rigid body this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player,playerID,teamID); diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index b3a8b101..9febbe47 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -4,6 +4,7 @@ #include "JumpPad.h" #include "ExplosiveCrate.h" #include "Portal.h" +#include //Conversion from wstring to string #include @@ -22,7 +23,7 @@ Level::~Level(void) delete this->levelObj; this->levelObj = NULL; } -Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) +Object* Level::CreateGameObj(ObjectHeader* obj, ICustomBody* rigidBody) { Object* gameObj = NULL; @@ -55,6 +56,7 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) { gameObj = new StaticObject(rigidBody, Object::DefaultOnCollision, (ObjectSpecialType)obj->specialTypeID, objID); } + break; case ObjectSpecialType_Stone: { gameObj = new DynamicObject(rigidBody, Object::DefaultOnCollision, (ObjectSpecialType)obj->specialTypeID, objID); @@ -194,8 +196,8 @@ ICustomBody* Level::InitRigidBodySphere( const ObjectHeader* obj) rigidBodyMass = obj->scale[0] * obj->scale[1] * obj->scale[2] * obj->boundingVolume.sphere.mass; //Radius scaled - //rigidBodyRadius = (staticObjData->scale[0] + staticObjData->scale[1] + staticObjData->scale[2] / 3) * staticObjData->boundingVolume.sphere.radius; - rigidBodyRadius = (obj->scale[0] * obj->scale[1] * obj->scale[2]) * obj->boundingVolume.sphere.radius; + rigidBodyRadius = (obj->scale[0]) * obj->boundingVolume.sphere.radius; + //rigidBodyRadius = (obj->scale[0] * obj->scale[1] * obj->scale[2]) * obj->boundingVolume.sphere.radius; //create the rigid body rigidBody = API::Instance().AddCollisionSphere( rigidBodyRadius , rigidWorldRotation , rigidWorldPos , rigidBodyMass, obj->boundingVolume.sphere.restitutionCoeff , obj->boundingVolume.sphere.frictionCoeffStatic , obj->boundingVolume.sphere.frictionCoeffDynamic); @@ -209,7 +211,7 @@ bool Level::InitiateLevel(std::wstring levelPath) //Convert from wstring to string typedef std::codecvt_utf8 convert_typeX; - std::wstring_convert converterX; + std::wstring_convert converterX; std::string convertedLevelPath = converterX.to_bytes(levelPath); objects = ll.LoadLevel(convertedLevelPath); @@ -220,7 +222,7 @@ bool Level::InitiateLevel(std::wstring levelPath) API::Instance().SetGravityPoint(Oyster::Math3D::Float3(0,0,0)); API::Instance().SetGravity(200); - int objCount = objects.size(); + int objCount = (int)objects.size(); for (int i = 0; i < objCount; i++) { @@ -261,7 +263,7 @@ bool Level::InitiateLevel(std::wstring levelPath) if(rigidBody_Static != NULL) { // create game object - Object* staticGameObj = createGameObj(staticObjData, rigidBody_Static); + Object* staticGameObj = CreateGameObj(staticObjData, rigidBody_Static); if(staticGameObj != NULL) { this->staticObjects.Push((StaticObject*)staticGameObj); @@ -295,7 +297,7 @@ bool Level::InitiateLevel(std::wstring levelPath) if(rigidBody_Dynamic != NULL) { // create game object - Object* dynamicGameObj = createGameObj(dynamicObjData, rigidBody_Dynamic); + Object* dynamicGameObj = CreateGameObj(dynamicObjData, rigidBody_Dynamic); if (dynamicGameObj != NULL) { this->dynamicObjects.Push((DynamicObject*)dynamicGameObj); diff --git a/Code/Game/GameLogic/Level.h b/Code/Game/GameLogic/Level.h index fb26280c..9dce227d 100644 --- a/Code/Game/GameLogic/Level.h +++ b/Code/Game/GameLogic/Level.h @@ -35,7 +35,7 @@ namespace GameLogic Oyster::Physics::ICustomBody* InitRigidBodyCube( const ObjectHeader* obj); Oyster::Physics::ICustomBody* InitRigidBodySphere( const ObjectHeader* obj); - Object* createGameObj(ObjectHeader* obj, Oyster::Physics::ICustomBody* rigidBody); + Object* CreateGameObj(ObjectHeader* obj, Oyster::Physics::ICustomBody* rigidBody); /******************************************************** * Creates a team in the level * @param teamSize: The size of the team you want to create diff --git a/Code/Game/GameLogic/Player.cpp b/Code/Game/GameLogic/Player.cpp index b067d036..77953d43 100644 --- a/Code/Game/GameLogic/Player.cpp +++ b/Code/Game/GameLogic/Player.cpp @@ -27,6 +27,8 @@ Player::Player(Oyster::Physics::ICustomBody *rigidBody, void (*EventOnCollision) key_backward = 0; key_strafeRight = 0; key_strafeLeft = 0; + key_jump = 0; + invincibleCooldown = 0; this->previousPosition = Oyster::Math::Float3(0,0,0); @@ -50,6 +52,8 @@ Player::Player(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustom key_backward = 0; key_strafeRight = 0; key_strafeLeft = 0; + key_jump = 0; + invincibleCooldown = 0; this->previousPosition = Oyster::Math::Float3(0,0,0); this->moveDir = Oyster::Math::Float3(0,0,0); @@ -71,7 +75,7 @@ Player::~Player(void) void Player::BeginFrame() { //weapon->Update(0.002f); - Object::BeginFrame(); + //Object::BeginFrame(); Oyster::Math::Float maxSpeed = 30; @@ -82,9 +86,9 @@ void Player::BeginFrame() /*if (left) m_turnAngle -= dt * m_turnVelocity; if (right) - m_turnAngle += dt * m_turnVelocity;*/ + m_turnAngle += dt * m_turnVelocity; - //xform.setRotation (btQuaternion (btVector3(0.0, 1.0, 0.0), m_turnAngle)); + xform.setRotation (btQuaternion (btVector3(0.0, 1.0, 0.0), m_turnAngle));*/ Oyster::Math::Float3 linearVelocity = this->rigidBody->GetLinearVelocity(); Oyster::Math::Float speed = this->rigidBody->GetLinearVelocity().GetLength(); @@ -123,7 +127,7 @@ void Player::BeginFrame() } - if (key_forward <= 0.001 && key_backward <= 0.001 && key_strafeRight <= 0.001 && key_strafeLeft <= 0.001 && key_jump <= 0.001 && this->rigidBody->GetLambda() < 0.7f) + if (key_forward <= 0.001 && key_backward <= 0.001 && key_strafeRight <= 0.001 && key_strafeLeft <= 0.001 && key_jump <= 0.001 ) //&& this->rigidBody->GetLambda() < 0.7f) { /* Dampen when on the ground and not being moved by the player */ linearVelocity *= 0.2f; @@ -153,8 +157,11 @@ void Player::BeginFrame() this->playerState = PLAYER_STATE::PLAYER_STATE_JUMPING; } } + Oyster::Math::Float3 pos = this->rigidBody->GetState().centerPos; + if(pos == Oyster::Math::Float3(0,0,0)) + int i =0; - this->weapon->Update(0.01f); + //this->weapon->Update(0.01f); } void Player::EndFrame() @@ -164,7 +171,7 @@ void Player::EndFrame() this->rigidBody->SetUp(this->rigidBody->GetState().centerPos.GetNormalized()); - Object::EndFrame(); + //Object::EndFrame(); } void Player::Move(const PLAYER_MOVEMENT &movement) diff --git a/Code/Game/GameServer/GameClient.h b/Code/Game/GameServer/GameClient.h index 6fcf6b05..497e6c2e 100644 --- a/Code/Game/GameServer/GameClient.h +++ b/Code/Game/GameServer/GameClient.h @@ -22,6 +22,7 @@ namespace DanBias { ClientState_CreatingGame, ClientState_Ready, + ClientState_Invalid, }; public: @@ -41,6 +42,7 @@ namespace DanBias inline GameLogic::IPlayerData* GetPlayer() const { return this->player; } Oyster::Network::NetClient GetClient() const { return this->client; } ClientState GetState() const { return this->state; } + int GetFailedProtocolCount() const { return this->failedPackagesCount; } void SetPlayer(GameLogic::IPlayerData* player); @@ -53,6 +55,10 @@ namespace DanBias GameLogic::IPlayerData* ReleasePlayer(); Oyster::Network::NetClient ReleaseClient(); + void Invalidate(); + int IncrementFailedProtocol(); + void ResetFailedProtocolCount(); + //NetworkSpecific void SetOwner(Oyster::Network::NetworkSession* owner); void UpdateClient(); @@ -62,7 +68,9 @@ namespace DanBias Oyster::Network::NetClient client; bool isReady; + bool isInvalid; float secondsSinceLastResponse; + int failedPackagesCount; std::wstring alias; std::wstring character; diff --git a/Code/Game/GameServer/GameServer.vcxproj b/Code/Game/GameServer/GameServer.vcxproj index 036459fa..a116e332 100644 --- a/Code/Game/GameServer/GameServer.vcxproj +++ b/Code/Game/GameServer/GameServer.vcxproj @@ -198,6 +198,9 @@ + + {f10cbc03-9809-4cba-95d8-327c287b18ee} + {2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee} diff --git a/Code/Game/GameServer/Implementation/DLLMain.cpp b/Code/Game/GameServer/Implementation/DLLMain.cpp index 7adceac7..814a15f1 100644 --- a/Code/Game/GameServer/Implementation/DLLMain.cpp +++ b/Code/Game/GameServer/Implementation/DLLMain.cpp @@ -6,6 +6,5 @@ BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved ) { - return TRUE; } \ No newline at end of file diff --git a/Code/Game/GameServer/Implementation/GameClient.cpp b/Code/Game/GameServer/Implementation/GameClient.cpp index 9c04007f..3293a383 100644 --- a/Code/Game/GameServer/Implementation/GameClient.cpp +++ b/Code/Game/GameServer/Implementation/GameClient.cpp @@ -14,6 +14,8 @@ using namespace GameLogic; GameClient::GameClient(Utility::DynamicMemory::SmartPointer nwClient) { + this->isInvalid = false; + this->failedPackagesCount = 0; this->client = nwClient; this->player = 0; isReady = false; @@ -23,6 +25,7 @@ GameClient::GameClient(Utility::DynamicMemory::SmartPointerclient = 0; this->player = 0; this->isReady = false; this->character = L"crate_colonists.dan"; @@ -55,6 +58,22 @@ void GameClient::SetState(ClientState state) this->state = state; } +void GameClient::Invalidate() +{ + this->isInvalid = true; + this->isReady = false; + this->state = ClientState_Invalid; + this->client->Disconnect(); +} +int GameClient::IncrementFailedProtocol() +{ + this->failedPackagesCount++; + return this->failedPackagesCount; +} +void GameClient::ResetFailedProtocolCount() +{ + this->failedPackagesCount = 0; +} void GameClient::SetOwner(Oyster::Network::NetworkSession* owner) { diff --git a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp index 8cbb542d..e2a2961d 100644 --- a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp @@ -61,15 +61,16 @@ using namespace DanBias; switch (e.args.type) { case NetworkClient::ClientEventArgs::EventType_Disconnect: + printf("\t(%i : %s) - EventType_Disconnect\n", cl->GetClient()->GetID(), e.sender->GetIpAddress().c_str()); + this->gClients[temp]->Invalidate(); break; case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToRecieve: break; case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend: - printf("\t(%i : %s) - EventType_ProtocolFailedToSend\n", cl->GetClient()->GetID(), e.sender->GetIpAddress().c_str()); - //this->Detach(e.sender); + if(this->gClients[temp]->IncrementFailedProtocol() >= 5/*client->threshold*/) + this->gClients[temp]->Invalidate(); break; case NetworkClient::ClientEventArgs::EventType_ProtocolRecieved: - //printf("\t(%i : %s) - EventType_ProtocolRecieved\n", cl->GetClient()->GetID(), e.sender->GetIpAddress().c_str()); this->ParseProtocol(e.args.data.protocol, cl); break; } @@ -128,6 +129,12 @@ using namespace DanBias; int id = movedObject->GetID(); //Protocol_ObjectPosition p(movedObject->GetPosition(), id); Protocol_ObjectPositionRotation p(movedObject->GetPosition(), movedObject->GetRotation(), id); + + Oyster::Math::Float3 temp = movedObject->GetPosition(); + + if(temp.x < -300) + id = 0; + GameSession::gameSession->Send(p.GetProtocol()); //} } diff --git a/Code/GamePhysics/GamePhysics.vcxproj b/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj similarity index 56% rename from Code/GamePhysics/GamePhysics.vcxproj rename to Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj index 07f5aed2..5f715fad 100644 --- a/Code/GamePhysics/GamePhysics.vcxproj +++ b/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj @@ -19,35 +19,36 @@ - {104FA3E9-94D9-4E1D-A941-28A03BC8A095} - GamePhysics + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE} + Win32Proj + GameServerDebugEnvironment - DynamicLibrary + Application true v110 - MultiByte + Unicode - DynamicLibrary + Application true v110 - MultiByte + Unicode - DynamicLibrary + Application false v110 true - MultiByte + Unicode - DynamicLibrary + Application false v110 true - MultiByte + Unicode @@ -66,104 +67,115 @@ - $(SolutionDir)..\Bin\DLL\ + true + $(SolutionDir)..\Bin\Executable\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName)D - - - $(SolutionDir)..\Bin\DLL\ - $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName) + $(ProjectName)_$(PlatformShortName)_$(Configuration) + $(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath) + C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath) - $(SolutionDir)..\Bin\DLL\ + true + $(SolutionDir)..\Bin\Executable\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName)D + $(ProjectName)_$(PlatformShortName)_$(Configuration) + $(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath) + C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath) + + + false + $(SolutionDir)..\Bin\Executable\ + $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ + $(ProjectName)_$(PlatformShortName)_$(Configuration) + $(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath) + C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath) - $(SolutionDir)..\Bin\DLL\ + false + $(SolutionDir)..\Bin\Executable\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName) + $(ProjectName)_$(PlatformShortName)_$(Configuration) + $(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath) + C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath) + + Level3 Disabled - $(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\ - _WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions) - false + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Windows true - - - $(SolutionDir)Physics/lib/debug/BulletCollision_Debug.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debug.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debug.lib;%(AdditionalDependencies) + GameServer_$(PlatformShortName)D.dll;%(DelayLoadDLLs) + + Level3 Disabled - $(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\ - _WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions) - false + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Windows true - - - $(SolutionDir)Physics/lib/debug/BulletCollision_Debugx64.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debugx64.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debugx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + GameServer_$(PlatformShortName)D.dll;%(DelayLoadDLLs) Level3 + + MaxSpeed true true - $(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\ - _WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions) - false + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Windows true true true - - - $(SolutionDir)Physics/lib/release/BulletCollision.lib;$(SolutionDir)Physics/lib/release/BulletDynamics.lib;$(SolutionDir)Physics/lib/release/LinearMath.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + GameServer_$(PlatformShortName).dll;%(DelayLoadDLLs) Level3 + + MaxSpeed true true - $(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\ - _WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions) - false + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Windows true true true - - - $(SolutionDir)Physics/lib/release/BulletCollisionx64.lib;$(SolutionDir)Physics/lib/release/BulletDynamicsx64.lib;$(SolutionDir)Physics/lib/release/LinearMathx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + GameServer_$(PlatformShortName).dll;%(DelayLoadDLLs) - - - - - + + {35aea3c0-e0a7-4e1e-88cd-514aa5a442b1} + + + {143bd516-20a1-4890-a3e4-f8bfd02220e7} + - - - + diff --git a/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj.user b/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj.user new file mode 100644 index 00000000..ea7197bf --- /dev/null +++ b/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj.user @@ -0,0 +1,22 @@ + + + + $(OutDir) + WindowsLocalDebugger + + + $(OutDir) + WindowsLocalDebugger + + + $(OutDir) + WindowsLocalDebugger + + + $(OutDir) + WindowsLocalDebugger + + + true + + \ No newline at end of file diff --git a/Code/Game/LanServer/GameServerDebugEnvironment/Source.cpp b/Code/Game/LanServer/GameServerDebugEnvironment/Source.cpp new file mode 100644 index 00000000..62332541 --- /dev/null +++ b/Code/Game/LanServer/GameServerDebugEnvironment/Source.cpp @@ -0,0 +1,50 @@ +///////////////////////////////////////////////// +// Launcher to launch Danbias server or client // +///////////////////////////////////////////////// +#define NOMINMAX +#include +#include + +#include +#include + +using namespace DanBias; + + + +int WINAPI WinMain( HINSTANCE hinst, HINSTANCE prevInst, PSTR cmdLine, int cmdShow) +{ + if(SetDllDirectory(L"..\\DLL") == FALSE) + { + return cmdShow; + } + + WindowShell::CreateConsoleWindow(); + + GameServerAPI::ServerInitDesc desc; + desc.listenPort = 15151; + desc.serverName = L"bla"; + + if(GameServerAPI::ServerInitiate(desc) == DanBiasServerReturn_Sucess) + { + GameServerAPI::ServerStart(); + + GameServerAPI::GameSetGameMode(L"free-for-all"); + GameServerAPI::GameSetGameName(L"DebugServer"); + GameServerAPI::GameSetGameTime(15); + GameServerAPI::GameSetMapName(L"2ofAll.bias"); + GameServerAPI::GameSetMaxClients(10); + + if(GameServerAPI::GameStart(true)) + { + int Q = 0x51; + while ( GetAsyncKeyState(Q) == 0) + { + GameServerAPI::ServerUpdate(); + } + } + GameServerAPI::ServerStop(); + } + + return 0; +} \ No newline at end of file diff --git a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs index d415b92f..b07868f7 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs +++ b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs @@ -482,7 +482,7 @@ this.tableLayoutPanel1.ColumnCount = 3; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35.29412F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 64.70588F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 112F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 114F)); this.tableLayoutPanel1.Controls.Add(this.label6, 0, 0); this.tableLayoutPanel1.Controls.Add(this.label7, 1, 0); this.tableLayoutPanel1.Controls.Add(this.label8, 2, 0); @@ -507,7 +507,7 @@ // label7 // this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(46, 1); + this.label7.Location = new System.Drawing.Point(45, 1); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(31, 13); this.label7.TabIndex = 8; @@ -516,7 +516,7 @@ // label8 // this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(122, 1); + this.label8.Location = new System.Drawing.Point(120, 1); this.label8.Name = "label8"; this.label8.Size = new System.Drawing.Size(34, 13); this.label8.TabIndex = 8; diff --git a/Code/Game/LevelLoader/LevelLoader.cpp b/Code/Game/LevelLoader/LevelLoader.cpp index 82583696..588c4a34 100644 --- a/Code/Game/LevelLoader/LevelLoader.cpp +++ b/Code/Game/LevelLoader/LevelLoader.cpp @@ -4,6 +4,7 @@ #include "LevelLoader.h" #include "LevelParser.h" +#include using namespace GameLogic; using namespace GameLogic::LevelFileLoader; @@ -29,6 +30,7 @@ LevelLoader::LevelLoader(std::string folderPath) LevelLoader::~LevelLoader() { + Oyster::Resource::OysterResource::Clean(); } std::vector> LevelLoader::LoadLevel(std::string fileName) diff --git a/Code/Misc/Utilities/Resource/OResource.h b/Code/Misc/Utilities/Resource/OResource.h index 83ed474f..6af78781 100644 --- a/Code/Misc/Utilities/Resource/OResource.h +++ b/Code/Misc/Utilities/Resource/OResource.h @@ -40,15 +40,15 @@ namespace Oyster } inline unsigned int GetResourceSize() const { - return this->resourceSize; + return (unsigned int)this->resourceSize; } inline unsigned int GetResourceElementSize() const { - return this->resourceElementSize; + return (unsigned int)this->resourceElementSize; } inline unsigned int GetResourceID() const { - return this->resourceID; + return (unsigned int)this->resourceID; } inline void SetResourceID(int id) { diff --git a/Code/Misc/Utilities/Utilities.h b/Code/Misc/Utilities/Utilities.h index c259a845..b97d62d7 100644 --- a/Code/Misc/Utilities/Utilities.h +++ b/Code/Misc/Utilities/Utilities.h @@ -337,7 +337,11 @@ namespace Utility template inline ValueType Clamp( const ValueType &value, const ValueType &min, const ValueType &max ) - { return value < min ? Max( value, max ) : min; } + { + if( value < min ) return min; + if( value > max ) return max; + return value; + } template inline ValueType Average( const ValueType &valueA, const ValueType &valueB ) diff --git a/Code/Network/NetworkAPI/NetworkClient.cpp b/Code/Network/NetworkAPI/NetworkClient.cpp index fc561845..3463ed8a 100644 --- a/Code/Network/NetworkAPI/NetworkClient.cpp +++ b/Code/Network/NetworkAPI/NetworkClient.cpp @@ -48,6 +48,7 @@ struct NetworkClient::PrivateData : public IThreadObject Connection connection; Translator translator; OysterThread thread; + bool outputEvent; OysterByte recieveBuffer; @@ -63,6 +64,7 @@ struct NetworkClient::PrivateData : public IThreadObject : ID(currID++) , parent(0) , owner(0) + , outputEvent(0) { InitWinSock(); this->thread.Create(this, false); @@ -97,19 +99,42 @@ struct NetworkClient::PrivateData : public IThreadObject OysterByte temp; CustomNetProtocol p = this->sendQueue.Pop(); - if(p[0].value.netShort == 304) - int i = 0; - this->translator.Pack(temp, p); errorCode = this->connection.Send(temp); if(errorCode != 0 && errorCode != WSAEWOULDBLOCK) { - CEA parg; - parg.type = CEA::EventType_ProtocolFailedToSend; - parg.data.protocol = p; - NetEvent e = { this->parent, parg }; - this->recieveQueue.Push(e); + if( errorCode == WSAECONNABORTED || errorCode == WSAENOTCONN) + { + CEA parg; + parg.type = CEA::EventType_Disconnect; + parg.data.protocol = p; + NetEvent e = { this->parent, parg }; + this->recieveQueue.Push(e); + + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s | Protocol: %i) - EventType_Disconnect && EventType_ProtocolFailedToSend \n", this->ID, this->connection.GetIpAddress().c_str(), p[0].value.netShort); + } + } + else + { + CEA parg; + parg.type = CEA::EventType_ProtocolFailedToSend; + parg.data.protocol = p; + NetEvent e = { this->parent, parg }; + this->recieveQueue.Push(e); + + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s | Protocol: %i) - EventType_ProtocolFailedToSend\n", this->ID, this->connection.GetIpAddress().c_str(), p[0].value.netShort); + } + } + } + + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s | Protocol: %i) Message sent!\n", this->ID, this->connection.GetIpAddress().c_str(), p[0].value.netShort); } } @@ -225,6 +250,18 @@ struct NetworkClient::PrivateData : public IThreadObject e.args.type = parg.type; this->recieveQueue.Push(e); + + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s | Protocol: %i) Message recieved!\n", this->ID, this->connection.GetIpAddress().c_str(), protocol[0].value.netShort); + } + } + else + { + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s) Failed to unpack CustomNetProtocol!\n", this->ID, this->connection.GetIpAddress().c_str()); + } } } }; @@ -266,7 +303,6 @@ void NetworkClient::Update() NetEvent temp = this->privateData->recieveQueue.Pop(); this->DataRecieved(temp); - } } @@ -401,10 +437,11 @@ void NetworkClient::DataRecieved(NetEvent e) } } -//void NetworkClient::NetworkCallback(Oyster::Network::CustomNetProtocol& p) -//{} - std::string NetworkClient::GetIpAddress() { return this->privateData->connection.GetIpAddress(); } +void NetworkClient::OutputEventData(bool output) +{ + this->privateData->outputEvent; +} \ No newline at end of file diff --git a/Code/Network/NetworkAPI/NetworkClient.h b/Code/Network/NetworkAPI/NetworkClient.h index a7f3b0bb..dddef221 100644 --- a/Code/Network/NetworkAPI/NetworkClient.h +++ b/Code/Network/NetworkAPI/NetworkClient.h @@ -138,8 +138,21 @@ namespace Oyster */ virtual void DataRecieved(NetEvent e); + /** + * + */ std::string GetIpAddress(); + /** Dumps all activity to std::io + * + */ + void OutputEventData(bool output); + + /** Dumps all activity to std::io + * + */ + void SetOutputEventDataStream(FILE out); + private: NetworkClient(const NetworkClient& obj); NetworkClient& operator =(const NetworkClient& obj); diff --git a/Code/Network/NetworkAPI/NetworkServer.cpp b/Code/Network/NetworkAPI/NetworkServer.cpp index 3e840dd8..7d1cbdc5 100644 --- a/Code/Network/NetworkAPI/NetworkServer.cpp +++ b/Code/Network/NetworkAPI/NetworkServer.cpp @@ -58,7 +58,7 @@ void Broadcast() addr.append(buff); dest.sin_addr.s_addr = inet_addr( addr.c_str() ); // send the pkt - int ret = sendto( s, pkt, pkt_length, 0, (sockaddr *)&dest, sizeof(dest) ); + int ret = sendto( s, pkt, pkt_length, 0, (sockaddr *)&dest, (int)sizeof(dest) ); } } @@ -83,7 +83,13 @@ public: , broadcastTime(1.0f, 0.0f) { } ~PrivateData() - { } + { + if(listener) + { + delete listener; + listener = NULL; + } + } bool DoWork(); diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp index ccb811c1..36cbfd54 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp @@ -205,9 +205,9 @@ namespace Oyster void API::StartRenderWireFrame() { - Core::deviceContext->OMSetRenderTargets(Render::Resources::Gather::Pass.RTV.size(),&Render::Resources::Gather::Pass.RTV[0],NULL); + Core::deviceContext->OMSetRenderTargets((UINT)Render::Resources::Gather::Pass.RTV.size(),&Render::Resources::Gather::Pass.RTV[0],NULL); Core::deviceContext->RSSetState(wire); - Core::deviceContext->OMSetRenderTargets(Render::Resources::Gather::Pass.RTV.size(),&Render::Resources::Gather::Pass.RTV[0],NULL); + Core::deviceContext->OMSetRenderTargets((UINT)Render::Resources::Gather::Pass.RTV.size(),&Render::Resources::Gather::Pass.RTV[0],NULL); } void API::RenderDebugCube(Math::Matrix world) @@ -221,6 +221,26 @@ namespace Oyster sphere->WorldMatrix = world; Render::DefaultRenderer::RenderScene(sphere,1,View,Projection); } +#else + API::State API::ReloadShaders() + { + + } + + void API::StartRenderWireFrame() + { + + } + + void API::RenderDebugCube(Math::Matrix world) + { + + } + + void API::RenderDebugSphere(Math::Matrix world) + { + + } #endif API::Option API::GetOption() diff --git a/Code/OysterGraphics/FileLoader/ShaderLoader.cpp b/Code/OysterGraphics/FileLoader/ShaderLoader.cpp index 033be403..a5f207f3 100644 --- a/Code/OysterGraphics/FileLoader/ShaderLoader.cpp +++ b/Code/OysterGraphics/FileLoader/ShaderLoader.cpp @@ -146,7 +146,7 @@ namespace Oyster return NULL; } #endif - Core::UsedMem += data.size; + Core::UsedMem += (int)data.size; return Core::PipelineManager::CreateShader(data, Core::PipelineManager::ShaderType(type)); } } diff --git a/Code/OysterGraphics/Render/DefaultRenderer.cpp b/Code/OysterGraphics/Render/DefaultRenderer.cpp index 22b71df7..689c3abe 100644 --- a/Code/OysterGraphics/Render/DefaultRenderer.cpp +++ b/Code/OysterGraphics/Render/DefaultRenderer.cpp @@ -50,7 +50,12 @@ namespace Oyster if(models[i].Visible) { Definitions::PerModel pm; - pm.WV = View * models[i].WorldMatrix.GetTranspose().GetInverse(); + Math::Float3x3 normalTransform; + normalTransform = Math::Float3x3(models[i].WorldMatrix.v[0].xyz, models[i].WorldMatrix.v[1].xyz, models[i].WorldMatrix.v[2].xyz); + normalTransform.Transpose().Invert(); + Math::Matrix m = Math::Matrix(Math::Vector4(normalTransform.v[0],0.0f), Math::Vector4(normalTransform.v[1],0.0f), Math::Vector4(normalTransform.v[2],0.0f), Math::Vector4(0.0f)); + pm.WV = View * m; + //pm.WV = models[i].WorldMatrix.GetTranspose().GetInverse(); pm.WVP = Projection * View * models[i].WorldMatrix; Model::ModelInfo* info = models[i].info; @@ -159,10 +164,10 @@ namespace Oyster { Definitions::BlurrData bd; bd.BlurMask = Math::Float4(1,1,1,1); - bd.StopX = Core::resolution.x/2; - bd.StopY = Core::resolution.y; + bd.StopX = (UINT)Core::resolution.x/2; + bd.StopY = (UINT)Core::resolution.y; bd.StartX = 0; - bd.StartY = Core::resolution.y/2; + bd.StartY = (UINT)Core::resolution.y/2; void* data = Resources::Blur::Data.Map(); memcpy(data,&bd,sizeof(Definitions::BlurrData)); @@ -179,8 +184,8 @@ namespace Oyster { Definitions::BlurrData bd; bd.BlurMask = Math::Float4(0,0,0,1); - bd.StopX = Core::resolution.x/2; - bd.StopY = Core::resolution.y/2; + bd.StopX = (UINT)Core::resolution.x/2; + bd.StopY = (UINT)Core::resolution.y/2; bd.StartX = 0; bd.StartY = 0; diff --git a/Code/OysterGraphics/Render/GuiRenderer.cpp b/Code/OysterGraphics/Render/GuiRenderer.cpp index 02e202e4..b71be6d7 100644 --- a/Code/OysterGraphics/Render/GuiRenderer.cpp +++ b/Code/OysterGraphics/Render/GuiRenderer.cpp @@ -103,7 +103,7 @@ namespace Oyster Resources::Gui::Text::Vertex.Unmap(); - Core::deviceContext->Draw(text.length(), 0); + Core::deviceContext->Draw((UINT)text.length(), 0); } } } diff --git a/Code/OysterGraphics/Render/Resources.cpp b/Code/OysterGraphics/Render/Resources.cpp index 124b1bf1..1de7d4ce 100644 --- a/Code/OysterGraphics/Render/Resources.cpp +++ b/Code/OysterGraphics/Render/Resources.cpp @@ -349,9 +349,6 @@ namespace Oyster Core::device->CreateDepthStencilView(depthstencil,NULL,&Gui::depth); depthstencil->Release(); - - D3D11_DEPTH_STENCIL_DESC dDesc; - return Core::Init::Success; } diff --git a/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl b/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl index 2a6f3972..d9545573 100644 --- a/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl +++ b/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl @@ -17,8 +17,8 @@ float3x3 cotangent_frame( float3 N, float3 p, float2 uv ) float3 B = dp2perp * duv1.y + dp1perp * duv2.y; // construct a scale-invariant frame - float invmax = 1/sqrt( max( dot(T,T), dot(B,B) ) ); - return float3x3( T * invmax, B * invmax, N ); + float invmax = rsqrt( max( dot(T,T), dot(B,B) ) ); + return transpose(float3x3( T * invmax, B * invmax, N )); } float3 perturb_normal( float3 N, float3 V, float2 texcoord ) @@ -41,11 +41,20 @@ PixelOut main(VertexOut input) { PixelOut output; output.DiffuseGlow = Diffuse.Sample(S1, input.UV) * float4(Color, 1); - float3 normal = normalize(input.normal); - normal = perturb_normal( normal, normalize(-input.ViewPos), input.UV ); + //NORMALIZE + float3x3 CoTangentFrame = cotangent_frame(input.normal, normalize(input.ViewPos), input.UV); - //output.NormalSpec = float4(normal, Normal.Sample(S1, input.UV).w*255); - output.NormalSpec = float4(normal, Normal.Sample(S1, input.UV).w*0); + float3 map = Normal.Sample(S1,input.UV).xyz; + //map = normalize((map * 2) -1); + map = map * 255./127. - 128./127.; + //map = map * 255; + float3 normal = normalize(mul(CoTangentFrame, map)); + //normal = perturb_normal( normal, normalize(-input.ViewPos), input.UV ); + + output.NormalSpec = float4(normal, Normal.Sample(S1, input.UV).w*255); + + //output.NormalSpec = float4(input.normal, Normal.Sample(S1, input.UV).w * 0); + //output.NormalSpec = float4(map,0); return output; } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl b/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl index fd3da6b1..79c21eec 100644 --- a/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl +++ b/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl @@ -11,7 +11,7 @@ VertexOut main( VertexIn input ) input.pos = mul(boneTrans,float4(input.pos,1)).xyz * Animated + input.pos * int(1-Animated); - input.normal = mul(boneTrans,float4(input.normal,1)).xyz * Animated + input.normal * int(1-Animated); + input.normal = mul(boneTrans,float4(input.normal,0)).xyz * Animated + input.normal * int(1-Animated); output.pos = mul(WVP, float4(input.pos,1)); output.ViewPos = mul(WV, float4(input.pos,1)); diff --git a/Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl b/Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl index 9a5345bf..96b8ab69 100644 --- a/Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl +++ b/Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl @@ -39,10 +39,16 @@ void main( uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID ) DiffBase += DiffuseGlow[DTid.xy + uint2(0,1)]; DiffBase += DiffuseGlow[DTid.xy + uint2(1,1)]; DiffBase = DiffBase / 4; + + float4 DepthBase = DepthTexture[DTid.xy]; + DepthBase = DepthTexture[DTid.xy + uint2(1,0)]; + DepthBase = DepthTexture[DTid.xy + uint2(0,1)]; + DepthBase = DepthTexture[DTid.xy + uint2(1,1)]; + DepthBase = DepthBase /4; Ambient[DTid.xy/2] = float4(DiffBase.xyz, AmbValue); Ambient[DTid.xy/2 + float2(Pixels.x/2, 0)] = GUI[DTid.xy]; - Ambient[DTid.xy/2 + float2(0, Pixels.y/2)] = float4(DiffBase.xyz * DiffBase.w,1); - Ambient[DTid.xy/2 + Pixels/2] = float4(NormalSpec[DTid.xy].xyz,1); + Ambient[DTid.xy/2 + float2(0, Pixels.y/2)] = float4(DiffBase.xyz * DiffBase.w * 10 /* * (2-DepthBase) */,1); + Ambient[DTid.xy/2 + Pixels/2] = float4(NormalSpec[DTid.xy].xyz * float3(1,1,-1),1); } } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/Light/SSAO.hlsli b/Code/OysterGraphics/Shader/Passes/Light/SSAO.hlsli index bf71b92b..f2258905 100644 --- a/Code/OysterGraphics/Shader/Passes/Light/SSAO.hlsli +++ b/Code/OysterGraphics/Shader/Passes/Light/SSAO.hlsli @@ -1,7 +1,7 @@ #include "Defines.hlsli" #include "PosManipulation.hlsli" -static float Radius = 100; +static float Radius = 10; float GetSSAO(float3 pos, float2 uv, int2 texCoord2, uint2 rndID) { @@ -41,7 +41,7 @@ float GetSSAO(float3 pos, float2 uv, int2 texCoord2, uint2 rndID) float sampleDepth = ViewPos.z; //compare to depth from sample - float rangeCheck = (abs(pos.z - sampleDepth) < Radius) ? 1.0f : 0.0f; + float rangeCheck = (abs(pos.z - sampleDepth) > Radius) ? 1.0f : 0.0f; occlusion += (sampleDepth <= sampled.z ? 1.0f : 0.0f) * rangeCheck; } occlusion /= (float)(SSAOKernel.Length.x); diff --git a/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl b/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl index decf5526..258d0f25 100644 --- a/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl +++ b/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl @@ -11,33 +11,33 @@ cbuffer Size : register(b0) float AmbFactor; } -float4 SuperSample(float4 Glow, uint3 DTid) -{ - // Line X - float2 index = (float2)(DTid.xy/2); - index += float2(0,Output.Length.y/2); - index = index / Output.Length; - Glow = Ambient.SampleLevel(S1, index,1); - Glow = Glow; - - return Glow; -} - [numthreads(16, 16, 1)] void main( uint3 DTid : SV_DispatchThreadID ) { + float SSAO = 0; + for(int x = 0; x < 4; ++x) + { + for(int y = 0; y < 4; ++y) + { + SSAO += Ambient[DTid.xy/2 + uint2(-2+x,-2+y)].w; + } + } + + SSAO = SSAO / 16; + float4 Light = Diffuse[DTid.xy] + saturate(Specular[DTid.xy]); - float4 Amb = float4(Ambient[DTid.xy/2].xyz /* * Ambient[DTid.xy/2].w*/, 0); - float4 Glow = Ambient[DTid.xy/2 + uint2(0,Output.Length.y/2)]; + float3 Amb = Ambient[DTid.xy/2].xyz * SSAO; + + float3 Glow = Ambient[DTid.xy/2 + uint2(0,Output.Length.y/2)].xyz; float4 GUI; uint2 index = DTid.xy/2 + uint2((uint)Output.Length.x/(uint)2,0); - float3 PostLight = Amb.xyz * AmbFactor; + float3 PostLight = Amb * AmbFactor; PostLight = PostLight + Light.xyz + Glow; GUI = float4(Ambient[index]); PostLight = PostLight * (1 - GUI.w); Output[DTid.xy] = float4((GUI.xyz * GUI.w) + PostLight, 1); - //Output[DTid.xy] = float4(Ambient[DTid.xy/2 + uint2(0,Output.Length.y*0.5f)].xyz,1); - //Output[DTid.xy] = Ambient[DTid.xy]; + //Output[DTid.xy] = float4(Ambient[DTid.xy/2 + uint2(Output.Length*0.5f)].xyz,1); + //Output[DTid.xy] = SSAO * float4(1,1,1,1); } \ No newline at end of file