Merge branch 'GameServer' of https://github.com/dean11/Danbias into GameLogic

This commit is contained in:
dean11 2014-02-20 12:42:39 +01:00
commit a72a304c88
42 changed files with 550 additions and 270 deletions

View File

@ -47,6 +47,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Utilities", "Misc\Utilities
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LevelLoader", "Game\LevelLoader\LevelLoader.vcxproj", "{6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LevelLoader", "Game\LevelLoader\LevelLoader.vcxproj", "{6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameServerDebugEnvironment", "Game\LanServer\GameServerDebugEnvironment\GameServerDebugEnvironment.vcxproj", "{67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU 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|x64.ActiveCfg = Release|Win32
{6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}.RelWithDebInfo|x86.ActiveCfg = Release|Win32 {6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}.RelWithDebInfo|x86.ActiveCfg = Release|Win32
{6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}.RelWithDebInfo|x86.Build.0 = 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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -737,5 +773,6 @@ Global
{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE} = {1322B12B-5E37-448A-AAAF-F637460DCB23} {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE} = {1322B12B-5E37-448A-AAAF-F637460DCB23}
{604A12A7-07BF-4482-BDF3-7101C811F121} = {C83A6FAD-E71F-4B1E-9D63-E93E61DDC012} {604A12A7-07BF-4482-BDF3-7101C811F121} = {C83A6FAD-E71F-4B1E-9D63-E93E61DDC012}
{C8CBA520-5D7D-4D61-A8DA-6E05FD132BCB} = {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 EndGlobalSection
EndGlobal EndGlobal

View File

@ -106,9 +106,9 @@ namespace DanBias
Graphics::API::Update( dt ); Graphics::API::Update( dt );
data.capFrame += 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_continue: break;
case Result_quit: return DanBiasClientReturn_Success; case Result_quit: return DanBiasClientReturn_Success;
@ -117,7 +117,7 @@ namespace DanBias
} }
if(Render() != S_OK) if(Render() != S_OK)
return DanBiasClientReturn_Error; return DanBiasClientReturn_Error;
data.capFrame = 0; data.capFrame -= 0.03f;
} }
if(data.networkClient.IsConnected()) if(data.networkClient.IsConnected())
@ -143,7 +143,7 @@ namespace DanBias
p.texturePath = L"..\\Content\\Textures\\"; p.texturePath = L"..\\Content\\Textures\\";
p.Resolution = Oyster::Math::Float2( 1280.0f, 720.0f ); p.Resolution = Oyster::Math::Float2( 1280.0f, 720.0f );
//! @todo fix proper amb value //! @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) if(Oyster::Graphics::API::Init(data.window->GetHWND(), false, false, p) != Oyster::Graphics::API::Sucsess)
return E_FAIL; return E_FAIL;

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<ShowAllFiles>true</ShowAllFiles> <ShowAllFiles>false</ShowAllFiles>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory> <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>

View File

