From 5e8e106327adef84b06288bb714ccc0a880b4ef5 Mon Sep 17 00:00:00 2001 From: Linda Andersson Date: Tue, 26 Nov 2013 11:33:16 +0100 Subject: [PATCH 1/5] add simple input class for testing --- Code/GameLogic/GameLogic.vcxproj | 21 ++-- Code/GameLogic/TestGLMain.cpp | 21 +++- Code/Input/Input.vcxproj | 8 +- Code/Input/Input.vcxproj.filters | 10 ++ Code/Input/L_inputClass.cpp | 203 +++++++++++++++++++++++++++++++ Code/Input/L_inputClass.h | 45 +++++++ 6 files changed, 297 insertions(+), 11 deletions(-) create mode 100644 Code/Input/L_inputClass.cpp create mode 100644 Code/Input/L_inputClass.h diff --git a/Code/GameLogic/GameLogic.vcxproj b/Code/GameLogic/GameLogic.vcxproj index 05419d2c..2d2ee4ef 100644 --- a/Code/GameLogic/GameLogic.vcxproj +++ b/Code/GameLogic/GameLogic.vcxproj @@ -69,7 +69,7 @@ $(SolutionDir)..\Bin\DLL\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName)D - $(SolutionDir)..\Bin\DLL;$(LibraryPath) + C:\Users\Linda Andersson\Desktop\spel\git\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath) $(SolutionDir)..\Bin\DLL\ @@ -94,12 +94,12 @@ Level3 Disabled true - $(SolutionDir)OysterGraphics;$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)GamePhysics;%(AdditionalIncludeDirectories) + $(SolutionDir)Input;$(SolutionDir)OysterGraphics;$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)GamePhysics;%(AdditionalIncludeDirectories) GAME_DLL_EXPORT;_WINDLL;%(PreprocessorDefinitions) true - GamePhysics_$(PlatformShortName)D.lib;%(AdditionalDependencies) + Input_$(PlatformShortName)D.lib;GamePhysics_$(PlatformShortName)D.lib;%(AdditionalDependencies) @@ -107,12 +107,12 @@ Level3 Disabled true - $(SolutionDir)OysterGraphics;$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)GamePhysics;%(AdditionalIncludeDirectories) + $(SolutionDir)Input;$(SolutionDir)OysterGraphics;$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)GamePhysics;%(AdditionalIncludeDirectories) GAME_DLL_EXPORT;_WINDLL;%(PreprocessorDefinitions) true - GamePhysics_$(PlatformShortName)D.lib;%(AdditionalDependencies) + Input_$(PlatformShortName)D.lib;GamePhysics_$(PlatformShortName)D.lib;%(AdditionalDependencies) @@ -122,14 +122,14 @@ true true true - $(SolutionDir)OysterGraphics;$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)GamePhysics;%(AdditionalIncludeDirectories) + $(SolutionDir)Input;$(SolutionDir)OysterGraphics;$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)GamePhysics;%(AdditionalIncludeDirectories) GAME_DLL_EXPORT;_WINDLL;%(PreprocessorDefinitions) true true true - GamePhysics_$(PlatformShortName).lib;%(AdditionalDependencies) + Input_$(PlatformShortName).lib;GamePhysics_$(PlatformShortName).lib;%(AdditionalDependencies) @@ -139,14 +139,14 @@ true true true - $(SolutionDir)OysterGraphics;$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)GamePhysics;%(AdditionalIncludeDirectories) + $(SolutionDir)Input;$(SolutionDir)OysterGraphics;$(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)GamePhysics;%(AdditionalIncludeDirectories) GAME_DLL_EXPORT;_WINDLL;%(PreprocessorDefinitions) true true true - GamePhysics_$(PlatformShortName).lib;%(AdditionalDependencies) + Input_$(PlatformShortName).lib;GamePhysics_$(PlatformShortName).lib;%(AdditionalDependencies) @@ -158,6 +158,9 @@ false false + + {7e3990d2-3d94-465c-b58d-64a74b3ecf9b} + {2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee} diff --git a/Code/GameLogic/TestGLMain.cpp b/Code/GameLogic/TestGLMain.cpp index bf8cebbe..5ca1ac1d 100644 --- a/Code/GameLogic/TestGLMain.cpp +++ b/Code/GameLogic/TestGLMain.cpp @@ -10,7 +10,7 @@ #include "Core/Core.h" #include "Render\Preparations\Preparations.h" #include "IGame.h" -//#include "InputController.h" +#include "L_inputClass.h" @@ -21,6 +21,7 @@ HINSTANCE g_hInst = NULL; HWND g_hWnd = NULL; GameLogic::IGame* game; +InputClass* inputObj; //-------------------------------------------------------------------------------------- @@ -181,16 +182,30 @@ HRESULT InitGame() game = new GameLogic::IGame(); game->Init(); game->StartGame(); + + inputObj = new InputClass; + if(!inputObj->Initialize(g_hInst, g_hWnd, 1024, 768)) + { + MessageBox(0, L"Could not initialize the input object.", L"Error", MB_OK); + return false; + } + return S_OK; } HRESULT Update(float deltaTime) { game->Update(); + inputObj->Update(); return S_OK; } HRESULT Render(float deltaTime) { + int isPressed = 0; + if(inputObj->IsKeyPressed(DIK_A)) + { + isPressed = 1; + } //Oyster::Graphics::Render::Rendering::Basic::NewFrame(); Oyster::Graphics::Render::Preparations::Basic::ClearBackBuffer(Oyster::Math::Float4(0,0,1,1)); @@ -199,7 +214,11 @@ HRESULT Render(float deltaTime) //Oyster::Graphics::Core::deviceContext->Draw(3,0); //Oyster::Graphics::Render::Rendering::Basic::EndFrame(); + wchar_t title[255]; + //swprintf(title, L"| FPS: %d \n",(int)(isPressed)); + swprintf(title, sizeof(title), L"| Pressing A: %d | \n", (int)(isPressed)); + SetWindowText(g_hWnd, title); Oyster::Graphics::Core::swapChain->Present(0,0); diff --git a/Code/Input/Input.vcxproj b/Code/Input/Input.vcxproj index df018aab..6788f744 100644 --- a/Code/Input/Input.vcxproj +++ b/Code/Input/Input.vcxproj @@ -18,13 +18,19 @@ x64 + + + + + + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B} Input - Application + StaticLibrary true v110 Unicode diff --git a/Code/Input/Input.vcxproj.filters b/Code/Input/Input.vcxproj.filters index d7ef6a1a..fc15cc38 100644 --- a/Code/Input/Input.vcxproj.filters +++ b/Code/Input/Input.vcxproj.filters @@ -14,4 +14,14 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + Source Files + + + + + Header Files + + \ No newline at end of file diff --git a/Code/Input/L_inputClass.cpp b/Code/Input/L_inputClass.cpp new file mode 100644 index 00000000..e644b5dc --- /dev/null +++ b/Code/Input/L_inputClass.cpp @@ -0,0 +1,203 @@ +#include "L_inputclass.h" + +InputClass::InputClass() +{ + m_directInput = NULL; + m_keyboard = NULL; + m_mouse = NULL; +} + +InputClass::~InputClass() +{ + // Release the mouse. + if(m_mouse) + { + (m_mouse)->Unacquire(); + (m_mouse)->Release(); + (m_mouse) = NULL; + } + //SAFE_UNACQUIRE(m_mouse); + + // Release the keyboard. + if(m_keyboard) + { + (m_keyboard)->Unacquire(); + (m_keyboard)->Release(); + (m_keyboard) = NULL; + } + //SAFE_UNACQUIRE(m_keyboard); + + // Release the main interface to direct input. + if( m_directInput ) + { + (m_directInput)->Release(); + (m_directInput) = NULL; + } + //SAFE_RELEASE(m_directInput); + + return; +} + +bool InputClass::Initialize(HINSTANCE hinstance, HWND hwnd, int screenWidth, int screenHeight) +{ + HRESULT result; + + // Initialize the main direct input interface. + result = DirectInput8Create(hinstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&m_directInput, NULL); + if(FAILED(result)) + { + return false; + } + + // Initialize the direct input interface for the keyboard. + result = m_directInput->CreateDevice(GUID_SysKeyboard, &m_keyboard, NULL); + if(FAILED(result)) + { + return false; + } + + // Set the cooperative level of the keyboard to not share with other programs. + result = m_keyboard->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); + if(FAILED(result)) + { + return false; + } + // Set the data format. In this case since it is a keyboard we can use the predefined data format. + result = m_keyboard->SetDataFormat(&c_dfDIKeyboard); + if(FAILED(result)) + { + return false; + } + + // Now acquire the keyboard. + result = m_keyboard->Acquire(); + if(FAILED(result)) + { + return false; + } + + // Initialize the direct input interface for the mouse. + result = m_directInput->CreateDevice(GUID_SysMouse, &m_mouse, NULL); + if(FAILED(result)) + { + return false; + } + + // Set the data format for the mouse using the pre-defined mouse data format. + result = m_mouse->SetDataFormat(&c_dfDIMouse); + if(FAILED(result)) + { + return false; + } + + // Set the cooperative level of the mouse to share with other programs. + result = m_mouse->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); + if(FAILED(result)) + { + return false; + } + + // Acquire the mouse. + result = m_mouse->Acquire(); + if(FAILED(result)) + { + return false; + } + + return true; +} + +bool InputClass::Update() +{ + bool result; + + //Read the current state of the keyboard. + result = ReadKeyboard(); + if(!result) + { + return false; + } + + // Read the current state of the mouse. + result = ReadMouse(); + if(!result) + { + return false; + } + + return true; +} + +bool InputClass::ReadKeyboard() +{ + HRESULT result; + + // Read the keyboard device. + result = m_keyboard->GetDeviceState(sizeof(m_keyboardState), (LPVOID)&m_keyboardState); + if(FAILED(result)) + { + // If the keyboard lost focus or was not acquired then try to get control back. + if((result == DIERR_INPUTLOST) || (result == DIERR_NOTACQUIRED)) + { + m_keyboard->Acquire(); + } + else + { + return false; + } + } + + return true; +} + +bool InputClass::ReadMouse() +{ + HRESULT result; + + // Read the mouse device. + result = m_mouse->GetDeviceState(sizeof(DIMOUSESTATE), (LPVOID)&m_mouseState); + if(FAILED(result)) + { + // If the mouse lost focus or was not acquired then try to get control back. + if((result == DIERR_INPUTLOST) || (result == DIERR_NOTACQUIRED)) + { + m_mouse->Acquire(); + } + else + { + return false; + } + } + + return true; +} + +void InputClass::MouseMove(float &Pitch, float &RotateY ) +{ + //if left mouse button is pressed + if (m_mouseState.rgbButtons[0]) + { + float dx = (static_cast( m_mouseState.lX)/150); + float dy = (static_cast( m_mouseState.lY)/150); + + // + Pitch=dy; + RotateY=dx; + + } +} +bool InputClass::IsMousePressed() +{ + if (m_mouseState.rgbButtons[0]) + { + return true; + } + return false; +} +bool InputClass::IsKeyPressed(int key) +{ + if( m_keyboardState[key] & 0x80 ) + return true; + + return false; +} diff --git a/Code/Input/L_inputClass.h b/Code/Input/L_inputClass.h new file mode 100644 index 00000000..b5a08c31 --- /dev/null +++ b/Code/Input/L_inputClass.h @@ -0,0 +1,45 @@ +#ifndef _INPUTCLASS_H_ +#define _INPUTCLASS_H_ + + +#define DIRECTINPUT_VERSION 0x0800 + +#pragma comment(lib, "dinput8.lib") +#pragma comment(lib, "dxguid.lib") + +#include + + + +class InputClass +{ +private: + IDirectInput8* m_directInput; + IDirectInputDevice8* m_keyboard; + IDirectInputDevice8* m_mouse; + + unsigned char m_keyboardState[256]; + DIMOUSESTATE m_mouseState; + + bool ReadKeyboard(); + bool ReadMouse(); + + +public: + + InputClass(); + ~InputClass(); + + // Initialize DirectInput8Create and acquire the mouse and keyboard + bool Initialize(HINSTANCE, HWND, int, int); + + //read the mouse and keyboard and send back + // delta mouse pos and if any button is pressed + bool Update(); + + bool IsKeyPressed(int key); + bool IsMousePressed(); + void MouseMove(float &Pitch, float &RoateY); +}; + +#endif \ No newline at end of file From 36741de19b3310a8e8411a4179f2ccb7c49e9142 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Wed, 27 Nov 2013 15:20:29 +0100 Subject: [PATCH 2/5] Evil Incompotent Compiler fix Sometimes the compiler decides to not compile constructors properly. :( Edited all constructors in Collision3D to reduce chance of this. --- Code/OysterPhysics3D/Box.cpp | 18 +++++++++++------ Code/OysterPhysics3D/BoxAxisAligned.cpp | 26 ++++++++++++++++++++----- Code/OysterPhysics3D/Frustrum.cpp | 19 +++++++++++++----- Code/OysterPhysics3D/ICollideable.cpp | 4 +--- Code/OysterPhysics3D/Line.cpp | 21 +++++++++++++++++--- Code/OysterPhysics3D/Plane.cpp | 14 +++++++++++-- Code/OysterPhysics3D/Point.cpp | 16 ++++++++++++--- Code/OysterPhysics3D/Ray.cpp | 20 ++++++++++++++++--- Code/OysterPhysics3D/Sphere.cpp | 14 +++++++++++-- 9 files changed, 120 insertions(+), 32 deletions(-) diff --git a/Code/OysterPhysics3D/Box.cpp b/Code/OysterPhysics3D/Box.cpp index e9f04b04..382c6732 100644 --- a/Code/OysterPhysics3D/Box.cpp +++ b/Code/OysterPhysics3D/Box.cpp @@ -8,13 +8,19 @@ using namespace ::Oyster::Collision3D; using namespace ::Oyster::Math3D; -Box::Box( ) - : ICollideable(Type_box), rotation(Float4x4::identity), center(0.0f), boundingOffset(0.5f) -{} +Box::Box( ) : ICollideable(Type_box) +{ + this->rotation = Float4x4::identity; + this->center =0.0f; + this->boundingOffset = Float3(0.5f); +} -Box::Box( const Float4x4 &r, const Float3 &p, const Float3 &s ) - : ICollideable(Type_box), rotation(r), center(p), boundingOffset(s*0.5) -{} +Box::Box( const Float4x4 &r, const Float3 &p, const Float3 &s ) : ICollideable(Type_box) +{ + this->rotation = r; + this->center = p; + this->boundingOffset = Float3(s*0.5); +} Box::~Box( ) {} diff --git a/Code/OysterPhysics3D/BoxAxisAligned.cpp b/Code/OysterPhysics3D/BoxAxisAligned.cpp index bdd9d0a9..f50f4b6d 100644 --- a/Code/OysterPhysics3D/BoxAxisAligned.cpp +++ b/Code/OysterPhysics3D/BoxAxisAligned.cpp @@ -8,10 +8,24 @@ using namespace ::Oyster::Collision3D; using namespace ::Oyster::Math3D; -BoxAxisAligned::BoxAxisAligned( ) : ICollideable(Type_box_axis_aligned), minVertex(-0.5f,-0.5f,-0.5f), maxVertex(0.5f,0.5f,0.5f) {} -BoxAxisAligned::BoxAxisAligned( const Float3 &_minVertex, const Float3 &_maxVertex ) : ICollideable(Type_box_axis_aligned), minVertex(_minVertex), maxVertex(_maxVertex) {} -BoxAxisAligned::BoxAxisAligned( const Float &leftClip, const Float &rightClip, const Float &topClip, const Float &bottomClip, const Float &nearClip, const Float &farClip ) - : ICollideable(Type_box_axis_aligned), minVertex(leftClip, bottomClip, nearClip), maxVertex(rightClip, topClip, farClip) {} +BoxAxisAligned::BoxAxisAligned( ) : ICollideable(Type_box_axis_aligned) +{ + this->minVertex = Float3(-0.5f,-0.5f,-0.5f ); + this->maxVertex = Float3( 0.5f, 0.5f, 0.5f ); +} + +BoxAxisAligned::BoxAxisAligned( const Float3 &_minVertex, const Float3 &_maxVertex ) : ICollideable(Type_box_axis_aligned) +{ + this->minVertex = _minVertex; + this->maxVertex = _maxVertex; +} + +BoxAxisAligned::BoxAxisAligned( const Float &leftClip, const Float &rightClip, const Float &topClip, const Float &bottomClip, const Float &nearClip, const Float &farClip ) : ICollideable(Type_box_axis_aligned) +{ + this->minVertex = Float3( leftClip, bottomClip, nearClip ); + this->maxVertex = Float3( rightClip, topClip, farClip ); +} + BoxAxisAligned::~BoxAxisAligned( ) {} BoxAxisAligned & BoxAxisAligned::operator = ( const BoxAxisAligned &box ) @@ -22,7 +36,9 @@ BoxAxisAligned & BoxAxisAligned::operator = ( const BoxAxisAligned &box ) } ::Utility::DynamicMemory::UniquePointer BoxAxisAligned::Clone( ) const -{ return ::Utility::DynamicMemory::UniquePointer( new BoxAxisAligned(*this) ); } +{ + return ::Utility::DynamicMemory::UniquePointer( new BoxAxisAligned(*this) ); +} bool BoxAxisAligned::Intersects( const ICollideable &target ) const { diff --git a/Code/OysterPhysics3D/Frustrum.cpp b/Code/OysterPhysics3D/Frustrum.cpp index a826a4e0..7099c2ce 100644 --- a/Code/OysterPhysics3D/Frustrum.cpp +++ b/Code/OysterPhysics3D/Frustrum.cpp @@ -74,13 +74,22 @@ namespace PrivateStatic } } -Frustrum::Frustrum() : ICollideable(Type_frustrum), - leftPlane(Float3::standard_unit_x, -0.5f), rightPlane(-Float3::standard_unit_x, 0.5f), - bottomPlane(Float3::standard_unit_y, -0.5f), topPlane(-Float3::standard_unit_y, 0.5f), - nearPlane(Float3::standard_unit_z, -0.5f), farPlane(-Float3::standard_unit_z, 0.5f) {} +Frustrum::Frustrum() : ICollideable(Type_frustrum) +{ + this->leftPlane = Plane( Float3::standard_unit_x, -0.5f ); + this->rightPlane = Plane(-Float3::standard_unit_x, 0.5f ), + this->bottomPlane = Plane( Float3::standard_unit_y, -0.5f ); + this->topPlane = Plane(-Float3::standard_unit_y, 0.5f ); + this->nearPlane = Plane( Float3::standard_unit_z, -0.5f ); + this->farPlane = Plane(-Float3::standard_unit_z, 0.5f ); +} Frustrum::Frustrum( const Float4x4 &vp ) : ICollideable(Type_frustrum) -{ PrivateStatic::VP_ToPlanes( this->leftPlane, this->rightPlane, this->bottomPlane, this->topPlane, this->nearPlane, this->farPlane, vp ); } +{ + PrivateStatic::VP_ToPlanes( this->leftPlane, this->rightPlane, this->bottomPlane, + this->topPlane, this->nearPlane, this->farPlane, + vp ); +} Frustrum::~Frustrum() {} diff --git a/Code/OysterPhysics3D/ICollideable.cpp b/Code/OysterPhysics3D/ICollideable.cpp index 89effa36..b0af99e4 100644 --- a/Code/OysterPhysics3D/ICollideable.cpp +++ b/Code/OysterPhysics3D/ICollideable.cpp @@ -6,7 +6,5 @@ using namespace ::Oyster::Collision3D; -ICollideable::ICollideable( Type _type ) - : type(_type) {} - +ICollideable::ICollideable( Type _type ) : type(_type) {} ICollideable::~ICollideable() {} \ No newline at end of file diff --git a/Code/OysterPhysics3D/Line.cpp b/Code/OysterPhysics3D/Line.cpp index 6258c9d9..17fe55f7 100644 --- a/Code/OysterPhysics3D/Line.cpp +++ b/Code/OysterPhysics3D/Line.cpp @@ -8,9 +8,24 @@ using namespace ::Oyster::Collision3D; using namespace ::Oyster::Math3D; -Line::Line( ) : ICollideable(Type_line), ray(), length(0.0f) {} -Line::Line( const class Ray &_ray, const Float &_length ) : ICollideable(Type_line), ray(_ray), length(_length) {} -Line::Line( const Float3 &origin, const Float3 &normalizedDirection, const Float &_length ) : ICollideable(Type_line), ray(origin, normalizedDirection), length(_length) {} +Line::Line( ) : ICollideable(Type_line) +{ + this->ray = Ray(); + this->length = 0.0f; +} + +Line::Line( const class Ray &_ray, const Float &_length ) : ICollideable(Type_line) +{ + this->ray = _ray; + this->length = _length; +} + +Line::Line( const Float3 &origin, const Float3 &normalizedDirection, const Float &_length ) : ICollideable(Type_line) +{ + this->ray = Ray( origin, normalizedDirection ); + this->length = _length; +} + Line::~Line( ) {} Line & Line::operator = ( const Line &line ) diff --git a/Code/OysterPhysics3D/Plane.cpp b/Code/OysterPhysics3D/Plane.cpp index 48a76883..a1a16b14 100644 --- a/Code/OysterPhysics3D/Plane.cpp +++ b/Code/OysterPhysics3D/Plane.cpp @@ -8,8 +8,18 @@ using namespace ::Oyster::Collision3D; using namespace ::Oyster::Math; -Plane::Plane( ) : ICollideable(Type_plane), normal(), phasing(0.0f) {} -Plane::Plane( const Float3 &n, const Float &p ) : ICollideable(Type_plane), normal(n), phasing(p) {} +Plane::Plane( ) : ICollideable(Type_plane) +{ + this->normal = Float3::standard_unit_z; + this->phasing = 0.0f; +} + +Plane::Plane( const Float3 &n, const Float &p ) : ICollideable(Type_plane) +{ + this->normal = n; + this->phasing = p; +} + Plane::~Plane( ) {} Plane & Plane::operator = ( const Plane &plane ) diff --git a/Code/OysterPhysics3D/Point.cpp b/Code/OysterPhysics3D/Point.cpp index a100359b..cf1186c9 100644 --- a/Code/OysterPhysics3D/Point.cpp +++ b/Code/OysterPhysics3D/Point.cpp @@ -8,8 +8,16 @@ using namespace ::Oyster::Collision3D; using namespace ::Oyster::Math3D; -Point::Point( ) : ICollideable(Type_point), center() {} -Point::Point( const Float3 &pos ) : ICollideable(Type_point), center(pos) {} +Point::Point( ) : ICollideable(Type_point) +{ + this->center = Float3::null; +} + +Point::Point( const Float3 &pos ) : ICollideable(Type_point) +{ + this->center = pos; +} + Point::~Point( ) {} Point & Point::operator = ( const Point &point ) @@ -19,7 +27,9 @@ Point & Point::operator = ( const Point &point ) } ::Utility::DynamicMemory::UniquePointer Point::Clone( ) const -{ return ::Utility::DynamicMemory::UniquePointer( new Point(*this) ); } +{ + return ::Utility::DynamicMemory::UniquePointer( new Point(*this) ); +} bool Point::Intersects( const ICollideable &target ) const { diff --git a/Code/OysterPhysics3D/Ray.cpp b/Code/OysterPhysics3D/Ray.cpp index 6d501335..09fb13ec 100644 --- a/Code/OysterPhysics3D/Ray.cpp +++ b/Code/OysterPhysics3D/Ray.cpp @@ -8,8 +8,20 @@ using namespace ::Oyster::Collision3D; using namespace ::Oyster::Math3D; -Ray::Ray( ) : ICollideable(Type_ray), origin(), direction(), collisionDistance(0.0f) {} -Ray::Ray( const Float3 &o, const ::Oyster::Math::Float3 &d ) : ICollideable(Type_ray), origin(o), direction(d), collisionDistance(0.0f) {} +Ray::Ray( ) : ICollideable(Type_ray) +{ + this->origin = Float3::null; + this->direction = Float3::standard_unit_z; + this->collisionDistance = 0.0f; +} + +Ray::Ray( const Float3 &o, const ::Oyster::Math::Float3 &d ) : ICollideable(Type_ray) +{ + this->origin = o; + this->direction = d; + this->collisionDistance = 0.0f; +} + Ray::~Ray( ) {} Ray & Ray::operator = ( const Ray &ray ) @@ -20,7 +32,9 @@ Ray & Ray::operator = ( const Ray &ray ) } ::Utility::DynamicMemory::UniquePointer Ray::Clone( ) const -{ return ::Utility::DynamicMemory::UniquePointer( new Ray(*this) ); } +{ + return ::Utility::DynamicMemory::UniquePointer( new Ray(*this) ); +} bool Ray::Intersects( const ICollideable &target ) const { diff --git a/Code/OysterPhysics3D/Sphere.cpp b/Code/OysterPhysics3D/Sphere.cpp index e30ad384..0cc8bc3b 100644 --- a/Code/OysterPhysics3D/Sphere.cpp +++ b/Code/OysterPhysics3D/Sphere.cpp @@ -4,8 +4,18 @@ using namespace ::Oyster::Collision3D; using namespace ::Oyster::Math; -Sphere::Sphere( ) : ICollideable(Type_sphere), center(), radius(0.0f) { } -Sphere::Sphere( const Float3 &_position, const Float &_radius ) : ICollideable(Type_sphere), center(_position), radius(_radius) {} +Sphere::Sphere( ) : ICollideable(Type_sphere) +{ + this->center = Float3::null; + this->radius = 0.0f; +} + +Sphere::Sphere( const Float3 &_position, const Float &_radius ) : ICollideable(Type_sphere) +{ + this->center = _position; + this->radius = _radius; +} + Sphere::~Sphere( ) {} Sphere & Sphere::operator = ( const Sphere &sphere ) From 6ba10d48c66fbcfead581c206790b89abd678173 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Wed, 27 Nov 2013 15:24:09 +0100 Subject: [PATCH 3/5] Some matrix constructors made explicit --- Code/OysterMath/Matrix.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Code/OysterMath/Matrix.h b/Code/OysterMath/Matrix.h index c5c8735e..c7b6b9e0 100644 --- a/Code/OysterMath/Matrix.h +++ b/Code/OysterMath/Matrix.h @@ -29,7 +29,7 @@ namespace LinearAlgebra Matrix2x2( ); Matrix2x2( const ScalarType &m11, const ScalarType &m12, const ScalarType &m21, const ScalarType &m22 ); - Matrix2x2( const Vector2 vec[2] ); + explicit Matrix2x2( const Vector2 vec[2] ); Matrix2x2( const Vector2 &vec1, const Vector2 &vec2 ); explicit Matrix2x2( const ScalarType element[4] ); Matrix2x2( const Matrix2x2 &matrix ); @@ -80,7 +80,7 @@ namespace LinearAlgebra Matrix3x3( const ScalarType &m11, const ScalarType &m12, const ScalarType &m13, const ScalarType &m21, const ScalarType &m22, const ScalarType &m23, const ScalarType &m31, const ScalarType &m32, const ScalarType &m33 ); - Matrix3x3( const Vector3 vec[3] ); + explicit Matrix3x3( const Vector3 vec[3] ); Matrix3x3( const Vector3 &vec1, const Vector3 &vec2, const Vector3 &vec3 ); explicit Matrix3x3( const ScalarType element[9] ); Matrix3x3( const Matrix3x3 &matrix ); @@ -132,7 +132,7 @@ namespace LinearAlgebra const ScalarType &m21, const ScalarType &m22, const ScalarType &m23, const ScalarType &m24, const ScalarType &m31, const ScalarType &m32, const ScalarType &m33, const ScalarType &m34, const ScalarType &m41, const ScalarType &m42, const ScalarType &m43, const ScalarType &m44 ); - Matrix4x4( const Vector4 vec[4] ); + explicit Matrix4x4( const Vector4 vec[4] ); Matrix4x4( const Vector4 &vec1, const Vector4 &vec2, const Vector4 &vec3, const Vector4 &vec4 ); explicit Matrix4x4( const ScalarType element[16] ); Matrix4x4( const Matrix4x4 &matrix ); From 1a5d1217a32dfbfbdbe9de9348595d4fdbbcfdac Mon Sep 17 00:00:00 2001 From: Linda Andersson Date: Wed, 27 Nov 2013 16:17:47 +0100 Subject: [PATCH 4/5] GL could draw an object but now adding DanBiasGame - problems with dll! --- Code/DanBias.sln | 15 ++ Code/DanBiasGame/DanBiasMaincpp.cpp | 311 +++++++++++++++++++++++ Code/GameLogic/CollisionManager.cpp | 2 + Code/GameLogic/Game.cpp | 15 +- Code/GameLogic/Game.h | 5 +- Code/GameLogic/GameLogic.vcxproj | 26 +- Code/GameLogic/GameLogic.vcxproj.filters | 3 - Code/GameLogic/IGame.cpp | 5 +- Code/GameLogic/IGame.h | 15 +- Code/GameLogic/Object.cpp | 18 +- Code/GameLogic/Object.h | 19 +- Code/GameLogic/Player.cpp | 40 ++- Code/GameLogic/Player.h | 4 +- Code/GameLogic/TestGLMain.cpp | 46 ++-- 14 files changed, 457 insertions(+), 67 deletions(-) create mode 100644 Code/DanBiasGame/DanBiasMaincpp.cpp diff --git a/Code/DanBias.sln b/Code/DanBias.sln index 609eedd3..2e047aee 100644 --- a/Code/DanBias.sln +++ b/Code/DanBias.sln @@ -29,6 +29,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GamePhysics", "GamePhysics\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tester", "Tester\Tester.vcxproj", "{1B3BEA4C-CF75-438A-9693-60FB8444BBF3}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DanBiasGame", "DanBiasGame\DanBiasGame.vcxproj", "{2A1BC987-AF42-4500-802D-89CD32FC1309}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Mixed Platforms = Debug|Mixed Platforms @@ -175,6 +177,7 @@ Global {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Win32.ActiveCfg = Debug|Win32 {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Win32.Build.0 = Debug|Win32 {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|x64.ActiveCfg = Debug|x64 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|x64.Build.0 = Debug|x64 {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Mixed Platforms.ActiveCfg = Release|Win32 {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Mixed Platforms.Build.0 = Release|Win32 {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Win32.ActiveCfg = Release|Win32 @@ -190,6 +193,18 @@ Global {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Release|Win32.ActiveCfg = Release|Win32 {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Release|Win32.Build.0 = Release|Win32 {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Release|x64.ActiveCfg = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Win32.ActiveCfg = Debug|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Win32.Build.0 = Debug|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|x64.ActiveCfg = Debug|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|x64.Build.0 = Debug|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Mixed Platforms.Build.0 = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Win32.ActiveCfg = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Win32.Build.0 = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|x64.ActiveCfg = Release|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Code/DanBiasGame/DanBiasMaincpp.cpp b/Code/DanBiasGame/DanBiasMaincpp.cpp new file mode 100644 index 00000000..4eebe2ad --- /dev/null +++ b/Code/DanBiasGame/DanBiasMaincpp.cpp @@ -0,0 +1,311 @@ +//-------------------------------------------------------------------------------------- +// File: TemplateMain.cpp +// +// BTH-D3D-Template +// +// Copyright (c) Stefan Petersson 2011. All rights reserved. +//-------------------------------------------------------------------------------------- +#define NOMINMAX +#include + +#include "DllInterfaces/GFXAPI.h" +#include "IGame.h" + +#include "L_inputClass.h" + +// debug window include +#include +#include +#include +#include + + + + +//-------------------------------------------------------------------------------------- +// Global Variables +//-------------------------------------------------------------------------------------- +HINSTANCE g_hInst = NULL; +HWND g_hWnd = NULL; + +GameLogic::IGame* game; +InputClass* inputObj; + + +//-------------------------------------------------------------------------------------- +// Forward declarations +//-------------------------------------------------------------------------------------- +HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow ); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +HRESULT Render(float deltaTime); +HRESULT Update(float deltaTime); +HRESULT InitGame(); +HRESULT CleanUp(); + + + +//-------------------------------------------------------------------------------------- +// Entry point to the program. Initializes everything and goes into a message processing +// loop. Idle time is used to render the scene. +//-------------------------------------------------------------------------------------- + +void SetStdOutToNewConsole() +{ + // allocate a console for this app + AllocConsole(); + + // redirect unbuffered STDOUT to the console + HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); + int fileDescriptor = _open_osfhandle((intptr_t)consoleHandle, _O_TEXT); + FILE *fp = _fdopen( fileDescriptor, "w" ); + *stdout = *fp; + setvbuf( stdout, NULL, _IONBF, 0 ); + + // give the console window a nicer title + + SetConsoleTitle(L"Debug Output"); + + // give the console window a bigger buffer size + CONSOLE_SCREEN_BUFFER_INFO csbi; + if ( GetConsoleScreenBufferInfo(consoleHandle, &csbi) ) + { + COORD bufferSize; + bufferSize.X = csbi.dwSize.X; + bufferSize.Y = 50; + SetConsoleScreenBufferSize(consoleHandle, bufferSize); + } +} + +int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow ) +{ + SetDllDirectory(L"..\\DLL\\"); + typedef struct tagLOADPARMS32 { + LPSTR lpEnvAddress; // address of environment strings + LPSTR lpCmdLine; // address of command line + LPSTR lpCmdShow; // how to show new program + DWORD dwReserved; // must be zero + } LOADPARMS32; + LOADPARMS32 p; + memset(&p, 0, sizeof(LOADPARMS32)); + p.lpEnvAddress = ""; + p.lpCmdLine = ""; + p.lpCmdShow = ""; + p.dwReserved = 0; + DWORD ret = LoadModule("OysterGraphics_x86D.dll", &p); + ret = LoadModule("GameLogic_x86D.dll", &p); + + + if( FAILED( InitWindow( hInstance, nCmdShow ) ) ) + return 0; + + if( FAILED( InitGame() ) ) + return 0; + + __int64 cntsPerSec = 0; + QueryPerformanceFrequency((LARGE_INTEGER*)&cntsPerSec); + float secsPerCnt = 1.0f / (float)cntsPerSec; + + __int64 prevTimeStamp = 0; + QueryPerformanceCounter((LARGE_INTEGER*)&prevTimeStamp); + + //debug window + //SetStdOutToNewConsole(); + // Main message loop + MSG msg = {0}; + while(WM_QUIT != msg.message) + { + if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE) ) + { + TranslateMessage( &msg ); + DispatchMessage( &msg ); + } + else + { + __int64 currTimeStamp = 0; + QueryPerformanceCounter((LARGE_INTEGER*)&currTimeStamp); + float dt = (currTimeStamp - prevTimeStamp) * secsPerCnt; + + //render + Update(dt); + Render(dt); + + prevTimeStamp = currTimeStamp; + } + } + CleanUp(); + return (int) msg.wParam; +} + +//-------------------------------------------------------------------------------------- +// Register class and create window +//-------------------------------------------------------------------------------------- +HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow ) +{ + // Register class + WNDCLASSEX wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = 0; + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = NULL; + wcex.lpszClassName = L"BTH_D3D_Template"; + wcex.hIconSm = 0; + if( !RegisterClassEx(&wcex) ) + return E_FAIL; + + // Adjust and create window + g_hInst = hInstance; + RECT rc = { 0, 0, 1024, 768 }; + AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE ); + + if(!(g_hWnd = CreateWindow( + L"BTH_D3D_Template", + L"BTH - Direct3D 11.0 Template", + WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, + CW_USEDEFAULT, + rc.right - rc.left, + rc.bottom - rc.top, + NULL, + NULL, + hInstance, + NULL))) + { + return E_FAIL; + } + + ShowWindow( g_hWnd, nCmdShow ); + + return S_OK; +} + + +HRESULT InitGame() +{ + inputObj = new InputClass; + if(!inputObj->Initialize(g_hInst, g_hWnd, 1024, 768)) + { + MessageBox(0, L"Could not initialize the input object.", L"Error", MB_OK); + return false; + } + if(Oyster::Graphics::API::Init(g_hWnd, false, false, Oyster::Math::Float2( 1024, 768)) != Oyster::Graphics::API::Sucsess) + return E_FAIL; + + + game = new GameLogic::IGame(); + game->Init(); + game->StartGame(); + + + + return S_OK; +} +HRESULT Update(float deltaTime) +{ + inputObj->Update(); + GameLogic::keyInput key = GameLogic::keyInput_none; + + if(inputObj->IsKeyPressed(DIK_W)) + { + key = GameLogic::keyInput_W; + } + else if(inputObj->IsKeyPressed(DIK_A)) + { + key = GameLogic::keyInput_A; + } + else if(inputObj->IsKeyPressed(DIK_S)) + { + key = GameLogic::keyInput_S; + } + else if(inputObj->IsKeyPressed(DIK_D)) + { + key = GameLogic::keyInput_D; + } + + game->Update(key); + + return S_OK; +} + +HRESULT Render(float deltaTime) +{ + int isPressed = 0; + if(inputObj->IsKeyPressed(DIK_A)) + { + isPressed = 1; + //std::cout<<"test"; + } + + // test view and projection matrix + Oyster::Math::Float3 dir = Oyster::Math::Float3(0,0,-1); + Oyster::Math::Float3 up =Oyster::Math::Float3(0,1,0); + Oyster::Math::Float3 pos = Oyster::Math::Float3(0, 0, 100); + + Oyster::Math::Float4x4 view =Oyster::Math3D::OrientationMatrix_LookAtDirection(dir, up, pos); + view = view.GetInverse(); + + Oyster::Math::Float4x4 proj = Oyster::Math3D::ProjectionMatrix_Perspective(3.14f/2, 1024/768, 1, 1000); + + Oyster::Graphics::API::NewFrame(view, proj); + + game->Render(); + wchar_t title[255]; + swprintf(title, sizeof(title), L"| Pressing A: %d | \n", (int)(isPressed)); + SetWindowText(g_hWnd, title); + + Oyster::Graphics::API::EndFrame(); + + return S_OK; +} + +HRESULT CleanUp() +{ + + if(game) + { + delete game; + game = NULL; + } + return S_OK; +} +//-------------------------------------------------------------------------------------- +// Called every time the application receives a message +//-------------------------------------------------------------------------------------- +LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) +{ + PAINTSTRUCT ps; + HDC hdc; + + switch (message) + { + case WM_PAINT: + hdc = BeginPaint(hWnd, &ps); + EndPaint(hWnd, &ps); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + case WM_KEYDOWN: + + switch(wParam) + { + case VK_ESCAPE: + PostQuitMessage(0); + break; + } + break; + + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + + return 0; +} + diff --git a/Code/GameLogic/CollisionManager.cpp b/Code/GameLogic/CollisionManager.cpp index 5994dc89..cc5b75e2 100644 --- a/Code/GameLogic/CollisionManager.cpp +++ b/Code/GameLogic/CollisionManager.cpp @@ -28,6 +28,8 @@ void CollisionManager::ColisionEvent(Oyster::Physics::ICustomBody &obj1, Oyster: PlayerVBox(*((Player*)realObj1),*((DynamicObject*)realObj2)); } + + break; case Object::OBJECT_TYPE_BOX: diff --git a/Code/GameLogic/Game.cpp b/Code/GameLogic/Game.cpp index 6b1fb0d9..5b3af050 100644 --- a/Code/GameLogic/Game.cpp +++ b/Code/GameLogic/Game.cpp @@ -9,7 +9,12 @@ Game::Game(void) Game::~Game(void) { - SAFE_DELETE(player); + //SAFE_DELETE(player); + if(player) + { + delete player; + player = NULL; + } } void Game::Init() @@ -20,11 +25,13 @@ void Game::StartGame() { } -void Game::Update() +void Game::Update(keyInput keyPressed) { - player->Update(); + player->Update(keyPressed); } void Game::Render() { - player->Render(); + Oyster::Graphics::Model::Model* model_Arr; + model_Arr = player->Render(); + Oyster::Graphics::API::RenderScene(model_Arr, 1); } \ No newline at end of file diff --git a/Code/GameLogic/Game.h b/Code/GameLogic/Game.h index 2d808388..ab2e57e5 100644 --- a/Code/GameLogic/Game.h +++ b/Code/GameLogic/Game.h @@ -3,9 +3,12 @@ #include "Level.h" #include "Player.h" +#include "IGame.h" namespace GameLogic { + + class Game { public: @@ -14,7 +17,7 @@ namespace GameLogic void Init(); void StartGame(); - void Update(); + void Update(keyInput keyPressed); void Render(); diff --git a/Code/GameLogic/GameLogic.vcxproj b/Code/GameLogic/GameLogic.vcxproj index 2d2ee4ef..8272f4eb 100644 --- a/Code/GameLogic/GameLogic.vcxproj +++ b/Code/GameLogic/GameLogic.vcxproj @@ -24,7 +24,7 @@ - Application + DynamicLibrary true v110 Unicode @@ -33,21 +33,21 @@ DynamicLibrary true v110 - MultiByte + Unicode DynamicLibrary false v110 true - MultiByte + Unicode DynamicLibrary false v110 true - MultiByte + Unicode @@ -69,25 +69,26 @@ $(SolutionDir)..\Bin\DLL\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName)D - C:\Users\Linda Andersson\Desktop\spel\git\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath) + $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath) + .dll $(SolutionDir)..\Bin\DLL\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName) - $(SolutionDir)..\Bin\DLL;$(LibraryPath) + $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath) $(SolutionDir)..\Bin\DLL\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName)D - $(SolutionDir)..\Bin\DLL;$(LibraryPath) + $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath) $(SolutionDir)..\Bin\DLL\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName) - $(SolutionDir)..\Bin\DLL;$(LibraryPath) + $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath) @@ -99,7 +100,7 @@ true - Input_$(PlatformShortName)D.lib;GamePhysics_$(PlatformShortName)D.lib;%(AdditionalDependencies) + OysterGraphics_$(PlatformShortName)D.lib;Input_$(PlatformShortName)D.lib;GamePhysics_$(PlatformShortName)D.lib;%(AdditionalDependencies) @@ -112,7 +113,7 @@ true - Input_$(PlatformShortName)D.lib;GamePhysics_$(PlatformShortName)D.lib;%(AdditionalDependencies) + OysterGraphics_$(PlatformShortName)D.lib;Input_$(PlatformShortName)D.lib;GamePhysics_$(PlatformShortName)D.lib;%(AdditionalDependencies) @@ -129,7 +130,7 @@ true true true - Input_$(PlatformShortName).lib;GamePhysics_$(PlatformShortName).lib;%(AdditionalDependencies) + OysterGraphics_$(PlatformShortName).lib;Input_$(PlatformShortName).lib;GamePhysics_$(PlatformShortName).lib;%(AdditionalDependencies) @@ -146,7 +147,7 @@ true true true - Input_$(PlatformShortName).lib;GamePhysics_$(PlatformShortName).lib;%(AdditionalDependencies) + OysterGraphics_$(PlatformShortName).lib;Input_$(PlatformShortName).lib;GamePhysics_$(PlatformShortName).lib;%(AdditionalDependencies) @@ -194,7 +195,6 @@ - diff --git a/Code/GameLogic/GameLogic.vcxproj.filters b/Code/GameLogic/GameLogic.vcxproj.filters index 86e9fa9c..21499b29 100644 --- a/Code/GameLogic/GameLogic.vcxproj.filters +++ b/Code/GameLogic/GameLogic.vcxproj.filters @@ -68,9 +68,6 @@ Source Files - - Source Files - Source Files diff --git a/Code/GameLogic/IGame.cpp b/Code/GameLogic/IGame.cpp index 8fe25170..883a9285 100644 --- a/Code/GameLogic/IGame.cpp +++ b/Code/GameLogic/IGame.cpp @@ -8,6 +8,7 @@ BOOL WINAPI DllMain( _In_ LPVOID lpvReserved ) { + return TRUE; } using namespace GameLogic; @@ -30,9 +31,9 @@ void IGame::StartGame() { gameModule->StartGame(); } -void IGame::Update() +void IGame::Update(keyInput keyPressed) { - gameModule->Update(); + gameModule->Update(keyPressed); } void IGame::Render() { diff --git a/Code/GameLogic/IGame.h b/Code/GameLogic/IGame.h index 4d43a1e4..582eac90 100644 --- a/Code/GameLogic/IGame.h +++ b/Code/GameLogic/IGame.h @@ -12,6 +12,15 @@ namespace GameLogic { class Game; + + enum keyInput + { + keyInput_W, + keyInput_A, + keyInput_S, + keyInput_D, + keyInput_none + }; class GAME_DLL_USAGE IGame { @@ -21,9 +30,13 @@ namespace GameLogic IGame(); ~IGame(); + void Init(); void StartGame(); - void Update(); + /************************************************************************/ + /* Get key input to update the player */ + /************************************************************************/ + void Update(keyInput keyPressed); void Render(); Game* getGameModule(); private: diff --git a/Code/GameLogic/Object.cpp b/Code/GameLogic/Object.cpp index e9c8db7a..53af4c22 100644 --- a/Code/GameLogic/Object.cpp +++ b/Code/GameLogic/Object.cpp @@ -5,15 +5,16 @@ using namespace GameLogic; using namespace Oyster::Math; -using namespace Oyster::Graphics::Render; +using namespace Oyster::Graphics::Model; using namespace Utility::DynamicMemory; Object::Object(void) { model = new Model(); + model = Oyster::Graphics::API::CreateModel(L"bth.obj"); - struct float4 + /*struct float4 { float x,y,z,w; }; @@ -46,18 +47,21 @@ Object::Object(void) model->World = &matrix; model->info = modelInfo; - model->Visible = true; + model->Visible = true;*/ } Object::~Object(void) { - SAFE_DELETE(model->info); + //SAFE_DELETE(model->info); + + Oyster::Graphics::API::DeleteModel(model); } -void Object::Render() +Model* Object::Render() { - model->info->Vertices.Apply(0); - Oyster::Graphics::Core::deviceContext->Draw(model->info->VertexCount,0); + //model->info->Vertices.Apply(0); + this->rigidBody->GetOrientation(model->WorldMatrix); + return model; } Object::OBJECT_TYPE Object::GetType() diff --git a/Code/GameLogic/Object.h b/Code/GameLogic/Object.h index 6ee07df5..426fae82 100644 --- a/Code/GameLogic/Object.h +++ b/Code/GameLogic/Object.h @@ -1,20 +1,17 @@ #ifndef OBJECT_H #define OBJECT_H -#include "Model/Model.h" -#include "Render/Rendering/Render.h" -#include "Utilities.h" #include "PhysicsAPI.h" +#include "DllInterfaces/GFXAPI.h" + +#include "Model/Model.h" +#include "Utilities.h" + namespace GameLogic { - - class Object { - - - public: Object(void); virtual ~Object(void); @@ -25,7 +22,7 @@ namespace GameLogic OBJECT_TYPE_BOX, }; - void Render(); + Oyster::Graphics::Model::Model* Render(); OBJECT_TYPE GetType(); @@ -36,8 +33,8 @@ namespace GameLogic //either a model pointer or an ID to an arraypos filled with models that are to be rendered //rigidBody - Utility::DynamicMemory::UniquePointer rigidBody; - Utility::DynamicMemory::UniquePointer model; + Oyster::Physics::ICustomBody* rigidBody; + Oyster::Graphics::Model::Model* model; }; } diff --git a/Code/GameLogic/Player.cpp b/Code/GameLogic/Player.cpp index b67c889a..f507e581 100644 --- a/Code/GameLogic/Player.cpp +++ b/Code/GameLogic/Player.cpp @@ -13,24 +13,52 @@ Player::Player(void) :Object() { life = 100; - - rigidBody = API::Instance().CreateSimpleRigidBody(); - API::Instance().AddObject(rigidBody); + + Oyster::Physics::ICustomBody* temp = rigidBody = API::Instance().CreateSimpleRigidBody().Release(); + + rigidBody->SetCenter(Oyster::Math::Float3(50,0,0)); + rigidBody->SetMass_KeepMomentum(30); + rigidBody->SetSize(Oyster::Math::Float3(2,2,2)); + rigidBody->SetSubscription(true); + rigidBody->SetMomentOfInertiaTensor_KeepMomentum(Oyster::Math::Float4x4( Oyster::Physics::MomentOfInertia::CreateCuboidMatrix(30, 2, 2, 2))); + + //API::Instance().AddObject(temp); } Player::~Player(void) { - + delete this->rigidBody; } -void Player::Update() +void Player::Update(keyInput keyPressed) { + if(keyPressed != keyInput_none) + { + Move(); + + if(keyPressed == keyInput_A) + { + Oyster::Math::Float3 pos = this->rigidBody->GetCenter(); + pos.x -= 0.1; + rigidBody->SetCenter(pos); + } + if(keyPressed == keyInput_D) + { + Oyster::Math::Float3 pos = this->rigidBody->GetCenter(); + pos.x += 0.1; + rigidBody->SetCenter(pos); + } + } } void Player::Move() { - + //API::Instance().Update(); + /*Oyster::Math::Float3 pos = this->rigidBody->GetCenter(); + pos.x += 0.1; + rigidBody->SetCenter(pos);*/ + //API::Instance().SetCenter(rigidBody, pos); } void Player::Shoot() { diff --git a/Code/GameLogic/Player.h b/Code/GameLogic/Player.h index 39deb4b2..0e6f39b5 100644 --- a/Code/GameLogic/Player.h +++ b/Code/GameLogic/Player.h @@ -3,10 +3,12 @@ #include "Object.h" #include "Weapon.h" +#include "IGame.h" namespace GameLogic { + class Player : public Object { @@ -15,7 +17,7 @@ namespace GameLogic Player(void); ~Player(void); - void Update(); + void Update(keyInput keyPressed); void Move(); void Shoot(); diff --git a/Code/GameLogic/TestGLMain.cpp b/Code/GameLogic/TestGLMain.cpp index 4bff2956..8cf34e5f 100644 --- a/Code/GameLogic/TestGLMain.cpp +++ b/Code/GameLogic/TestGLMain.cpp @@ -8,7 +8,7 @@ #define NOMINMAX #include #include "Core/Core.h" -#include "Render\Preparations\Preparations.h" +#include "DllInterfaces/GFXAPI.h" #include "IGame.h" #include "L_inputClass.h" @@ -94,7 +94,9 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdL __int64 prevTimeStamp = 0; QueryPerformanceCounter((LARGE_INTEGER*)&prevTimeStamp); - SetStdOutToNewConsole(); + + //debugwindow + //SetStdOutToNewConsole(); // Main message loop MSG msg = {0}; while(WM_QUIT != msg.message) @@ -176,7 +178,7 @@ HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow ) //-------------------------------------------------------------------------------------- HRESULT InitDirect3D() { - HRESULT hr = S_OK;; + /*HRESULT hr = S_OK;; Oyster::Graphics::Core::resolution = Oyster::Math::Float2( 1024, 768 ); @@ -208,16 +210,16 @@ HRESULT InitDirect3D() Oyster::Graphics::Render::Preparations::Basic::BindBackBufferRTV(); - Oyster::Graphics::Render::Preparations::Basic::SetViewPort(); + Oyster::Graphics::Render::Preparations::Basic::SetViewPort();*/ return S_OK; } HRESULT InitGame() { - game = new GameLogic::IGame(); - game->Init(); - game->StartGame(); + + if(Oyster::Graphics::API::Init(g_hWnd, false, false, Oyster::Math::Float2( 1024, 768)) != Oyster::Graphics::API::Sucsess) + return E_FAIL; inputObj = new InputClass; if(!inputObj->Initialize(g_hInst, g_hWnd, 1024, 768)) @@ -225,6 +227,11 @@ HRESULT InitGame() MessageBox(0, L"Could not initialize the input object.", L"Error", MB_OK); return false; } + game = new GameLogic::IGame(); + game->Init(); + game->StartGame(); + + return S_OK; } @@ -261,24 +268,27 @@ HRESULT Render(float deltaTime) if(inputObj->IsKeyPressed(DIK_A)) { isPressed = 1; - std::cout<<"knon"; + //std::cout<<"test"; } - //Oyster::Graphics::Render::Rendering::Basic::NewFrame(); - Oyster::Graphics::Render::Preparations::Basic::ClearBackBuffer(Oyster::Math::Float4(0,0,1,1)); - + + // test view and projection matrix + Oyster::Math::Float3 dir = Oyster::Math::Float3(0,0,-1); + Oyster::Math::Float3 up =Oyster::Math::Float3(0,1,0); + Oyster::Math::Float3 pos = Oyster::Math::Float3(0, 0, 100); + + Oyster::Math::Float4x4 view =Oyster::Math3D::OrientationMatrix_LookAtDirection(dir, up, pos); + view = view.GetInverse(); + + Oyster::Math::Float4x4 proj = Oyster::Math3D::ProjectionMatrix_Perspective(PI/2, 1024/768, 1, 1000); + + Oyster::Graphics::API::NewFrame(view, proj); game->Render(); - //Oyster::Graphics::Core::deviceContext->Draw(3,0); - - //Oyster::Graphics::Render::Rendering::Basic::EndFrame(); wchar_t title[255]; - - //swprintf(title, L"| FPS: %d \n",(int)(isPressed)); swprintf(title, sizeof(title), L"| Pressing A: %d | \n", (int)(isPressed)); SetWindowText(g_hWnd, title); - - Oyster::Graphics::Core::swapChain->Present(0,0); + Oyster::Graphics::API::EndFrame(); return S_OK; } From 01515a4d2d309cfebf4e3dab3ad68787f93050e1 Mon Sep 17 00:00:00 2001 From: Linda Andersson Date: Wed, 27 Nov 2013 16:21:57 +0100 Subject: [PATCH 5/5] merge with physics --- Code/DanBiasGame/DanBiasMaincpp.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Code/DanBiasGame/DanBiasMaincpp.cpp b/Code/DanBiasGame/DanBiasMaincpp.cpp index 4eebe2ad..df10baec 100644 --- a/Code/DanBiasGame/DanBiasMaincpp.cpp +++ b/Code/DanBiasGame/DanBiasMaincpp.cpp @@ -86,14 +86,24 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdL DWORD dwReserved; // must be zero } LOADPARMS32; LOADPARMS32 p; - memset(&p, 0, sizeof(LOADPARMS32)); p.lpEnvAddress = ""; p.lpCmdLine = ""; p.lpCmdShow = ""; p.dwReserved = 0; - DWORD ret = LoadModule("OysterGraphics_x86D.dll", &p); - ret = LoadModule("GameLogic_x86D.dll", &p); + DWORD ret = 1; + ret = LoadModule("OysterGraphics_x86D.dll", &p); + if( ret == 0) + { + // error + return 0; + } + ret = LoadModule("GameLogic_x86D.dll", &p); + if( ret == 0) + { + // error + return 0; + } if( FAILED( InitWindow( hInstance, nCmdShow ) ) ) return 0;