diff --git a/Code/DanBias.sln b/Code/DanBias.sln index e14d2c37..033e050e 100644 --- a/Code/DanBias.sln +++ b/Code/DanBias.sln @@ -47,6 +47,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Utilities", "Misc\Utilities EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LevelLoader", "Game\LevelLoader\LevelLoader.vcxproj", "{6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameServerDebugEnvironment", "Game\LanServer\GameServerDebugEnvironment\GameServerDebugEnvironment.vcxproj", "{67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -715,6 +717,40 @@ Global {6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}.RelWithDebInfo|x64.ActiveCfg = Release|Win32 {6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}.RelWithDebInfo|x86.ActiveCfg = Release|Win32 {6391E709-D9FA-4FEF-A3B9-4343DB5A0C63}.RelWithDebInfo|x86.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Win32.ActiveCfg = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|Win32.Build.0 = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|x64.ActiveCfg = Debug|x64 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|x64.Build.0 = Debug|x64 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|x86.ActiveCfg = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Debug|x86.Build.0 = Debug|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Any CPU.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|Win32.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|x64.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|x86.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.MinSizeRel|x86.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Any CPU.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Mixed Platforms.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Win32.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|Win32.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|x64.ActiveCfg = Release|x64 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|x64.Build.0 = Release|x64 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|x86.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.Release|x86.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|x64.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|x86.ActiveCfg = Release|Win32 + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE}.RelWithDebInfo|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -737,5 +773,6 @@ Global {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE} = {1322B12B-5E37-448A-AAAF-F637460DCB23} {604A12A7-07BF-4482-BDF3-7101C811F121} = {C83A6FAD-E71F-4B1E-9D63-E93E61DDC012} {C8CBA520-5D7D-4D61-A8DA-6E05FD132BCB} = {C83A6FAD-E71F-4B1E-9D63-E93E61DDC012} + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE} = {C83A6FAD-E71F-4B1E-9D63-E93E61DDC012} EndGlobalSection EndGlobal diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 763563ff..462422a6 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -192,47 +192,49 @@ bool GameState::Render() light->second->Render(); }*/ - // RB DEBUG render wire frame - if(this->privData->renderWhireframe) - { - Oyster::Graphics::API::StartRenderWireFrame(); - - Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(Float3( 0,132, 20)); - Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(Float3( 0.5f, 0.5f, 0.5f)); - Oyster::Math3D::Float4x4 world = translation * scale; - Oyster::Graphics::API::RenderDebugCube( world ); - Oyster::Graphics::API::RenderDebugCube(this->privData->player.getRBWorld()); - - staticObject = this->privData->staticObjects->begin(); - for( ; staticObject != this->privData->staticObjects->end(); ++staticObject ) +#ifdef _DEBUG + //RB DEBUG render wire frame + if(this->privData->renderWhireframe) { - if( staticObject->second->getBRtype() == RB_Type_Cube) + Oyster::Graphics::API::StartRenderWireFrame(); + + Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(Float3( 0,132, 20)); + Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(Float3( 0.5f, 0.5f, 0.5f)); + Oyster::Math3D::Float4x4 world = translation * scale; + Oyster::Graphics::API::RenderDebugCube( world ); + Oyster::Graphics::API::RenderDebugCube(this->privData->player.getRBWorld()); + + staticObject = this->privData->staticObjects->begin(); + for( ; staticObject != this->privData->staticObjects->end(); ++staticObject ) { - Oyster::Graphics::API::RenderDebugCube( staticObject->second->getRBWorld()); - } - if( staticObject->second->getBRtype() == RB_Type_Sphere) - { - Oyster::Graphics::API::RenderDebugSphere( staticObject->second->getRBWorld()); - } - } - - dynamicObject = this->privData->dynamicObjects->begin(); - for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject ) - { - if( dynamicObject->second ) - { - if( dynamicObject->second->getBRtype() == RB_Type_Cube) + if( staticObject->second->getBRtype() == RB_Type_Cube) { - Oyster::Graphics::API::RenderDebugCube( dynamicObject->second->getRBWorld()); + Oyster::Graphics::API::RenderDebugCube( staticObject->second->getRBWorld()); } - if( dynamicObject->second->getBRtype() == RB_Type_Sphere) + if( staticObject->second->getBRtype() == RB_Type_Sphere) { - Oyster::Graphics::API::RenderDebugSphere( dynamicObject->second->getRBWorld()); + Oyster::Graphics::API::RenderDebugSphere( staticObject->second->getRBWorld()); + } + } + + dynamicObject = this->privData->dynamicObjects->begin(); + for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject ) + { + if( dynamicObject->second ) + { + if( dynamicObject->second->getBRtype() == RB_Type_Cube) + { + Oyster::Graphics::API::RenderDebugCube( dynamicObject->second->getRBWorld()); + } + if( dynamicObject->second->getBRtype() == RB_Type_Sphere) + { + Oyster::Graphics::API::RenderDebugSphere( dynamicObject->second->getRBWorld()); + } } } } - } - // !RB DEBUG + //!RB DEBUG +#endif Oyster::Graphics::API::EndFrame(); return true; diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index e3e453ad..8eb65fa8 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -154,7 +154,7 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) { RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.box.position; RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation - RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size*2; + RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size * 2; RBData.type = RB_Type_Cube; staticObject->InitRB( RBData ); } @@ -163,7 +163,7 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) { RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.sphere.position; RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation - RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius*2; + RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius * 2; RBData.type = RB_Type_Sphere; staticObject->InitRB( RBData ); } @@ -198,7 +198,7 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) { RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.box.position; RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation - RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size*2; + RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size * 2; RBData.type = RB_Type_Cube; dynamicObject->InitRB( RBData ); } @@ -207,7 +207,7 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) { RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.sphere.position; RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation - RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius*2; + RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius * 2; RBData.type = RB_Type_Sphere; dynamicObject->InitRB( RBData ); } diff --git a/Code/Game/GameLogic/Game.cpp b/Code/Game/GameLogic/Game.cpp index 837a3c1c..8dd7ffa6 100644 --- a/Code/Game/GameLogic/Game.cpp +++ b/Code/Game/GameLogic/Game.cpp @@ -125,7 +125,6 @@ bool Game::NewFrame() { if(this->players[i] && this->players[i]->player) this->players[i]->player->EndFrame(); } - return true; } diff --git a/Code/Game/GameLogic/Game_PlayerData.cpp b/Code/Game/GameLogic/Game_PlayerData.cpp index a79b2a9f..ed964724 100644 --- a/Code/Game/GameLogic/Game_PlayerData.cpp +++ b/Code/Game/GameLogic/Game_PlayerData.cpp @@ -5,36 +5,37 @@ using namespace GameLogic; Game::PlayerData::PlayerData() { - //set some stats that are appropriate to a player - - Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,180,0); - - Oyster::Math::Float3 size = Oyster::Math::Float3(0.25f,2.0f,0.5f); - Oyster::Math::Float mass = 60; + Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,250,0); + Oyster::Math::Float height = 2.0f; + Oyster::Math::Float radius = 0.5f; + Oyster::Math::Float mass = 40; Oyster::Math::Float restitutionCoeff = 0.5f; Oyster::Math::Float frictionCoeff_Static = 0.4f; Oyster::Math::Float frictionCoeff_Dynamic = 0.3f; - //sbDesc.quaternion = Oyster::Math::Float3(0, Oyster::Math::pi, 0); //create rigid body - Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCollisionBox(size, Oyster::Math::Float4(0, 0, 0, 1), centerPosition, mass, 0.5f, 0.8f, 0.6f ); + Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCharacter( height, radius, Oyster::Math::Float4(0, 0, 0, 1), + centerPosition, mass, restitutionCoeff, + frictionCoeff_Static, frictionCoeff_Dynamic ); rigidBody->SetAngularFactor(0.0f); //create player with this rigid body - this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player,0,0); + this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player, 0, 0); } Game::PlayerData::PlayerData(int playerID,int teamID) { - Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,180,0); - Oyster::Math::Float3 size = Oyster::Math::Float3(0.25f,2.0f,0.5f); - Oyster::Math::Float mass = 60; + Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,250,0); + Oyster::Math::Float height = 2.0f; + Oyster::Math::Float radius = 0.5f; + Oyster::Math::Float mass = 40; Oyster::Math::Float restitutionCoeff = 0.5f; Oyster::Math::Float frictionCoeff_Static = 0.4f; Oyster::Math::Float frictionCoeff_Dynamic = 0.3f; - //sbDesc.quaternion = Oyster::Math::Float3(0, Oyster::Math::pi, 0); //create rigid body - Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCollisionBox(size, Oyster::Math::Float4(0, 0, 0, 1), centerPosition, mass, 0.5f, 0.8f, 0.6f ); + Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCharacter( height, radius, Oyster::Math::Float4(0, 0, 0, 1), + centerPosition, mass, restitutionCoeff, + frictionCoeff_Static, frictionCoeff_Dynamic ); rigidBody->SetAngularFactor(0.0f); //create player with this rigid body this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player,playerID,teamID); diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index 0a207d2b..82cd4364 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -4,6 +4,7 @@ #include "JumpPad.h" #include "ExplosiveCrate.h" #include "Portal.h" +#include //Conversion from wstring to string #include @@ -22,7 +23,7 @@ Level::~Level(void) delete this->levelObj; this->levelObj = NULL; } -Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) +Object* Level::CreateGameObj(ObjectHeader* obj, ICustomBody* rigidBody) { Object* gameObj = NULL; @@ -55,6 +56,7 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) { gameObj = new StaticObject(rigidBody, Object::DefaultOnCollision, (ObjectSpecialType)obj->specialTypeID, objID); } + break; case ObjectSpecialType_Stone: { gameObj = new DynamicObject(rigidBody, Object::DefaultOnCollision, (ObjectSpecialType)obj->specialTypeID, objID); @@ -261,7 +263,7 @@ bool Level::InitiateLevel(std::wstring levelPath) if(rigidBody_Static != NULL) { // create game object - Object* staticGameObj = createGameObj(staticObjData, rigidBody_Static); + Object* staticGameObj = CreateGameObj(staticObjData, rigidBody_Static); if(staticGameObj != NULL) { this->staticObjects.Push((StaticObject*)staticGameObj); @@ -295,7 +297,7 @@ bool Level::InitiateLevel(std::wstring levelPath) if(rigidBody_Dynamic != NULL) { // create game object - Object* dynamicGameObj = createGameObj(dynamicObjData, rigidBody_Dynamic); + Object* dynamicGameObj = CreateGameObj(dynamicObjData, rigidBody_Dynamic); if (dynamicGameObj != NULL) { this->dynamicObjects.Push((DynamicObject*)dynamicGameObj); diff --git a/Code/Game/GameLogic/Level.h b/Code/Game/GameLogic/Level.h index fb26280c..9dce227d 100644 --- a/Code/Game/GameLogic/Level.h +++ b/Code/Game/GameLogic/Level.h @@ -35,7 +35,7 @@ namespace GameLogic Oyster::Physics::ICustomBody* InitRigidBodyCube( const ObjectHeader* obj); Oyster::Physics::ICustomBody* InitRigidBodySphere( const ObjectHeader* obj); - Object* createGameObj(ObjectHeader* obj, Oyster::Physics::ICustomBody* rigidBody); + Object* CreateGameObj(ObjectHeader* obj, Oyster::Physics::ICustomBody* rigidBody); /******************************************************** * Creates a team in the level * @param teamSize: The size of the team you want to create diff --git a/Code/Game/GameLogic/Player.cpp b/Code/Game/GameLogic/Player.cpp index b067d036..93ba37be 100644 --- a/Code/Game/GameLogic/Player.cpp +++ b/Code/Game/GameLogic/Player.cpp @@ -27,6 +27,8 @@ Player::Player(Oyster::Physics::ICustomBody *rigidBody, void (*EventOnCollision) key_backward = 0; key_strafeRight = 0; key_strafeLeft = 0; + key_jump = 0; + invincibleCooldown = 0; this->previousPosition = Oyster::Math::Float3(0,0,0); @@ -50,6 +52,8 @@ Player::Player(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustom key_backward = 0; key_strafeRight = 0; key_strafeLeft = 0; + key_jump = 0; + invincibleCooldown = 0; this->previousPosition = Oyster::Math::Float3(0,0,0); this->moveDir = Oyster::Math::Float3(0,0,0); @@ -71,12 +75,12 @@ Player::~Player(void) void Player::BeginFrame() { //weapon->Update(0.002f); - Object::BeginFrame(); + //Object::BeginFrame(); Oyster::Math::Float maxSpeed = 30; - Oyster::Math::Float4x4 xform; - xform = this->rigidBody->GetState().GetOrientation(); + /*Oyster::Math::Float4x4 xform; + xform = this->rigidBody->GetState().GetOrientation();*/ /* Handle turning */ /*if (left) @@ -86,11 +90,11 @@ void Player::BeginFrame() //xform.setRotation (btQuaternion (btVector3(0.0, 1.0, 0.0), m_turnAngle)); - Oyster::Math::Float3 linearVelocity = this->rigidBody->GetLinearVelocity(); + Oyster::Math::Float3 linearVelocity(0,0,0); // = this->rigidBody->GetLinearVelocity(); Oyster::Math::Float speed = this->rigidBody->GetLinearVelocity().GetLength(); - Oyster::Math::Float3 forwardDir = xform.v[2]; - Oyster::Math::Float3 rightDir = xform.v[0]; + Oyster::Math::Float3 forwardDir(0,0,1); //= xform.v[2]; + Oyster::Math::Float3 rightDir(1,0,0); // = xform.v[0]; forwardDir.Normalize(); rightDir.Normalize(); Oyster::Math::Float3 walkDirection = Oyster::Math::Float3(0.0, 0.0, 0.0); @@ -98,50 +102,50 @@ void Player::BeginFrame() if (key_forward > 0.001) { - key_forward -= gameInstance->GetFrameTime(); - walkDirection += forwardDir; - walkDirection.Normalize(); + key_forward -= gameInstance->GetFrameTime(); + walkDirection += forwardDir; + walkDirection.Normalize(); } if (key_backward > 0.001) { - key_backward -= gameInstance->GetFrameTime(); - walkDirection -= forwardDir; - walkDirection.Normalize(); + key_backward -= gameInstance->GetFrameTime(); + walkDirection -= forwardDir; + walkDirection.Normalize(); } if (key_strafeRight > 0.001) { - key_strafeRight -= gameInstance->GetFrameTime(); - walkDirection -= rightDir; - walkDirection.Normalize(); + key_strafeRight -= gameInstance->GetFrameTime(); + walkDirection -= rightDir; + walkDirection.Normalize(); } if (key_strafeLeft > 0.001) { - key_strafeLeft -= gameInstance->GetFrameTime(); - walkDirection += rightDir; - walkDirection.Normalize(); - maxSpeed = 40; + key_strafeLeft -= gameInstance->GetFrameTime(); + walkDirection += rightDir; + walkDirection.Normalize(); + maxSpeed = 40; } - if (key_forward <= 0.001 && key_backward <= 0.001 && key_strafeRight <= 0.001 && key_strafeLeft <= 0.001 && key_jump <= 0.001 && this->rigidBody->GetLambda() < 0.7f) + if (key_forward <= 0.001 && key_backward <= 0.001 && key_strafeRight <= 0.001 && key_strafeLeft <= 0.001 && key_jump <= 0.001 ) //&& this->rigidBody->GetLambda() < 0.7f) { /* Dampen when on the ground and not being moved by the player */ linearVelocity *= 0.2f; - this->rigidBody->SetLinearVelocity (linearVelocity); + //this->rigidBody->SetLinearVelocity (linearVelocity); } - else - { - if (speed < maxSpeed && this->rigidBody->GetLambda() < 1.0f) - { - Oyster::Math::Float3 velocity = linearVelocity + walkDirection * walkSpeed; - this->rigidBody->SetLinearVelocity(velocity); - } - else if(speed < maxSpeed) - { - Oyster::Math::Float3 velocity = linearVelocity + (walkDirection * walkSpeed)*0.2f; - this->rigidBody->SetLinearVelocity(velocity); - } - } + //else + //{ + // if (speed < maxSpeed && this->rigidBody->GetLambda() < 1.0f) + // { + // Oyster::Math::Float3 velocity = linearVelocity + walkDirection * walkSpeed; + // this->rigidBody->SetLinearVelocity(velocity); + // } + // else if(speed < maxSpeed) + // { + // Oyster::Math::Float3 velocity = linearVelocity + (walkDirection * walkSpeed)*0.2f; + // this->rigidBody->SetLinearVelocity(velocity); + // } + //} if (key_jump > 0.001) { @@ -153,8 +157,11 @@ void Player::BeginFrame() this->playerState = PLAYER_STATE::PLAYER_STATE_JUMPING; } } + Oyster::Math::Float3 pos = this->rigidBody->GetState().centerPos; + if(pos.x < -300000) + int i =0; - this->weapon->Update(0.01f); + //this->weapon->Update(0.01f); } void Player::EndFrame() @@ -162,9 +169,9 @@ void Player::EndFrame() // snap to axis Oyster::Math::Float4 rotation; - 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) diff --git a/Code/Game/GameServer/GameClient.h b/Code/Game/GameServer/GameClient.h index 6fcf6b05..497e6c2e 100644 --- a/Code/Game/GameServer/GameClient.h +++ b/Code/Game/GameServer/GameClient.h @@ -22,6 +22,7 @@ namespace DanBias { ClientState_CreatingGame, ClientState_Ready, + ClientState_Invalid, }; public: @@ -41,6 +42,7 @@ namespace DanBias inline GameLogic::IPlayerData* GetPlayer() const { return this->player; } Oyster::Network::NetClient GetClient() const { return this->client; } ClientState GetState() const { return this->state; } + int GetFailedProtocolCount() const { return this->failedPackagesCount; } void SetPlayer(GameLogic::IPlayerData* player); @@ -53,6 +55,10 @@ namespace DanBias GameLogic::IPlayerData* ReleasePlayer(); Oyster::Network::NetClient ReleaseClient(); + void Invalidate(); + int IncrementFailedProtocol(); + void ResetFailedProtocolCount(); + //NetworkSpecific void SetOwner(Oyster::Network::NetworkSession* owner); void UpdateClient(); @@ -62,7 +68,9 @@ namespace DanBias Oyster::Network::NetClient client; bool isReady; + bool isInvalid; float secondsSinceLastResponse; + int failedPackagesCount; std::wstring alias; std::wstring character; diff --git a/Code/Game/GameServer/GameServer.vcxproj b/Code/Game/GameServer/GameServer.vcxproj index 036459fa..a116e332 100644 --- a/Code/Game/GameServer/GameServer.vcxproj +++ b/Code/Game/GameServer/GameServer.vcxproj @@ -198,6 +198,9 @@ + + {f10cbc03-9809-4cba-95d8-327c287b18ee} + {2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee} diff --git a/Code/Game/GameServer/Implementation/DLLMain.cpp b/Code/Game/GameServer/Implementation/DLLMain.cpp index 7adceac7..814a15f1 100644 --- a/Code/Game/GameServer/Implementation/DLLMain.cpp +++ b/Code/Game/GameServer/Implementation/DLLMain.cpp @@ -6,6 +6,5 @@ BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved ) { - return TRUE; } \ No newline at end of file diff --git a/Code/Game/GameServer/Implementation/GameClient.cpp b/Code/Game/GameServer/Implementation/GameClient.cpp index 9c04007f..3293a383 100644 --- a/Code/Game/GameServer/Implementation/GameClient.cpp +++ b/Code/Game/GameServer/Implementation/GameClient.cpp @@ -14,6 +14,8 @@ using namespace GameLogic; GameClient::GameClient(Utility::DynamicMemory::SmartPointer nwClient) { + this->isInvalid = false; + this->failedPackagesCount = 0; this->client = nwClient; this->player = 0; isReady = false; @@ -23,6 +25,7 @@ GameClient::GameClient(Utility::DynamicMemory::SmartPointerclient = 0; this->player = 0; this->isReady = false; this->character = L"crate_colonists.dan"; @@ -55,6 +58,22 @@ void GameClient::SetState(ClientState state) this->state = state; } +void GameClient::Invalidate() +{ + this->isInvalid = true; + this->isReady = false; + this->state = ClientState_Invalid; + this->client->Disconnect(); +} +int GameClient::IncrementFailedProtocol() +{ + this->failedPackagesCount++; + return this->failedPackagesCount; +} +void GameClient::ResetFailedProtocolCount() +{ + this->failedPackagesCount = 0; +} void GameClient::SetOwner(Oyster::Network::NetworkSession* owner) { diff --git a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp index 8cbb542d..53e24739 100644 --- a/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp +++ b/Code/Game/GameServer/Implementation/GameSession_Gameplay.cpp @@ -61,12 +61,15 @@ using namespace DanBias; switch (e.args.type) { case NetworkClient::ClientEventArgs::EventType_Disconnect: + //printf("\t(%i : %s) - EventType_Disconnect\n", cl->GetClient()->GetID(), e.sender->GetIpAddress().c_str()); + this->gClients[temp]->Invalidate(); break; case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToRecieve: break; case NetworkClient::ClientEventArgs::EventType_ProtocolFailedToSend: - printf("\t(%i : %s) - EventType_ProtocolFailedToSend\n", cl->GetClient()->GetID(), e.sender->GetIpAddress().c_str()); - //this->Detach(e.sender); + //printf("\t(%i : %s) - EventType_ProtocolFailedToSend\n", cl->GetClient()->GetID(), e.sender->GetIpAddress().c_str()); + if(this->gClients[temp]->IncrementFailedProtocol() >= 5/*client->threshold*/) + this->gClients[temp]->Invalidate(); break; case NetworkClient::ClientEventArgs::EventType_ProtocolRecieved: //printf("\t(%i : %s) - EventType_ProtocolRecieved\n", cl->GetClient()->GetID(), e.sender->GetIpAddress().c_str()); @@ -128,6 +131,12 @@ using namespace DanBias; int id = movedObject->GetID(); //Protocol_ObjectPosition p(movedObject->GetPosition(), id); Protocol_ObjectPositionRotation p(movedObject->GetPosition(), movedObject->GetRotation(), id); + + Oyster::Math::Float3 temp = movedObject->GetPosition(); + + if(temp.x < -300) + id = 0; + GameSession::gameSession->Send(p.GetProtocol()); //} } diff --git a/Code/GamePhysics/GamePhysics.vcxproj b/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj similarity index 56% rename from Code/GamePhysics/GamePhysics.vcxproj rename to Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj index 07f5aed2..5f715fad 100644 --- a/Code/GamePhysics/GamePhysics.vcxproj +++ b/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj @@ -19,35 +19,36 @@ - {104FA3E9-94D9-4E1D-A941-28A03BC8A095} - GamePhysics + {67D0FB00-FF1F-4DE4-84BD-664AE93D25EE} + Win32Proj + GameServerDebugEnvironment - DynamicLibrary + Application true v110 - MultiByte + Unicode - DynamicLibrary + Application true v110 - MultiByte + Unicode - DynamicLibrary + Application false v110 true - MultiByte + Unicode - DynamicLibrary + Application false v110 true - MultiByte + Unicode @@ -66,104 +67,115 @@ - $(SolutionDir)..\Bin\DLL\ + true + $(SolutionDir)..\Bin\Executable\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName)D - - - $(SolutionDir)..\Bin\DLL\ - $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName) + $(ProjectName)_$(PlatformShortName)_$(Configuration) + $(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath) + C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath) - $(SolutionDir)..\Bin\DLL\ + true + $(SolutionDir)..\Bin\Executable\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName)D + $(ProjectName)_$(PlatformShortName)_$(Configuration) + $(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath) + C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath) + + + false + $(SolutionDir)..\Bin\Executable\ + $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ + $(ProjectName)_$(PlatformShortName)_$(Configuration) + $(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath) + C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath) - $(SolutionDir)..\Bin\DLL\ + false + $(SolutionDir)..\Bin\Executable\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName) + $(ProjectName)_$(PlatformShortName)_$(Configuration) + $(SolutionDir)Game\GameServer\;C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Misc\WindowManager;$(IncludePath) + C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath) + + Level3 Disabled - $(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\ - _WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions) - false + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Windows true - - - $(SolutionDir)Physics/lib/debug/BulletCollision_Debug.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debug.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debug.lib;%(AdditionalDependencies) + GameServer_$(PlatformShortName)D.dll;%(DelayLoadDLLs) + + Level3 Disabled - $(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\ - _WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions) - false + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Windows true - - - $(SolutionDir)Physics/lib/debug/BulletCollision_Debugx64.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debugx64.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debugx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + GameServer_$(PlatformShortName)D.dll;%(DelayLoadDLLs) Level3 + + MaxSpeed true true - $(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\ - _WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions) - false + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Windows true true true - - - $(SolutionDir)Physics/lib/release/BulletCollision.lib;$(SolutionDir)Physics/lib/release/BulletDynamics.lib;$(SolutionDir)Physics/lib/release/LinearMath.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + GameServer_$(PlatformShortName).dll;%(DelayLoadDLLs) Level3 + + MaxSpeed true true - $(SolutionDir)Misc;$(SolutionDir)OysterMath;$(SolutionDir)OysterPhysics3D;$(SolutionDir)Physics\Bullet Source\ - _WINDLL;PHYSICS_DLL_EXPORT;%(PreprocessorDefinitions) - false + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Windows true true true - - - $(SolutionDir)Physics/lib/release/BulletCollisionx64.lib;$(SolutionDir)Physics/lib/release/BulletDynamicsx64.lib;$(SolutionDir)Physics/lib/release/LinearMathx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + GameServer_$(PlatformShortName).dll;%(DelayLoadDLLs) - - - - - + + {35aea3c0-e0a7-4e1e-88cd-514aa5a442b1} + + + {143bd516-20a1-4890-a3e4-f8bfd02220e7} + - - - + diff --git a/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj.user b/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj.user new file mode 100644 index 00000000..ea7197bf --- /dev/null +++ b/Code/Game/LanServer/GameServerDebugEnvironment/GameServerDebugEnvironment.vcxproj.user @@ -0,0 +1,22 @@ + + + + $(OutDir) + WindowsLocalDebugger + + + $(OutDir) + WindowsLocalDebugger + + + $(OutDir) + WindowsLocalDebugger + + + $(OutDir) + WindowsLocalDebugger + + + true + + \ No newline at end of file diff --git a/Code/Game/LanServer/GameServerDebugEnvironment/Source.cpp b/Code/Game/LanServer/GameServerDebugEnvironment/Source.cpp new file mode 100644 index 00000000..f2561a52 --- /dev/null +++ b/Code/Game/LanServer/GameServerDebugEnvironment/Source.cpp @@ -0,0 +1,48 @@ +///////////////////////////////////////////////// +// Launcher to launch Danbias server or client // +///////////////////////////////////////////////// +#define NOMINMAX +#include +#include + +#include +#include + +using namespace DanBias; + +int WINAPI WinMain( HINSTANCE hinst, HINSTANCE prevInst, PSTR cmdLine, int cmdShow) +{ + if(SetDllDirectory(L"..\\DLL") == FALSE) + { + return cmdShow; + } + + WindowShell::CreateConsoleWindow(); + + GameServerAPI::ServerInitDesc desc; + desc.listenPort = 15151; + desc.serverName = L"bla"; + + if(GameServerAPI::ServerInitiate(desc) == DanBiasServerReturn_Sucess) + { + GameServerAPI::ServerStart(); + + GameServerAPI::GameSetGameMode(L"free-for-all"); + GameServerAPI::GameSetGameName(L"DebugServer"); + GameServerAPI::GameSetGameTime(15); + GameServerAPI::GameSetMapName(L"2ofAll.bias"); + GameServerAPI::GameSetMaxClients(10); + + if(GameServerAPI::GameStart(true)) + { + int Q = 0x51; + while ( GetAsyncKeyState(Q) == 0) + { + GameServerAPI::ServerUpdate(); + } + } + GameServerAPI::ServerStop(); + } + + return 0; +} \ No newline at end of file diff --git a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs index d415b92f..b07868f7 100644 --- a/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs +++ b/Code/Game/LanServer/StandAloneLauncher/Form1.Designer.cs @@ -482,7 +482,7 @@ this.tableLayoutPanel1.ColumnCount = 3; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35.29412F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 64.70588F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 112F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 114F)); this.tableLayoutPanel1.Controls.Add(this.label6, 0, 0); this.tableLayoutPanel1.Controls.Add(this.label7, 1, 0); this.tableLayoutPanel1.Controls.Add(this.label8, 2, 0); @@ -507,7 +507,7 @@ // label7 // this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(46, 1); + this.label7.Location = new System.Drawing.Point(45, 1); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(31, 13); this.label7.TabIndex = 8; @@ -516,7 +516,7 @@ // label8 // this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(122, 1); + this.label8.Location = new System.Drawing.Point(120, 1); this.label8.Name = "label8"; this.label8.Size = new System.Drawing.Size(34, 13); this.label8.TabIndex = 8; diff --git a/Code/Game/LevelLoader/LevelLoader.cpp b/Code/Game/LevelLoader/LevelLoader.cpp index 82583696..588c4a34 100644 --- a/Code/Game/LevelLoader/LevelLoader.cpp +++ b/Code/Game/LevelLoader/LevelLoader.cpp @@ -4,6 +4,7 @@ #include "LevelLoader.h" #include "LevelParser.h" +#include using namespace GameLogic; using namespace GameLogic::LevelFileLoader; @@ -29,6 +30,7 @@ LevelLoader::LevelLoader(std::string folderPath) LevelLoader::~LevelLoader() { + Oyster::Resource::OysterResource::Clean(); } std::vector> LevelLoader::LoadLevel(std::string fileName) diff --git a/Code/Network/NetworkAPI/NetworkClient.cpp b/Code/Network/NetworkAPI/NetworkClient.cpp index fc561845..a4bc4581 100644 --- a/Code/Network/NetworkAPI/NetworkClient.cpp +++ b/Code/Network/NetworkAPI/NetworkClient.cpp @@ -48,6 +48,7 @@ struct NetworkClient::PrivateData : public IThreadObject Connection connection; Translator translator; OysterThread thread; + bool outputEvent; OysterByte recieveBuffer; @@ -63,6 +64,7 @@ struct NetworkClient::PrivateData : public IThreadObject : ID(currID++) , parent(0) , owner(0) + , outputEvent(1) { InitWinSock(); this->thread.Create(this, false); @@ -97,19 +99,42 @@ struct NetworkClient::PrivateData : public IThreadObject OysterByte temp; CustomNetProtocol p = this->sendQueue.Pop(); - if(p[0].value.netShort == 304) - int i = 0; - this->translator.Pack(temp, p); errorCode = this->connection.Send(temp); if(errorCode != 0 && errorCode != WSAEWOULDBLOCK) { - CEA parg; - parg.type = CEA::EventType_ProtocolFailedToSend; - parg.data.protocol = p; - NetEvent e = { this->parent, parg }; - this->recieveQueue.Push(e); + if( errorCode == WSAECONNABORTED || errorCode == WSAENOTCONN) + { + CEA parg; + parg.type = CEA::EventType_Disconnect; + parg.data.protocol = p; + NetEvent e = { this->parent, parg }; + this->recieveQueue.Push(e); + + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s | Protocol: %i) - EventType_Disconnect && EventType_ProtocolFailedToSend \n", this->ID, this->connection.GetIpAddress().c_str(), p[0].value.netShort); + } + } + else + { + CEA parg; + parg.type = CEA::EventType_ProtocolFailedToSend; + parg.data.protocol = p; + NetEvent e = { this->parent, parg }; + this->recieveQueue.Push(e); + + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s | Protocol: %i) - EventType_ProtocolFailedToSend\n", this->ID, this->connection.GetIpAddress().c_str(), p[0].value.netShort); + } + } + } + + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s | Protocol: %i) Message sent!\n", this->ID, this->connection.GetIpAddress().c_str(), p[0].value.netShort); } } @@ -225,6 +250,18 @@ struct NetworkClient::PrivateData : public IThreadObject e.args.type = parg.type; this->recieveQueue.Push(e); + + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s | Protocol: %i) Message recieved!\n", this->ID, this->connection.GetIpAddress().c_str(), protocol[0].value.netShort); + } + } + else + { + if(this->outputEvent) + { + printf("\t(ID: %i | IP: %s) Failed to unpack CustomNetProtocol!\n", this->ID, this->connection.GetIpAddress().c_str()); + } } } }; @@ -266,7 +303,6 @@ void NetworkClient::Update() NetEvent temp = this->privateData->recieveQueue.Pop(); this->DataRecieved(temp); - } } @@ -401,10 +437,11 @@ void NetworkClient::DataRecieved(NetEvent e) } } -//void NetworkClient::NetworkCallback(Oyster::Network::CustomNetProtocol& p) -//{} - std::string NetworkClient::GetIpAddress() { return this->privateData->connection.GetIpAddress(); } +void NetworkClient::OutputEventData(bool output) +{ + this->privateData->outputEvent; +} \ No newline at end of file diff --git a/Code/Network/NetworkAPI/NetworkClient.h b/Code/Network/NetworkAPI/NetworkClient.h index a7f3b0bb..dddef221 100644 --- a/Code/Network/NetworkAPI/NetworkClient.h +++ b/Code/Network/NetworkAPI/NetworkClient.h @@ -138,8 +138,21 @@ namespace Oyster */ virtual void DataRecieved(NetEvent e); + /** + * + */ std::string GetIpAddress(); + /** Dumps all activity to std::io + * + */ + void OutputEventData(bool output); + + /** Dumps all activity to std::io + * + */ + void SetOutputEventDataStream(FILE out); + private: NetworkClient(const NetworkClient& obj); NetworkClient& operator =(const NetworkClient& obj);