@ -7,9 +7,6 @@
#include "EventButtonGUI.h" #include "EventButtonGUI.h"
//Only for testing because we don't have any other input
#include "../WindowManager/WindowShell.h"
namespace DanBias namespace DanBias
{ {
namespace Client namespace Client
@ -18,24 +15,25 @@ namespace DanBias
class ButtonEllipse : public EventButtonGUI<Owner> class ButtonEllipse : public EventButtonGUI<Owner>
{ {
public: public:
ButtonEllipse() ButtonEllipse(std::wstring textureName, std::wstring buttonText,
: EventButtonGUI(), radius(0) 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, ButtonEllipse(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
: EventButtonGUI(textureName, buttonText, textColor, owner, pos, size, resize) 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, ButtonEllipse(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
: EventButtonGUI(textureName, buttonText, textColor, func, pos, size, resize) 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, ButtonEllipse(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
: EventButtonGUI(textureName, buttonText, textColor, func, owner, pos, size, resize) 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)
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)
{} {}
virtual ~ButtonEllipse() virtual ~ButtonEllipse()
{} {}
@ -43,7 +41,6 @@ namespace DanBias
//Circle vs point collision //Circle vs point collision
bool Collision(Oyster::Event::MouseInput& input) bool Collision(Oyster::Event::MouseInput& input)
{ {
//Should come from the InputClass
float xMouse = input.x, yMouse = input.y; float xMouse = input.x, yMouse = input.y;
double normx = (xMouse - pos.x) / size.x; double normx = (xMouse - pos.x) / size.x;

View File

@ -6,9 +6,6 @@
#define DANBIAS_CLIENT_BUTTON_RECTANGLE_H #define DANBIAS_CLIENT_BUTTON_RECTANGLE_H
#include "EventButtonGUI.h" #include "EventButtonGUI.h"
#include <iostream>
//Only for testing because we don't have any other input
#include "../WindowManager/WindowShell.h"
namespace DanBias namespace DanBias
{ {
@ -18,55 +15,46 @@ namespace DanBias
class ButtonRectangle : public EventButtonGUI<Owner> class ButtonRectangle : public EventButtonGUI<Owner>
{ {
public: public:
ButtonRectangle()
: EventButtonGUI(), width(0), height(0)
{}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, ButtonRectangle(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
Owner owner, Oyster::Math::Float3 pos, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) : EventButtonGUI(textureName, buttonText
: EventButtonGUI(textureName, buttonText, , textColor, backColor, hoverColor, pressedColor
textColor, backColor, hoverColor, pressedColor, , owner, pos, size, resize)
owner, pos, size, resize)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, ButtonRectangle(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
EventFunc func, Oyster::Math::Float3 pos, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) : EventButtonGUI(textureName, buttonText
: EventButtonGUI(textureName, buttonText, , textColor, backColor, hoverColor, pressedColor
textColor, backColor, hoverColor, pressedColor, , func, pos, size, resize)
func, pos, size, resize)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, ButtonRectangle(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
EventFunc func, Owner owner, Oyster::Math::Float3 pos, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) : EventButtonGUI(textureName, buttonText
: EventButtonGUI(textureName, buttonText, , textColor, backColor, hoverColor, pressedColor
textColor, backColor, hoverColor, pressedColor, , func, owner, pos, size, resize)
func, owner, pos, size, resize)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, ButtonRectangle(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, 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, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) : EventButtonGUI(textureName, buttonText
: EventButtonGUI(textureName, buttonText, , textColor, backColor, hoverColor, pressedColor
textColor, backColor, hoverColor, pressedColor, , func, owner, userData, pos, size, resize)
func, owner, userData, pos, size, resize)
{} {}
virtual ~ButtonRectangle() virtual ~ButtonRectangle()
{} {}
//Circle vs point collision //Rectangle vs point collision
bool Collision(Oyster::Event::MouseInput& input) bool Collision(Oyster::Event::MouseInput& input)
{ {
//Should come from the InputClass
float xMouse = input.x, yMouse = input.y; float xMouse = input.x, yMouse = input.y;
float widthTemp = pos.x - size.x * 0.5f; float widthTemp = pos.x - size.x * 0.5f;
float widthTemp2 = pos.x + size.x * 0.5f; float widthTemp2 = pos.x + size.x * 0.5f;
float heightTemp = pos.y - size.y * 0.5f; float heightTemp = pos.y - size.y * 0.5f;
float heightTemp2 = 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 && if(xMouse >= widthTemp && xMouse <= widthTemp2 &&
yMouse >= heightTemp && yMouse <= heightTemp2) yMouse >= heightTemp && yMouse <= heightTemp2)

View File

@ -7,6 +7,7 @@
#include "EventHandler/EventButton.h" #include "EventHandler/EventButton.h"
#include "DllInterfaces/GFXAPI.h" #include "DllInterfaces/GFXAPI.h"
#include "../WindowManager/WindowShell.h"
namespace DanBias namespace DanBias
{ {
@ -37,26 +38,27 @@ namespace DanBias
textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
this->resizedSize = size;
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
EventButtonGUI(std::wstring textureName, std::wstring buttonText, EventButtonGUI(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
EventFunc func, Oyster::Math::Float3 pos, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
: EventButton(func), pos(pos), size(size), texture(NULL), buttonText(buttonText), : EventButton(func), pos(pos), size(size), texture(NULL), buttonText(buttonText),
textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
this->resizedSize = size;
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
EventButtonGUI(std::wstring textureName, std::wstring buttonText, EventButtonGUI(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
EventFunc func, Owner owner, Oyster::Math::Float3 pos, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
: EventButton(func, owner), pos(pos), size(size), texture(NULL), buttonText(buttonText), : EventButton(func, owner), pos(pos), size(size), texture(NULL), buttonText(buttonText),
textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
this->resizedSize = size;
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
EventButtonGUI(std::wstring textureName, std::wstring buttonText, EventButtonGUI(std::wstring textureName, std::wstring buttonText,
@ -66,6 +68,7 @@ namespace DanBias
textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
this->resizedSize = size;
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
virtual ~EventButtonGUI() virtual ~EventButtonGUI()
@ -92,15 +95,15 @@ namespace DanBias
if(EventButton<Owner>::GetState() == ButtonState_None) if(EventButton<Owner>::GetState() == ButtonState_None)
{ {
Oyster::Graphics::API::RenderGuiElement(texture, pos, size, backColor); Oyster::Graphics::API::RenderGuiElement(texture, pos, resizedSize, backColor);
} }
else if(EventButton<Owner>::GetState() == ButtonState_Hover) else if(EventButton<Owner>::GetState() == ButtonState_Hover)
{ {
Oyster::Graphics::API::RenderGuiElement(texture, pos, size, hoverColor); Oyster::Graphics::API::RenderGuiElement(texture, pos, resizedSize, hoverColor);
} }
else 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); GetClientRect(WindowShell::GetHWND(), &r);
if(resize == ResizeAspectRatio_Height) 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) else if(resize == ResizeAspectRatio_Width)
size.x *= (float)r.bottom/(float)r.right; resizedSize.x = size.x * ((float)r.bottom/(float)r.right);
} }
protected: protected:
Oyster::Math::Float3 pos; Oyster::Math::Float3 pos;
Oyster::Math::Float2 size; 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; Oyster::Graphics::API::Texture texture;
std::wstring buttonText; std::wstring buttonText;

View File

@ -16,8 +16,10 @@ C_Object::C_Object()
} }
C_Object::~C_Object() C_Object::~C_Object()
{ {
if( this->model )
this->Release();
} }
bool C_Object::Init(ModelInitData modelInit) bool C_Object::Init(ModelInitData modelInit)
{ {
position = modelInit.position; position = modelInit.position;

View File

@ -20,5 +20,5 @@ bool C_Player::Init(ModelInitData modelInit)
void C_Player::playAnimation(std::wstring animation, bool loop) void C_Player::playAnimation(std::wstring animation, bool loop)
{ {
if(model) if(model)
Oyster::Graphics::API::PlayAnimation(model, L"movement", loop); Oyster::Graphics::API::PlayAnimation(model, animation, loop);
} }

View File

@ -4,6 +4,12 @@
using namespace ::Oyster::Math3D; using namespace ::Oyster::Math3D;
using namespace ::Utility::Value; using namespace ::Utility::Value;
inline Quaternion Transform( const Quaternion &transformer, const Quaternion &transformee )
{
// return transformer * transformee;
return transformee * transformer;
}
Camera_FPSV2::Camera_FPSV2() Camera_FPSV2::Camera_FPSV2()
{ // this->head is default set to identity uniformprojection at origo { // this->head is default set to identity uniformprojection at origo
this->pitchUp = 0.0f; this->pitchUp = 0.0f;
@ -46,7 +52,7 @@ void Camera_FPSV2::SetRotation( const Quaternion &rotation )
} }
this->body.rotation = 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; this->pitchHaveChanged = false;
} }
@ -74,7 +80,7 @@ void Camera_FPSV2::UpdateOrientation()
{ {
if( this->pitchHaveChanged ) 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; this->pitchHaveChanged = false;
} }
@ -87,7 +93,7 @@ void Camera_FPSV2::UpdateOrientation()
void Camera_FPSV2::SnapUpToNormal( const Float3 &normal ) 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->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; this->pitchHaveChanged = false;
} }
@ -164,7 +170,7 @@ Float4x4 & Camera_FPSV2::GetViewMatrix( Float4x4 &targetMem ) const
{ {
if( this->pitchHaveChanged ) 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; this->pitchHaveChanged = false;
} }
@ -180,7 +186,7 @@ Float4x4 & Camera_FPSV2::GetViewsProjMatrix( Float4x4 &targetMem ) const
{ {
if( this->pitchHaveChanged ) 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; this->pitchHaveChanged = false;
} }
@ -191,7 +197,7 @@ Float3 Camera_FPSV2::GetNormalOf( const Float3 &axis ) const
{ {
if( this->pitchHaveChanged ) 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; this->pitchHaveChanged = false;
} }
@ -212,7 +218,7 @@ Float3 Camera_FPSV2::GetLook() const
{ {
if( this->pitchHaveChanged ) 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; this->pitchHaveChanged = false;
} }

View File

@ -89,6 +89,8 @@ bool GameState::Init( SharedStateContent &shared )
Float aspectRatio = gfxOp.Resolution.x / gfxOp.Resolution.y; Float aspectRatio = gfxOp.Resolution.x / gfxOp.Resolution.y;
this->privData->camera.SetPerspectiveProjection( Utility::Value::Radian(90.0f), aspectRatio, 0.1f, 1000.0f ); this->privData->camera.SetPerspectiveProjection( Utility::Value::Radian(90.0f), aspectRatio, 0.1f, 1000.0f );
Graphics::API::SetProjection( this->privData->camera.GetProjectionMatrix() ); Graphics::API::SetProjection( this->privData->camera.GetProjectionMatrix() );
gfxOp.AmbientValue = 1.0f;
Graphics::API::SetOptions(gfxOp);
//tell server ready //tell server ready
this->privData->nwClient->Send( Protocol_General_Status(Protocol_General_Status::States_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(); light->second->Render();
} }
return true; return true;
} }
@ -189,47 +192,49 @@ bool GameState::Render()
light->second->Render(); light->second->Render();
}*/ }*/
// RB DEBUG render wire frame #ifdef _DEBUG
//if(this->privData->renderWhireframe) //RB DEBUG render wire frame
//{ if(this->privData->renderWhireframe)
// Oyster::Graphics::API::StartRenderWireFrame(); {
// 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 translation = Oyster::Math3D::TranslationMatrix(Float3( 0,132, 20));
// Oyster::Math3D::Float4x4 world = translation * scale; Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(Float3( 0.5f, 0.5f, 0.5f));
// Oyster::Graphics::API::RenderDebugCube( world ); Oyster::Math3D::Float4x4 world = translation * scale;
// Oyster::Graphics::API::RenderDebugCube(this->privData->player.getRBWorld()); 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 ) staticObject = this->privData->staticObjects->begin();
// { for( ; staticObject != this->privData->staticObjects->end(); ++staticObject )
// if( staticObject->second->getBRtype() == RB_Type_Cube) {
// { if( staticObject->second->getBRtype() == RB_Type_Cube)
// Oyster::Graphics::API::RenderDebugCube( staticObject->second->getRBWorld()); {
// } Oyster::Graphics::API::RenderDebugCube( staticObject->second->getRBWorld());
// if( staticObject->second->getBRtype() == RB_Type_Sphere) }
// { if( staticObject->second->getBRtype() == RB_Type_Sphere)
// Oyster::Graphics::API::RenderDebugSphere( staticObject->second->getRBWorld()); {
// } Oyster::Graphics::API::RenderDebugSphere( staticObject->second->getRBWorld());
// } }
// }
// dynamicObject = this->privData->dynamicObjects->begin();
// for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject ) dynamicObject = this->privData->dynamicObjects->begin();
// { for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject )
// if( dynamicObject->second ) {
// { if( dynamicObject->second )
// if( dynamicObject->second->getBRtype() == RB_Type_Cube) {
// { if( dynamicObject->second->getBRtype() == RB_Type_Cube)
// Oyster::Graphics::API::RenderDebugCube( dynamicObject->second->getRBWorld()); {
// } Oyster::Graphics::API::RenderDebugCube( dynamicObject->second->getRBWorld());
// if( dynamicObject->second->getBRtype() == RB_Type_Sphere) }
// { if( dynamicObject->second->getBRtype() == RB_Type_Sphere)
// Oyster::Graphics::API::RenderDebugSphere( dynamicObject->second->getRBWorld()); {
// } Oyster::Graphics::API::RenderDebugSphere( dynamicObject->second->getRBWorld());
// } }
// } }
//} }
// !RB DEBUG }
//!RB DEBUG
#endif
Oyster::Graphics::API::EndFrame(); Oyster::Graphics::API::EndFrame();
return true; return true;
@ -237,6 +242,7 @@ bool GameState::Render()
bool GameState::Release() bool GameState::Release()
{ {
Graphics::API::Option o = Graphics::API::GetOption();
if( privData ) if( privData )
{ {
auto staticObject = this->privData->staticObjects->begin(); 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 is this player. Remember to change camera
if( this->privData->myId == decoded.object_ID ) 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.SetPosition( position );
this->privData->camera.SetRotation( rotation ); this->privData->camera.SetRotation( rotation );
this->privData->player.setPos( position ); this->privData->player.setPos( position );

View File

@ -152,18 +152,18 @@ void NetLoadState::LoadGame( const ::std::string &fileName )
RBInitData RBData; RBInitData RBData;
if(oh->boundingVolume.geoType == CollisionGeometryType_Box) 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.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; RBData.type = RB_Type_Cube;
staticObject->InitRB( RBData ); staticObject->InitRB( RBData );
} }
if(oh->boundingVolume.geoType == CollisionGeometryType_Sphere) 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.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; RBData.type = RB_Type_Sphere;
staticObject->InitRB( RBData ); staticObject->InitRB( RBData );
} }
@ -196,18 +196,18 @@ void NetLoadState::LoadGame( const ::std::string &fileName )
RBInitData RBData; RBInitData RBData;
if(oh->boundingVolume.geoType == CollisionGeometryType_Box) 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.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; RBData.type = RB_Type_Cube;
dynamicObject->InitRB( RBData ); dynamicObject->InitRB( RBData );
} }
if(oh->boundingVolume.geoType == CollisionGeometryType_Sphere) 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.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; RBData.type = RB_Type_Sphere;
dynamicObject->InitRB( RBData ); dynamicObject->InitRB( RBData );
} }

View File

@ -22,10 +22,14 @@ using namespace GameLogic;
//Physics::ICustomBody::SubscriptMessage //Physics::ICustomBody::SubscriptMessage
void Player::PlayerCollision(Oyster::Physics::ICustomBody *rigidBodyPlayer, Oyster::Physics::ICustomBody *obj, Oyster::Math::Float kineticEnergyLoss) void Player::PlayerCollision(Oyster::Physics::ICustomBody *rigidBodyPlayer, Oyster::Physics::ICustomBody *obj, Oyster::Math::Float kineticEnergyLoss)
{ {
Player *player = ((Player*)(rigidBodyPlayer->GetCustomTag())); Player *player = ((Player*)(rigidBodyPlayer->GetCustomTag()));
Object *realObj = (Object*)obj->GetCustomTag(); //needs to be changed? Object *realObj = (Object*)obj->GetCustomTag(); //needs to be changed?
if(!realObj)
return;
if(!player)
return;
switch (realObj->GetObjectType()) switch (realObj->GetObjectType())
{ {
case ObjectSpecialType::ObjectSpecialType_Generic: case ObjectSpecialType::ObjectSpecialType_Generic:

View File

@ -77,7 +77,7 @@ Game::PlayerData* Game::CreatePlayer()
found = true; found = true;
freeID = i; 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) 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(); if(this->players[i] && this->players[i]->player) this->players[i]->player->EndFrame();
} }
return true; return true;
} }

View File

@ -5,36 +5,37 @@ using namespace GameLogic;
Game::PlayerData::PlayerData() Game::PlayerData::PlayerData()
{ {
//set some stats that are appropriate to a player Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,250,0);
Oyster::Math::Float height = 2.0f;
Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,180,0); Oyster::Math::Float radius = 0.5f;
Oyster::Math::Float mass = 40;
Oyster::Math::Float3 size = Oyster::Math::Float3(0.25f,2.0f,0.5f);
Oyster::Math::Float mass = 60;
Oyster::Math::Float restitutionCoeff = 0.5f; Oyster::Math::Float restitutionCoeff = 0.5f;
Oyster::Math::Float frictionCoeff_Static = 0.4f; Oyster::Math::Float frictionCoeff_Static = 0.4f;
Oyster::Math::Float frictionCoeff_Dynamic = 0.3f; Oyster::Math::Float frictionCoeff_Dynamic = 0.3f;
//sbDesc.quaternion = Oyster::Math::Float3(0, Oyster::Math::pi, 0);
//create rigid body //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); rigidBody->SetAngularFactor(0.0f);
//create player with this rigid body //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) 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::Float3 centerPosition = Oyster::Math::Float3(-50,250,0);
Oyster::Math::Float mass = 60; 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 restitutionCoeff = 0.5f;
Oyster::Math::Float frictionCoeff_Static = 0.4f; Oyster::Math::Float frictionCoeff_Static = 0.4f;
Oyster::Math::Float frictionCoeff_Dynamic = 0.3f; Oyster::Math::Float frictionCoeff_Dynamic = 0.3f;
//sbDesc.quaternion = Oyster::Math::Float3(0, Oyster::Math::pi, 0);
//create rigid body //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); rigidBody->SetAngularFactor(0.0f);
//create player with this rigid body //create player with this rigid body
this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player,playerID,teamID); this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player,playerID,teamID);

View File

@ -4,6 +4,7 @@
#include "JumpPad.h" #include "JumpPad.h"
#include "ExplosiveCrate.h" #include "ExplosiveCrate.h"
#include "Portal.h" #include "Portal.h"
#include <Resource\OResource.h>
//Conversion from wstring to string //Conversion from wstring to string
#include <codecvt> #include <codecvt>
@ -22,7 +23,7 @@ Level::~Level(void)
delete this->levelObj; delete this->levelObj;
this->levelObj = NULL; this->levelObj = NULL;
} }
Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) Object* Level::CreateGameObj(ObjectHeader* obj, ICustomBody* rigidBody)
{ {
Object* gameObj = NULL; Object* gameObj = NULL;
@ -55,6 +56,7 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody)
{ {
gameObj = new StaticObject(rigidBody, Object::DefaultOnCollision, (ObjectSpecialType)obj->specialTypeID, objID); gameObj = new StaticObject(rigidBody, Object::DefaultOnCollision, (ObjectSpecialType)obj->specialTypeID, objID);
} }
break;
case ObjectSpecialType_Stone: case ObjectSpecialType_Stone:
{ {
gameObj = new DynamicObject(rigidBody, Object::DefaultOnCollision, (ObjectSpecialType)obj->specialTypeID, objID); 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; rigidBodyMass = obj->scale[0] * obj->scale[1] * obj->scale[2] * obj->boundingVolume.sphere.mass;
//Radius scaled //Radius scaled
//rigidBodyRadius = (staticObjData->scale[0] + staticObjData->scale[1] + staticObjData->scale[2] / 3) * staticObjData->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; //rigidBodyRadius = (obj->scale[0] * obj->scale[1] * obj->scale[2]) * obj->boundingVolume.sphere.radius;
//create the rigid body //create the rigid body
rigidBody = API::Instance().AddCollisionSphere( rigidBodyRadius , rigidWorldRotation , rigidWorldPos , rigidBodyMass, obj->boundingVolume.sphere.restitutionCoeff , obj->boundingVolume.sphere.frictionCoeffStatic , obj->boundingVolume.sphere.frictionCoeffDynamic); 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 //Convert from wstring to string
typedef std::codecvt_utf8<wchar_t> convert_typeX; typedef std::codecvt_utf8<wchar_t> convert_typeX;
std::wstring_convert<convert_typeX, wchar_t> converterX; std::wstring_convert<convert_typeX, wchar_t> converterX;
std::string convertedLevelPath = converterX.to_bytes(levelPath); std::string convertedLevelPath = converterX.to_bytes(levelPath);
objects = ll.LoadLevel(convertedLevelPath); 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().SetGravityPoint(Oyster::Math3D::Float3(0,0,0));
API::Instance().SetGravity(200); API::Instance().SetGravity(200);
int objCount = objects.size(); int objCount = (int)objects.size();
for (int i = 0; i < objCount; i++) for (int i = 0; i < objCount; i++)
{ {
@ -261,7 +263,7 @@ bool Level::InitiateLevel(std::wstring levelPath)
if(rigidBody_Static != NULL) if(rigidBody_Static != NULL)
{ {
// create game object // create game object
Object* staticGameObj = createGameObj(staticObjData, rigidBody_Static); Object* staticGameObj = CreateGameObj(staticObjData, rigidBody_Static);
if(staticGameObj != NULL) if(staticGameObj != NULL)
{ {
this->staticObjects.Push((StaticObject*)staticGameObj); this->staticObjects.Push((StaticObject*)staticGameObj);
@ -295,7 +297,7 @@ bool Level::InitiateLevel(std::wstring levelPath)
if(rigidBody_Dynamic != NULL) if(rigidBody_Dynamic != NULL)
{ {
// create game object // create game object
Object* dynamicGameObj = createGameObj(dynamicObjData, rigidBody_Dynamic); Object* dynamicGameObj = CreateGameObj(dynamicObjData, rigidBody_Dynamic);
if (dynamicGameObj != NULL) if (dynamicGameObj != NULL)
{ {
this->dynamicObjects.Push((DynamicObject*)dynamicGameObj); this->dynamicObjects.Push((DynamicObject*)dynamicGameObj);

View File

@ -35,7 +35,7 @@ namespace GameLogic
Oyster::Physics::ICustomBody* InitRigidBodyCube( const ObjectHeader* obj); Oyster::Physics::ICustomBody* InitRigidBodyCube( const ObjectHeader* obj);
Oyster::Physics::ICustomBody* InitRigidBodySphere( 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 * Creates a team in the level
* @param teamSize: The size of the team you want to create * @param teamSize: The size of the team you want to create

View File

@ -27,6 +27,8 @@ Player::Player(Oyster::Physics::ICustomBody *rigidBody, void (*EventOnCollision)
key_backward = 0; key_backward = 0;
key_strafeRight = 0; key_strafeRight = 0;
key_strafeLeft = 0; key_strafeLeft = 0;
key_jump = 0;
invincibleCooldown = 0;
this->previousPosition = Oyster::Math::Float3(0,0,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_backward = 0;
key_strafeRight = 0; key_strafeRight = 0;
key_strafeLeft = 0; key_strafeLeft = 0;
key_jump = 0;
invincibleCooldown = 0;
this->previousPosition = Oyster::Math::Float3(0,0,0); this->previousPosition = Oyster::Math::Float3(0,0,0);
this->moveDir = Oyster::Math::Float3(0,0,0); this->moveDir = Oyster::Math::Float3(0,0,0);
@ -71,7 +75,7 @@ Player::~Player(void)
void Player::BeginFrame() void Player::BeginFrame()
{ {
//weapon->Update(0.002f); //weapon->Update(0.002f);
Object::BeginFrame(); //Object::BeginFrame();
Oyster::Math::Float maxSpeed = 30; Oyster::Math::Float maxSpeed = 30;
@ -82,9 +86,9 @@ void Player::BeginFrame()
/*if (left) /*if (left)
m_turnAngle -= dt * m_turnVelocity; m_turnAngle -= dt * m_turnVelocity;
if (right) 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::Float3 linearVelocity = this->rigidBody->GetLinearVelocity();
Oyster::Math::Float speed = this->rigidBody->GetLinearVelocity().GetLength(); 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 */ /* Dampen when on the ground and not being moved by the player */
linearVelocity *= 0.2f; linearVelocity *= 0.2f;
@ -153,8 +157,11 @@ void Player::BeginFrame()
this->playerState = PLAYER_STATE::PLAYER_STATE_JUMPING; 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() void Player::EndFrame()
@ -164,7 +171,7 @@ void Player::EndFrame()
this->rigidBody->SetUp(this->rigidBody->GetState().centerPos.GetNormalized()); this->rigidBody->SetUp(this->rigidBody->GetState().centerPos.GetNormalized());
Object::EndFrame(); //Object::EndFrame();
} }
void Player::Move(const PLAYER_MOVEMENT &movement) void Player::Move(const PLAYER_MOVEMENT &movement)

View File

@ -22,6 +22,7 @@ namespace DanBias
{ {
ClientState_CreatingGame, ClientState_CreatingGame,
ClientState_Ready, ClientState_Ready,
ClientState_Invalid,
}; };
public: public:
@ -41,6 +42,7 @@ namespace DanBias
inline GameLogic::IPlayerData* GetPlayer() const { return this->player; } inline GameLogic::IPlayerData* GetPlayer() const { return this->player; }
Oyster::Network::NetClient GetClient() const { return this->client; } Oyster::Network::NetClient GetClient() const { return this->client; }
ClientState GetState() const { return this->state; } ClientState GetState() const { return this->state; }
int GetFailedProtocolCount() const { return this->failedPackagesCount; }
void SetPlayer(GameLogic::IPlayerData* player); void SetPlayer(GameLogic::IPlayerData* player);
@ -53,6 +55,10 @@ namespace DanBias
GameLogic::IPlayerData* ReleasePlayer(); GameLogic::IPlayerData* ReleasePlayer();
Oyster::Network::NetClient ReleaseClient(); Oyster::Network::NetClient ReleaseClient();
void Invalidate();
int IncrementFailedProtocol();
void ResetFailedProtocolCount();
//NetworkSpecific //NetworkSpecific
void SetOwner(Oyster::Network::NetworkSession* owner); void SetOwner(Oyster::Network::NetworkSession* owner);
void UpdateClient(); void UpdateClient();
@ -62,7 +68,9 @@ namespace DanBias
Oyster::Network::NetClient client; Oyster::Network::NetClient client;
bool isReady; bool isReady;
bool isInvalid;
float secondsSinceLastResponse; float secondsSinceLastResponse;
int failedPackagesCount;
std::wstring alias; std::wstring alias;
std::wstring character; std::wstring character;

View File

@ -198,6 +198,9 @@
<ClInclude Include="GameSession.h" /> <ClInclude Include="GameSession.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Misc\OysterMath\OysterMath.vcxproj">
<Project>{f10cbc03-9809-4cba-95d8-327c287b18ee}</Project>
</ProjectReference>
<ProjectReference Include="..\..\Misc\Utilities\Utilities.vcxproj"> <ProjectReference Include="..\..\Misc\Utilities\Utilities.vcxproj">
<Project>{2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee}</Project> <Project>{2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee}</Project>
</ProjectReference> </ProjectReference>

View File

@ -6,6 +6,5 @@
BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved ) BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved )
{ {
return TRUE; return TRUE;
} }

View File

@ -14,6 +14,8 @@ using namespace GameLogic;
GameClient::GameClient(Utility::DynamicMemory::SmartPointer<Oyster::Network::NetworkClient> nwClient) GameClient::GameClient(Utility::DynamicMemory::SmartPointer<Oyster::Network::NetworkClient> nwClient)
{ {
this->isInvalid = false;
this->failedPackagesCount = 0;
this->client = nwClient; this->client = nwClient;
this->player = 0; this->player = 0;
isReady = false; isReady = false;
@ -23,6 +25,7 @@ GameClient::GameClient(Utility::DynamicMemory::SmartPointer<Oyster::Network::Net
} }
GameClient::~GameClient() GameClient::~GameClient()
{ {
this->client = 0;
this->player = 0; this->player = 0;
this->isReady = false; this->isReady = false;
this->character = L"crate_colonists.dan"; this->character = L"crate_colonists.dan";
@ -55,6 +58,22 @@ void GameClient::SetState(ClientState state)
this->state = 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) void GameClient::SetOwner(Oyster::Network::NetworkSession* owner)
{ {

View File

@ -61,15 +61,16 @@ using namespace DanBias;
switch (e.args.type) switch (e.args.type)
{ {
case NetworkClient::ClientEventArgs::EventType_Disconnect: 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; break;
case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToRecieve: case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToRecieve:
break; break;
case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend: case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend:
printf("\t(%i : %s) - EventType_ProtocolFailedToSend\n", cl->GetClient()->GetID(), e.sender->GetIpAddress().c_str()); if(this->gClients[temp]->IncrementFailedProtocol() >= 5/*client->threshold*/)
//this->Detach(e.sender); this->gClients[temp]->Invalidate();
break; break;
case NetworkClient::ClientEventArgs::EventType_ProtocolRecieved: 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); this->ParseProtocol(e.args.data.protocol, cl);
break; break;
} }
@ -128,6 +129,12 @@ using namespace DanBias;
int id = movedObject->GetID(); int id = movedObject->GetID();
//Protocol_ObjectPosition p(movedObject->GetPosition(), id); //Protocol_ObjectPosition p(movedObject->GetPosition(), id);
Protocol_ObjectPositionRotation p(movedObject->GetPosition(), movedObject->GetRotation(), 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()); GameSession::gameSession->Send(p.GetProtocol());
//} //}
} }

View File

@ -19,35 +19,36 @@
</ProjectConfiguration> </ProjectConfiguration>
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{104FA3E9-94D9-4E1D-A941-28A03BC8A095}</ProjectGuid> <ProjectGuid>{67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}</ProjectGuid>
<RootNamespace>GamePhysics</RootNamespace> <Keyword>Win32Proj</Keyword>
<RootNamespace>GameServerDebugEnvironment</RootNamespace>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset> <PlatformToolset>v110</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset> <PlatformToolset>v110</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset> <PlatformToolset>v110</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset> <PlatformToolset>v110</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings"> <ImportGroup Label="ExtensionSettings">
@ -66,104 +67,115 @@
</ImportGroup> </ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir> <LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)..\Bin\Executable\</OutDir>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<TargetName>$(ProjectName)_$(PlatformShortName)D</TargetName> <TargetName>$(ProjectName)_$(PlatformShortName)_$(Configuration)</TargetName>
</PropertyGroup> <IncludePath>$(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath)</IncludePath>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath)</LibraryPath>
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<TargetName>$(ProjectName)_$(PlatformShortName)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir> <LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)..\Bin\Executable\</OutDir>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<TargetName>$(ProjectName)_$(PlatformShortName)D</TargetName> <TargetName>$(ProjectName)_$(PlatformShortName)_$(Configuration)</TargetName>
<IncludePath>$(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)..\Bin\Executable\</OutDir>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<TargetName>$(ProjectName)_$(PlatformShortName)_$(Configuration)</TargetName>
<IncludePath>$(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath)</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir> <LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)..\Bin\Executable\</OutDir>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<TargetName>$(ProjectName)_$(PlatformShortName)</TargetName> <TargetName>$(ProjectName)_$(PlatformShortName)_$(Configuration)</TargetName>
<IncludePath>$(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath)</LibraryPath>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck>
<GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<ModuleDefinitionFile> <DelayLoadDLLs>GameServer_$(PlatformShortName)D.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</ModuleDefinitionFile>
<AdditionalDependencies>$(SolutionDir)Physics/lib/debug/BulletCollision_Debug.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debug.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck>
<GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<ModuleDefinitionFile> <DelayLoadDLLs>GameServer_$(PlatformShortName)D.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</ModuleDefinitionFile>
<AdditionalDependencies>$(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)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck>
<GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<ModuleDefinitionFile> <DelayLoadDLLs>GameServer_$(PlatformShortName).dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</ModuleDefinitionFile>
<AdditionalDependencies>$(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)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck>
<GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<ModuleDefinitionFile> <DelayLoadDLLs>GameServer_$(PlatformShortName).dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</ModuleDefinitionFile>
<AdditionalDependencies>$(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)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Implementation\PhysicsAPI_Impl.h" /> <ProjectReference Include="..\..\..\Misc\WindowManager\WindowManager.vcxproj">
<ClInclude Include="Implementation\SimpleRigidBody.h" /> <Project>{35aea3c0-e0a7-4e1e-88cd-514aa5a442b1}</Project>
<ClInclude Include="PhysicsAPI.h" /> </ProjectReference>
<ClInclude Include="PhysicsStructs-Impl.h" /> <ProjectReference Include="..\..\GameServer\GameServer.vcxproj">
<ClInclude Include="PhysicsStructs.h" /> <Project>{143bd516-20a1-4890-a3e4-f8bfd02220e7}</Project>
</ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="Implementation\DLLMain.cpp" /> <ClCompile Include="Source.cpp" />
<ClCompile Include="Implementation\PhysicsAPI_Impl.cpp" />
<ClCompile Include="Implementation\SimpleRigidBody.cpp" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup>
<ShowAllFiles>true</ShowAllFiles>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,50 @@
/////////////////////////////////////////////////
// Launcher to launch Danbias server or client //
/////////////////////////////////////////////////
#define NOMINMAX
#include <Windows.h>
#include <vld.h>
#include <GameServerAPI.h>
#include <WindowShell.h>
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;
}

View File

@ -482,7 +482,7 @@
this.tableLayoutPanel1.ColumnCount = 3; 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, 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.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.label6, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.label7, 1, 0); this.tableLayoutPanel1.Controls.Add(this.label7, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.label8, 2, 0); this.tableLayoutPanel1.Controls.Add(this.label8, 2, 0);
@ -507,7 +507,7 @@
// label7 // label7
// //
this.label7.AutoSize = true; 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.Name = "label7";
this.label7.Size = new System.Drawing.Size(31, 13); this.label7.Size = new System.Drawing.Size(31, 13);
this.label7.TabIndex = 8; this.label7.TabIndex = 8;
@ -516,7 +516,7 @@
// label8 // label8
// //
this.label8.AutoSize = true; 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.Name = "label8";
this.label8.Size = new System.Drawing.Size(34, 13); this.label8.Size = new System.Drawing.Size(34, 13);
this.label8.TabIndex = 8; this.label8.TabIndex = 8;

View File

@ -4,6 +4,7 @@
#include "LevelLoader.h" #include "LevelLoader.h"
#include "LevelParser.h" #include "LevelParser.h"
#include <Resource\OysterResource.h>
using namespace GameLogic; using namespace GameLogic;
using namespace GameLogic::LevelFileLoader; using namespace GameLogic::LevelFileLoader;
@ -29,6 +30,7 @@ LevelLoader::LevelLoader(std::string folderPath)
LevelLoader::~LevelLoader() LevelLoader::~LevelLoader()
{ {
Oyster::Resource::OysterResource::Clean();
} }
std::vector<Utility::DynamicMemory::SmartPointer<ObjectTypeHeader>> LevelLoader::LoadLevel(std::string fileName) std::vector<Utility::DynamicMemory::SmartPointer<ObjectTypeHeader>> LevelLoader::LoadLevel(std::string fileName)

View File

@ -40,15 +40,15 @@ namespace Oyster
} }
inline unsigned int GetResourceSize() const inline unsigned int GetResourceSize() const
{ {
return this->resourceSize; return (unsigned int)this->resourceSize;
} }
inline unsigned int GetResourceElementSize() const inline unsigned int GetResourceElementSize() const
{ {
return this->resourceElementSize; return (unsigned int)this->resourceElementSize;
} }
inline unsigned int GetResourceID() const inline unsigned int GetResourceID() const
{ {
return this->resourceID; return (unsigned int)this->resourceID;
} }
inline void SetResourceID(int id) inline void SetResourceID(int id)
{ {

View File

@ -337,7 +337,11 @@ namespace Utility
template<typename ValueType> template<typename ValueType>
inline ValueType Clamp( const ValueType &value, const ValueType &min, const ValueType &max ) 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<typename ValueType> template<typename ValueType>
inline ValueType Average( const ValueType &valueA, const ValueType &valueB ) inline ValueType Average( const ValueType &valueA, const ValueType &valueB )

View File

@ -48,6 +48,7 @@ struct NetworkClient::PrivateData : public IThreadObject
Connection connection; Connection connection;
Translator translator; Translator translator;
OysterThread thread; OysterThread thread;
bool outputEvent;
OysterByte recieveBuffer; OysterByte recieveBuffer;
@ -63,6 +64,7 @@ struct NetworkClient::PrivateData : public IThreadObject
: ID(currID++) : ID(currID++)
, parent(0) , parent(0)
, owner(0) , owner(0)
, outputEvent(0)
{ {
InitWinSock(); InitWinSock();
this->thread.Create(this, false); this->thread.Create(this, false);
@ -97,19 +99,42 @@ struct NetworkClient::PrivateData : public IThreadObject
OysterByte temp; OysterByte temp;
CustomNetProtocol p = this->sendQueue.Pop(); CustomNetProtocol p = this->sendQueue.Pop();
if(p[0].value.netShort == 304)
int i = 0;
this->translator.Pack(temp, p); this->translator.Pack(temp, p);
errorCode = this->connection.Send(temp); errorCode = this->connection.Send(temp);
if(errorCode != 0 && errorCode != WSAEWOULDBLOCK) if(errorCode != 0 && errorCode != WSAEWOULDBLOCK)
{ {
CEA parg; if( errorCode == WSAECONNABORTED || errorCode == WSAENOTCONN)
parg.type = CEA::EventType_ProtocolFailedToSend; {
parg.data.protocol = p; CEA parg;
NetEvent<NetworkClient*, CEA> e = { this->parent, parg }; parg.type = CEA::EventType_Disconnect;
this->recieveQueue.Push(e); parg.data.protocol = p;
NetEvent<NetworkClient*, CEA> 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<NetworkClient*, CEA> 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; e.args.type = parg.type;
this->recieveQueue.Push(e); 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<NetworkClient*, ClientEventArgs> temp = this->privateData->recieveQueue.Pop(); NetEvent<NetworkClient*, ClientEventArgs> temp = this->privateData->recieveQueue.Pop();
this->DataRecieved(temp); this->DataRecieved(temp);
} }
} }
@ -401,10 +437,11 @@ void NetworkClient::DataRecieved(NetEvent<NetworkClient*, ClientEventArgs> e)
} }
} }
//void NetworkClient::NetworkCallback(Oyster::Network::CustomNetProtocol& p)
//{}
std::string NetworkClient::GetIpAddress() std::string NetworkClient::GetIpAddress()
{ {
return this->privateData->connection.GetIpAddress(); return this->privateData->connection.GetIpAddress();
} }
void NetworkClient::OutputEventData(bool output)
{
this->privateData->outputEvent;
}

View File

@ -138,8 +138,21 @@ namespace Oyster
*/ */
virtual void DataRecieved(NetEvent<NetworkClient*, ClientEventArgs> e); virtual void DataRecieved(NetEvent<NetworkClient*, ClientEventArgs> e);
/**
*
*/
std::string GetIpAddress(); std::string GetIpAddress();
/** Dumps all activity to std::io
*
*/
void OutputEventData(bool output);
/** Dumps all activity to std::io
*
*/
void SetOutputEventDataStream(FILE out);
private: private:
NetworkClient(const NetworkClient& obj); NetworkClient(const NetworkClient& obj);
NetworkClient& operator =(const NetworkClient& obj); NetworkClient& operator =(const NetworkClient& obj);

View File

@ -58,7 +58,7 @@ void Broadcast()
addr.append(buff); addr.append(buff);
dest.sin_addr.s_addr = inet_addr( addr.c_str() ); dest.sin_addr.s_addr = inet_addr( addr.c_str() );
// send the pkt // 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) , broadcastTime(1.0f, 0.0f)
{ } { }
~PrivateData() ~PrivateData()
{ } {
if(listener)
{
delete listener;
listener = NULL;
}
}
bool DoWork(); bool DoWork();

View File

@ -205,9 +205,9 @@ namespace Oyster
void API::StartRenderWireFrame() 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->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) void API::RenderDebugCube(Math::Matrix world)
@ -221,6 +221,26 @@ namespace Oyster
sphere->WorldMatrix = world; sphere->WorldMatrix = world;
Render::DefaultRenderer::RenderScene(sphere,1,View,Projection); 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 #endif
API::Option API::GetOption() API::Option API::GetOption()

View File

@ -146,7 +146,7 @@ namespace Oyster
return NULL; return NULL;
} }
#endif #endif
Core::UsedMem += data.size; Core::UsedMem += (int)data.size;
return Core::PipelineManager::CreateShader(data, Core::PipelineManager::ShaderType(type)); return Core::PipelineManager::CreateShader(data, Core::PipelineManager::ShaderType(type));
} }
} }

View File

@ -50,7 +50,12 @@ namespace Oyster
if(models[i].Visible) if(models[i].Visible)
{ {
Definitions::PerModel pm; 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; pm.WVP = Projection * View * models[i].WorldMatrix;
Model::ModelInfo* info = models[i].info; Model::ModelInfo* info = models[i].info;
@ -159,10 +164,10 @@ namespace Oyster
{ {
Definitions::BlurrData bd; Definitions::BlurrData bd;
bd.BlurMask = Math::Float4(1,1,1,1); bd.BlurMask = Math::Float4(1,1,1,1);
bd.StopX = Core::resolution.x/2; bd.StopX = (UINT)Core::resolution.x/2;
bd.StopY = Core::resolution.y; bd.StopY = (UINT)Core::resolution.y;
bd.StartX = 0; bd.StartX = 0;
bd.StartY = Core::resolution.y/2; bd.StartY = (UINT)Core::resolution.y/2;
void* data = Resources::Blur::Data.Map(); void* data = Resources::Blur::Data.Map();
memcpy(data,&bd,sizeof(Definitions::BlurrData)); memcpy(data,&bd,sizeof(Definitions::BlurrData));
@ -179,8 +184,8 @@ namespace Oyster
{ {
Definitions::BlurrData bd; Definitions::BlurrData bd;
bd.BlurMask = Math::Float4(0,0,0,1); bd.BlurMask = Math::Float4(0,0,0,1);
bd.StopX = Core::resolution.x/2; bd.StopX = (UINT)Core::resolution.x/2;
bd.StopY = Core::resolution.y/2; bd.StopY = (UINT)Core::resolution.y/2;
bd.StartX = 0; bd.StartX = 0;
bd.StartY = 0; bd.StartY = 0;

View File

@ -103,7 +103,7 @@ namespace Oyster
Resources::Gui::Text::Vertex.Unmap(); Resources::Gui::Text::Vertex.Unmap();
Core::deviceContext->Draw(text.length(), 0); Core::deviceContext->Draw((UINT)text.length(), 0);
} }
} }
} }

View File

@ -349,9 +349,6 @@ namespace Oyster
Core::device->CreateDepthStencilView(depthstencil,NULL,&Gui::depth); Core::device->CreateDepthStencilView(depthstencil,NULL,&Gui::depth);
depthstencil->Release(); depthstencil->Release();
D3D11_DEPTH_STENCIL_DESC dDesc;
return Core::Init::Success; return Core::Init::Success;
} }

View File

@ -17,8 +17,8 @@ float3x3 cotangent_frame( float3 N, float3 p, float2 uv )
float3 B = dp2perp * duv1.y + dp1perp * duv2.y; float3 B = dp2perp * duv1.y + dp1perp * duv2.y;
// construct a scale-invariant frame // construct a scale-invariant frame
float invmax = 1/sqrt( max( dot(T,T), dot(B,B) ) ); float invmax = rsqrt( max( dot(T,T), dot(B,B) ) );
return float3x3( T * invmax, B * invmax, N ); return transpose(float3x3( T * invmax, B * invmax, N ));
} }
float3 perturb_normal( float3 N, float3 V, float2 texcoord ) float3 perturb_normal( float3 N, float3 V, float2 texcoord )
@ -41,11 +41,20 @@ PixelOut main(VertexOut input)
{ {
PixelOut output; PixelOut output;
output.DiffuseGlow = Diffuse.Sample(S1, input.UV) * float4(Color, 1); 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); float3 map = Normal.Sample(S1,input.UV).xyz;
output.NormalSpec = float4(normal, Normal.Sample(S1, input.UV).w*0); //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; return output;
} }

View File

@ -11,7 +11,7 @@ VertexOut main( VertexIn input )
input.pos = mul(boneTrans,float4(input.pos,1)).xyz * Animated + input.pos * int(1-Animated); 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.pos = mul(WVP, float4(input.pos,1));
output.ViewPos = mul(WV, float4(input.pos,1)); output.ViewPos = mul(WV, float4(input.pos,1));

View File

@ -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(0,1)];
DiffBase += DiffuseGlow[DTid.xy + uint2(1,1)]; DiffBase += DiffuseGlow[DTid.xy + uint2(1,1)];
DiffBase = DiffBase / 4; 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] = float4(DiffBase.xyz, AmbValue);
Ambient[DTid.xy/2 + float2(Pixels.x/2, 0)] = GUI[DTid.xy]; 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 + 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,1); Ambient[DTid.xy/2 + Pixels/2] = float4(NormalSpec[DTid.xy].xyz * float3(1,1,-1),1);
} }
} }

View File

@ -1,7 +1,7 @@
#include "Defines.hlsli" #include "Defines.hlsli"
#include "PosManipulation.hlsli" #include "PosManipulation.hlsli"
static float Radius = 100; static float Radius = 10;
float GetSSAO(float3 pos, float2 uv, int2 texCoord2, uint2 rndID) 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; float sampleDepth = ViewPos.z;
//compare to depth from sample //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 += (sampleDepth <= sampled.z ? 1.0f : 0.0f) * rangeCheck;
} }
occlusion /= (float)(SSAOKernel.Length.x); occlusion /= (float)(SSAOKernel.Length.x);

View File

@ -11,33 +11,33 @@ cbuffer Size : register(b0)
float AmbFactor; 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)] [numthreads(16, 16, 1)]
void main( uint3 DTid : SV_DispatchThreadID ) 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 Light = Diffuse[DTid.xy] + saturate(Specular[DTid.xy]);
float4 Amb = float4(Ambient[DTid.xy/2].xyz /* * Ambient[DTid.xy/2].w*/, 0); float3 Amb = Ambient[DTid.xy/2].xyz * SSAO;
float4 Glow = Ambient[DTid.xy/2 + uint2(0,Output.Length.y/2)];
float3 Glow = Ambient[DTid.xy/2 + uint2(0,Output.Length.y/2)].xyz;
float4 GUI; float4 GUI;
uint2 index = DTid.xy/2 + uint2((uint)Output.Length.x/(uint)2,0); 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; PostLight = PostLight + Light.xyz + Glow;
GUI = float4(Ambient[index]); GUI = float4(Ambient[index]);
PostLight = PostLight * (1 - GUI.w); PostLight = PostLight * (1 - GUI.w);
Output[DTid.xy] = float4((GUI.xyz * GUI.w) + PostLight, 1); 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] = float4(Ambient[DTid.xy/2 + uint2(Output.Length*0.5f)].xyz,1);
//Output[DTid.xy] = Ambient[DTid.xy]; //Output[DTid.xy] = SSAO * float4(1,1,1,1);
} }