diff --git a/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonEllipse.h b/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonEllipse.h index e74d4233..291bf07d 100644 --- a/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonEllipse.h +++ b/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonEllipse.h @@ -21,17 +21,17 @@ namespace DanBias ButtonEllipse() : EventButtonGUI(), radius(0) {} - ButtonEllipse(std::wstring textureName, Owner owner, float xPos, float yPos, float textureWidth, float textureHeight) - : EventButtonGUI(textureName, owner, xPos, yPos, textureWidth, textureHeight) + ButtonEllipse(std::wstring textureName, Owner owner, float xPos, float yPos, float textureWidth, float textureHeight, bool resizeToScreenAspectRatio = true) + : EventButtonGUI(textureName, owner, xPos, yPos, textureWidth, textureHeight, resizeToScreenAspectRatio) {} - ButtonEllipse(std::wstring textureName, EventFunc func, float xPos, float yPos, float textureWidth, float textureHeight) - : EventButtonGUI(textureName, func, xPos, yPos, textureWidth, textureHeight) + ButtonEllipse(std::wstring textureName, EventFunc func, float xPos, float yPos, float textureWidth, float textureHeight, bool resizeToScreenAspectRatio = true) + : EventButtonGUI(textureName, func, xPos, yPos, textureWidth, textureHeight, resizeToScreenAspectRatio) {} - ButtonEllipse(std::wstring textureName, EventFunc func, Owner owner, float xPos, float yPos, float textureWidth, float textureHeight) - : EventButtonGUI(textureName, func, owner, xPos, yPos, textureWidth, textureHeight) + ButtonEllipse(std::wstring textureName, EventFunc func, Owner owner, float xPos, float yPos, float textureWidth, float textureHeight, bool resizeToScreenAspectRatio = true) + : EventButtonGUI(textureName, func, owner, xPos, yPos, textureWidth, textureHeight, resizeToScreenAspectRatio) {} - ButtonEllipse(std::wstring textureName, EventFunc func, Owner owner, void* userData, float xPos, float yPos, float textureWidth, float textureHeight) - : EventButtonGUI(textureName, func, owner, userData, xPos, yPos, textureWidth, textureHeight) + ButtonEllipse(std::wstring textureName, EventFunc func, Owner owner, void* userData, float xPos, float yPos, float textureWidth, float textureHeight, bool resizeToScreenAspectRatio = true) + : EventButtonGUI(textureName, func, owner, userData, xPos, yPos, textureWidth, textureHeight, resizeToScreenAspectRatio) {} virtual ~ButtonEllipse() {} @@ -40,9 +40,9 @@ namespace DanBias bool Collision(InputClass* inputObject) { POINT p; + RECT r; GetCursorPos(&p); ScreenToClient(WindowShell::GetHWND(), &p); - RECT r; GetClientRect(WindowShell::GetHWND(), &r); //Should come from the InputClass diff --git a/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonRectangle.h b/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonRectangle.h index 1c725211..a1aac005 100644 --- a/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonRectangle.h +++ b/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonRectangle.h @@ -21,17 +21,17 @@ namespace DanBias ButtonRectangle() : EventButtonGUI(), width(0), height(0) {} - ButtonRectangle(std::wstring textureName, Owner owner, float xPos, float yPos, float width, float height) - : EventButtonGUI(textureName, owner, xPos, yPos, width, height) + ButtonRectangle(std::wstring textureName, Owner owner, float xPos, float yPos, float width, float height, bool resizeToScreenAspectRatio = true) + : EventButtonGUI(textureName, owner, xPos, yPos, width, height, resizeToScreenAspectRatio) {} - ButtonRectangle(std::wstring textureName, EventFunc func, float xPos, float yPos, float width, float height) - : EventButtonGUI(textureName, func, xPos, yPos, width, height) + ButtonRectangle(std::wstring textureName, EventFunc func, float xPos, float yPos, float width, float height, bool resizeToScreenAspectRatio = true) + : EventButtonGUI(textureName, func, xPos, yPos, width, height, resizeToScreenAspectRatio) {} - ButtonRectangle(std::wstring textureName, EventFunc func, Owner owner, float xPos, float yPos, float width, float height) - : EventButtonGUI(textureName, func, owner, xPos, yPos, width, height) + ButtonRectangle(std::wstring textureName, EventFunc func, Owner owner, float xPos, float yPos, float width, float height, bool resizeToScreenAspectRatio = true) + : EventButtonGUI(textureName, func, owner, xPos, yPos, width, height, resizeToScreenAspectRatio) {} - ButtonRectangle(std::wstring textureName, EventFunc func, Owner owner, void* userData, float xPos, float yPos, float width, float height) - : EventButtonGUI(textureName, func, owner, userData, xPos, yPos, width, height) + ButtonRectangle(std::wstring textureName, EventFunc func, Owner owner, void* userData, float xPos, float yPos, float width, float height, bool resizeToScreenAspectRatio = true) + : EventButtonGUI(textureName, func, owner, userData, xPos, yPos, width, height, resizeToScreenAspectRatio) {} virtual ~ButtonRectangle() {} diff --git a/Code/Game/DanBiasGame/GameClientState/Buttons/EventButtonGUI.h b/Code/Game/DanBiasGame/GameClientState/Buttons/EventButtonGUI.h index 7e2de14f..e71dd0fa 100644 --- a/Code/Game/DanBiasGame/GameClientState/Buttons/EventButtonGUI.h +++ b/Code/Game/DanBiasGame/GameClientState/Buttons/EventButtonGUI.h @@ -19,49 +19,44 @@ namespace DanBias EventButtonGUI() : EventButton(), xPos(0), yPos(0), width(0), height(0), texture(NULL) {} - EventButtonGUI(std::wstring textureName, Owner owner, float xPos, float yPos, float width, float height) + EventButtonGUI(std::wstring textureName, Owner owner, float xPos, float yPos, float width, float height, bool resizeToScreenAspectRatio = true) : EventButton(owner), xPos(xPos), yPos(yPos), width(width), height(height), texture(NULL) { CreateTexture(textureName); + if(resizeToScreenAspectRatio) ResizeWithAspectRatio(); } - EventButtonGUI(std::wstring textureName, EventFunc func, float xPos, float yPos, float width, float height) + EventButtonGUI(std::wstring textureName, EventFunc func, float xPos, float yPos, float width, float height, bool resizeToScreenAspectRatio = true) : EventButton(func), xPos(xPos), yPos(yPos), width(width), height(height), texture(NULL) { CreateTexture(textureName); + if(resizeToScreenAspectRatio) ResizeWithAspectRatio(); } - EventButtonGUI(std::wstring textureName, EventFunc func, Owner owner, float xPos, float yPos, float width, float height) + EventButtonGUI(std::wstring textureName, EventFunc func, Owner owner, float xPos, float yPos, float width, float height, bool resizeToScreenAspectRatio = true) : EventButton(func, owner), xPos(xPos), yPos(yPos), width(width), height(height), texture(NULL) { CreateTexture(textureName); + if(resizeToScreenAspectRatio) ResizeWithAspectRatio(); } - EventButtonGUI(std::wstring textureName, EventFunc func, Owner owner, void* userData, float xPos, float yPos, float width, float height) + EventButtonGUI(std::wstring textureName, EventFunc func, Owner owner, void* userData, float xPos, float yPos, float width, float height, bool resizeToScreenAspectRatio = true) : EventButton(func, owner, userData), xPos(xPos), yPos(yPos), width(width), height(height), texture(NULL) { CreateTexture(textureName); + if(resizeToScreenAspectRatio) ResizeWithAspectRatio(); } virtual ~EventButtonGUI() { Oyster::Graphics::API::DeleteTexture(texture); - Oyster::Graphics::API::DeleteTexture(texture2); - Oyster::Graphics::API::DeleteTexture(texture3); texture = NULL; - texture2 = NULL; - texture3 = NULL; } void CreateTexture(std::wstring textureName) { - std::wstring file = L".png"; - //Create texture - texture = Oyster::Graphics::API::CreateTexture(textureName + std::wstring(L"none") + file); - texture2 = Oyster::Graphics::API::CreateTexture(textureName + std::wstring(L"highlight") + file); - texture3 = Oyster::Graphics::API::CreateTexture(textureName + std::wstring(L"down") + file); + texture = Oyster::Graphics::API::CreateTexture(textureName); } virtual void Render() { - if(EventButton::Enabled()) { //Render att xPos and yPos @@ -69,27 +64,31 @@ namespace DanBias if(EventButton::GetState() == ButtonState_None) { - Oyster::Graphics::API::RenderGuiElement(texture, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height)); + Oyster::Graphics::API::RenderGuiElement(texture, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height), Oyster::Math::Float3(1.0f, 1.0f, 1.0f)); } else if(EventButton::GetState() == ButtonState_Hover) { - Oyster::Graphics::API::RenderGuiElement(texture2, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height)); + Oyster::Graphics::API::RenderGuiElement(texture, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height), Oyster::Math::Float3(0.0f, 1.0f, 0.0f)); } else { - Oyster::Graphics::API::RenderGuiElement(texture3, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height)); + Oyster::Graphics::API::RenderGuiElement(texture, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height), Oyster::Math::Float3(1.0f, 0.0f, 0.0f)); } } } + void ResizeWithAspectRatio() + { + RECT r; + GetClientRect(WindowShell::GetHWND(), &r); + height *= (float)r.right/(float)r.bottom; + } + protected: float xPos, yPos; float width, height; Oyster::Graphics::API::Texture texture; - Oyster::Graphics::API::Texture texture2; - Oyster::Graphics::API::Texture texture3; - }; } diff --git a/Code/Game/DanBiasGame/GameClientState/LoginState.cpp b/Code/Game/DanBiasGame/GameClientState/LoginState.cpp index a7bc8299..70bbbbea 100644 --- a/Code/Game/DanBiasGame/GameClientState/LoginState.cpp +++ b/Code/Game/DanBiasGame/GameClientState/LoginState.cpp @@ -26,7 +26,7 @@ struct LoginState::myData //Menu button collection EventButtonCollection* collection; - + bool createGame; int testNumber; }privData; @@ -51,7 +51,7 @@ void LoginState::ButtonCallback(Oyster::Event::ButtonEvent& e) switch(type) { case Create: - /*if(e.state == ButtonState_None) + if(e.state == ButtonState_None) { int a = 0; std::cout << "None" << std::endl; @@ -76,7 +76,8 @@ void LoginState::ButtonCallback(Oyster::Event::ButtonEvent& e) //Change to create state or something similar int a = 0; std::cout << "Released" << std::endl; - }*/ + e.owner->privData->createGame = true; + } break; case Options: break; @@ -110,22 +111,23 @@ bool LoginState::Init(Oyster::Network::NetworkClient* nwClient) //Create menu buttons privData->collection = new EventButtonCollection; EventHandler::Instance().AddCollection(privData->collection); - privData->collection->AddButton(new ButtonEllipse(L"circle_", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.2f, 0.1f, 0.2f)); - privData->collection->AddButton(new ButtonEllipse(L"circle_", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.3f, 0.1f, 0.2f)); - privData->collection->AddButton(new ButtonEllipse(L"circle_", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.4f, 0.1f, 0.2f)); - privData->collection->AddButton(new ButtonEllipse(L"circle_", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.5f, 0.1f, 0.2f)); + privData->collection->AddButton(new ButtonEllipse(L"circle.png", &LoginState::ButtonCallback, this, (void*)Options, 0.2f, 0.2f, 0.1f, 0.1f)); + privData->collection->AddButton(new ButtonEllipse(L"circle.png", &LoginState::ButtonCallback, this, (void*)Options, 0.2f, 0.3f, 0.1f, 0.1f)); + privData->collection->AddButton(new ButtonEllipse(L"circle.png", &LoginState::ButtonCallback, this, (void*)Options, 0.2f, 0.4f, 0.1f, 0.1f)); + privData->collection->AddButton(new ButtonEllipse(L"circle.png", &LoginState::ButtonCallback, this, (void*)Options, 0.2f, 0.5f, 0.1f, 0.1f)); - privData->collection->AddButton(new ButtonRectangle(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.15f, 0.05f, 0.1f, 0.1f)); - privData->collection->AddButton(new ButtonRectangle(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.25f, 0.05f, 0.1f, 0.1f)); - privData->collection->AddButton(new ButtonRectangle(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.35f, 0.05f, 0.1f, 0.1f)); - privData->collection->AddButton(new ButtonRectangle(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.45f, 0.05f, 0.1f, 0.1f)); + privData->collection->AddButton(new ButtonRectangle(L"button.png", &LoginState::ButtonCallback, this, (void*)Options, 0.15f, 0.05f, 0.1f, 0.1f)); + privData->collection->AddButton(new ButtonRectangle(L"button.png", &LoginState::ButtonCallback, this, (void*)Options, 0.25f, 0.05f, 0.1f, 0.1f)); + privData->collection->AddButton(new ButtonRectangle(L"button.png", &LoginState::ButtonCallback, this, (void*)Options, 0.35f, 0.05f, 0.1f, 0.1f)); + privData->collection->AddButton(new ButtonRectangle(L"button.png", &LoginState::ButtonCallback, this, (void*)Options, 0.45f, 0.05f, 0.1f, 0.1f)); - privData->collection->AddButton(new ButtonRectangle(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.5f, 0.5f, 0.3f, 0.3f)); + privData->collection->AddButton(new ButtonRectangle(L"button.png", &LoginState::ButtonCallback, this, (void*)Create, 0.5f, 0.5f, 0.3f, 0.3f)); //Incr/decr buttons - privData->collection->AddButton(new ButtonRectangle(L"button_", &LoginState::ButtonCallback, this, (void*)Incr, 0.85f, 0.2f, 0.1f, 0.1f)); - privData->collection->AddButton(new ButtonRectangle(L"button_", &LoginState::ButtonCallback, this, (void*)Decr, 0.55f, 0.2f, 0.1f, 0.1f)); - + privData->collection->AddButton(new ButtonRectangle(L"button.png", &LoginState::ButtonCallback, this, (void*)Incr, 0.85f, 0.2f, 0.1f, 0.1f)); + privData->collection->AddButton(new ButtonRectangle(L"button.png", &LoginState::ButtonCallback, this, (void*)Decr, 0.55f, 0.2f, 0.1f, 0.1f)); + + privData->createGame = false; privData->testNumber = 0; return true; @@ -182,7 +184,7 @@ GameClientState::ClientState LoginState::Update(float deltaTime, InputClass* Key // check data from server // create game - if( KeyInput->IsKeyPressed(DIK_C)) + if( KeyInput->IsKeyPressed(DIK_C) || privData->createGame) { DanBias::GameServerAPI::ServerInitDesc desc; @@ -218,7 +220,6 @@ GameClientState::ClientState LoginState::Update(float deltaTime, InputClass* Key } bool LoginState::Render(float dt) { - Oyster::Graphics::API::SetView(privData->view); Oyster::Graphics::API::SetProjection( privData->proj); @@ -241,8 +242,9 @@ bool LoginState::Render(float dt) wchar_t temp[10]; _itow_s(privData->testNumber, temp, 10); number = temp; + Oyster::Graphics::API::StartTextRender(); - Oyster::Graphics::API::RenderText(number, Oyster::Math::Float2(0.7, 0.2), Oyster::Math::Float2(0.1, 0.1)); + Oyster::Graphics::API::RenderText(number, Oyster::Math::Float2(0.7f, 0.2f), Oyster::Math::Float2(0.1f, 0.1f*(1008.0f/730.0f)), Oyster::Math::Float3(1.0f, 0.0f, 0.0f)); Oyster::Graphics::API::EndFrame(); return true; @@ -258,7 +260,6 @@ bool LoginState::Release() } delete privData->collection; - //EventHandler::Instance().DeleteCollection(privData->collection); delete privData; privData = NULL; diff --git a/Code/Game/GameLogic/AttatchmentMassDriver.cpp b/Code/Game/GameLogic/AttatchmentMassDriver.cpp index b5458ff3..bd52029d 100644 --- a/Code/Game/GameLogic/AttatchmentMassDriver.cpp +++ b/Code/Game/GameLogic/AttatchmentMassDriver.cpp @@ -95,19 +95,22 @@ void AttatchmentMassDriver::ForcePush(const GameLogic::WEAPON_FIRE &usage, float heldObject = NULL; return; } - Oyster::Math::Float3 up = owner->GetOrientation().v[1]; - Oyster::Math::Float3 look = owner->GetLookDir(); - Oyster::Math::Float3 pos = owner->GetPosition(); + + Oyster::Math::Float radius = 2; + Oyster::Math::Float3 look = owner->GetLookDir().GetNormalized(); + Oyster::Math::Float lenght = 5; + Oyster::Math::Float3 pos = owner->GetRigidBody()->GetState().centerPos; pushForce = Oyster::Math::Float4(this->owner->GetLookDir()) * (200 * dt); - Oyster::Math::Float4x4 aim = Oyster::Math3D::ViewMatrix_LookAtDirection(look, up, pos); - Oyster::Math::Float4x4 hitSpace = Oyster::Math3D::ProjectionMatrix_Perspective(Oyster::Math::pi/8,1,1,50); - Oyster::Collision3D::Frustrum hitFrustum = Oyster::Collision3D::Frustrum(Oyster::Math3D::ViewProjectionMatrix(aim,hitSpace)); + Oyster::Collision3D::Cone *hitCone = new Oyster::Collision3D::Cone(look*5,pos,radius); + + + forcePushData args; args.pushForce = pushForce; - Oyster::Physics::API::Instance().ApplyEffect(hitFrustum,&args,ForcePushAction); + Oyster::Physics::API::Instance().ApplyEffect(hitCone,&args,ForcePushAction); } /******************************************************** @@ -126,7 +129,7 @@ void AttatchmentMassDriver::ForceZip(const WEAPON_FIRE &usage, float dt) void AttatchmentMassDriver::ForcePull(const WEAPON_FIRE &usage, float dt) { - if(hasObject) return; //this test checks if the weapon already has something picked up, if so then it cant use this function + //if(hasObject) return; //this test checks if the weapon already has something picked up, if so then it cant use this function PickUpObject(usage,dt); //first test if there is a nearby object to pickup @@ -142,19 +145,15 @@ void AttatchmentMassDriver::ForcePull(const WEAPON_FIRE &usage, float dt) forcePushData args; args.pushForce = -pushForce; - Oyster::Physics::API::Instance().ApplyEffect(hitFrustum,&args,ForcePushAction); + //Oyster::Physics::API::Instance().ApplyEffect(hitFrustum,&args,ForcePushAction); } void AttatchmentMassDriver::PickUpObject(const WEAPON_FIRE &usage, float dt) { Oyster::Math::Float3 pos = owner->GetPosition() + owner->GetLookDir().GetNormalized()*5; - Oyster::Collision3D::Sphere hitSphere = Oyster::Collision3D::Sphere(pos,20); - /*Oyster::Math::Float4x4 aim = Oyster::Math3D::ViewMatrix_LookAtDirection(owner->GetLookDir(), owner->GetRigidBody()->GetGravityNormal(), owner->GetPosition()); - - Oyster::Math::Float4x4 hitSpace = Oyster::Math3D::ProjectionMatrix_Perspective(Oyster::Math::pi/4,1,1,20); - Oyster::Collision3D::Frustrum hitFrustum = Oyster::Collision3D::Frustrum(Oyster::Math3D::ViewProjectionMatrix(aim,hitSpace)); -*/ - + Oyster::Collision3D::Sphere *hitSphere = new Oyster::Collision3D::Sphere(pos,20); Oyster::Physics::API::Instance().ApplyEffect(hitSphere,this,AttemptPickUp); + + delete hitSphere; } diff --git a/Code/Game/GameLogic/CollisionManager.cpp b/Code/Game/GameLogic/CollisionManager.cpp index 3c556d5f..27949cc9 100644 --- a/Code/Game/GameLogic/CollisionManager.cpp +++ b/Code/Game/GameLogic/CollisionManager.cpp @@ -124,19 +124,20 @@ using namespace GameLogic; void AttatchmentMassDriver::ForcePushAction(Oyster::Physics::ICustomBody *obj, void *args) { - Oyster::Physics::ICustomBody::State state; + if(obj->GetState().mass == 0) return; + Object *realObj = (Object*)obj->GetCustomTag(); if(realObj->GetObjectType() == OBJECT_TYPE_PLAYER || realObj->GetObjectType() == OBJECT_TYPE_WORLD) return; - state = obj->GetState(); - //state.ApplyLinearImpulse(((forcePushData*)(args))->pushForce); - obj->SetState(state); + obj->ApplyImpulse(((forcePushData*)(args))->pushForce); } void AttatchmentMassDriver::AttemptPickUp(Oyster::Physics::ICustomBody *obj, void* args) { + if(obj->GetState().mass == 0) return; + AttatchmentMassDriver *weapon = ((AttatchmentMassDriver*)args); if(weapon->hasObject) diff --git a/Code/Game/GameLogic/Weapon.cpp b/Code/Game/GameLogic/Weapon.cpp index e52fe8df..66de8e33 100644 --- a/Code/Game/GameLogic/Weapon.cpp +++ b/Code/Game/GameLogic/Weapon.cpp @@ -18,17 +18,9 @@ Weapon::Weapon() Weapon::Weapon(int MaxNrOfSockets,Player *owner) { - if(MaxNrOfSockets > 1) return; - - attatchmentSockets.Resize(MaxNrOfSockets); attatchmentSockets[0] = new AttatchmentSocket(); - for (int i = 0; i < MaxNrOfSockets; i++) - { - this->attatchmentSockets[i] = 0; - } - weaponState = WEAPON_STATE_IDLE; currentNrOfAttatchments = 0; selectedAttatchment = 0; diff --git a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp index 43e86a30..820688a5 100644 --- a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp +++ b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp @@ -12,6 +12,8 @@ using namespace ::Utility::Value; API_Impl API_instance; + + API & API::Instance() { return API_instance; @@ -251,9 +253,73 @@ void API_Impl::ReleaseFromLimbo( const ICustomBody* objRef ) } -void API_Impl::ApplyEffect( const Oyster::Collision3D::ICollideable& collideable, void* args, void(hitAction)(ICustomBody*, void*) ) +void API_Impl::ApplyEffect(Oyster::Collision3D::ICollideable* collideable, void* args, EventAction_ApplyEffect effect) { - + btRigidBody* body; + btCollisionShape* shape; + btMotionState* state; + btRigidBody::btRigidBodyConstructionInfo rigidBodyCI(0, NULL, NULL); + + Sphere* sphere; + Box* box; + Cone* cone; + + switch(collideable->type) + { + case ICollideable::Type::Type_sphere: + sphere = dynamic_cast(collideable); + // Add collision shape + shape = new btSphereShape(sphere->radius); + + // Add motion state + state = new btDefaultMotionState(btTransform(btQuaternion(0.0f, 0.0f, 0.0f, 1.0f),btVector3(sphere->center.x, sphere->center.y, sphere->center.z))); + + // Add rigid body + rigidBodyCI = btRigidBody::btRigidBodyConstructionInfo(0, state, shape); + body = new btRigidBody(rigidBodyCI); + + break; + + case ICollideable::Type::Type_box: + box = dynamic_cast(collideable); + // Add collision shape + shape = new btBoxShape(btVector3(box->boundingOffset.x, box->boundingOffset.y, box->boundingOffset.z)); + + // Add motion state + state = new btDefaultMotionState(btTransform(btQuaternion(0.0f, 0.0f, 0.0f, 1.0f),btVector3(box->center.x, box->center.y, box->center.z))); + + // Add rigid body + rigidBodyCI = btRigidBody::btRigidBodyConstructionInfo(0, state, shape); + body = new btRigidBody(rigidBodyCI); + + break; + + case ICollideable::Type::Type_cone: + cone = dynamic_cast(collideable); + // Add collision shape + shape = new btConeShape(cone->radius, cone->height.GetLength()); + + // Add motion state + state = new btDefaultMotionState(btTransform(btQuaternion(btVector3(cone->height.x, cone->height.y, cone->height.z).normalized(), 0.0f),btVector3(cone->position.x, cone->position.y, cone->position.z))); + + // Add rigid body + rigidBodyCI = btRigidBody::btRigidBodyConstructionInfo (0, state, shape); + body = new btRigidBody(rigidBodyCI); + + break; + default: + return; + } + ContactSensorCallback callback(*body, effect, args); + + this->dynamicsWorld->contactTest(body, callback); + + delete state; + state = NULL; + delete shape; + shape = NULL; + delete body; + body = NULL; } namespace Oyster diff --git a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.h b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.h index 3cef6373..c2e3d5ea 100644 --- a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.h +++ b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.h @@ -12,6 +12,42 @@ namespace Oyster class API_Impl : public API { public: + struct ContactSensorCallback : public btCollisionWorld::ContactResultCallback + { + ContactSensorCallback(btRigidBody& contactBody, EventAction_ApplyEffect effect, void* args) + : btCollisionWorld::ContactResultCallback(), body(contactBody), func(effect), args(args) {} + + btRigidBody& body; + EventAction_ApplyEffect func; + void* args; + + virtual bool needsCollision(btBroadphaseProxy* proxy) const + { + if(!btCollisionWorld::ContactResultCallback::needsCollision(proxy)) + return false; + + return body.checkCollideWithOverride(static_cast(proxy->m_clientObject)); + } + + virtual btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0, int partId0, int index0, const btCollisionObjectWrapper* colObj1, int partId1, int index1) + { + btVector3 pt; + if(colObj0->m_collisionObject == &body) + { + pt = cp.m_localPointA; + this->func((ICustomBody*)(colObj1->getCollisionObject()->getUserPointer()), this->args); + } + else + { + assert(colObj1->m_collisionObject == &body && "Body does not match either collision object"); + pt = cp.m_localPointB; + this->func((ICustomBody*)(colObj0->getCollisionObject()->getUserPointer()), this->args); + } + + return 0; + } + }; + API_Impl(); virtual ~API_Impl(); @@ -33,7 +69,7 @@ namespace Oyster void UpdateWorld(); - void ApplyEffect( const Oyster::Collision3D::ICollideable& collideable, void* args, void(hitAction)(ICustomBody*, void*) ); + void ApplyEffect(Oyster::Collision3D::ICollideable* collideable, void* args, EventAction_ApplyEffect effect); private: btBroadphaseInterface* broadphase; diff --git a/Code/GamePhysics/PhysicsAPI.h b/Code/GamePhysics/PhysicsAPI.h index d971fe79..9fd3722e 100644 --- a/Code/GamePhysics/PhysicsAPI.h +++ b/Code/GamePhysics/PhysicsAPI.h @@ -45,6 +45,7 @@ namespace Oyster typedef Struct::Gravity Gravity; typedef void (*EventAction_Destruction)( ::Utility::DynamicMemory::UniquePointer proto ); + typedef void (*EventAction_ApplyEffect)(ICustomBody* collidedBody, void* args); /** Gets the Physics instance. */ static API & Instance(); @@ -99,7 +100,7 @@ namespace Oyster * @param hitAction: A function that contains the effect. Parameterlist contains the custom body the collideable hits, and the arguments sent to the function. ********************************************************/ - virtual void ApplyEffect( const Oyster::Collision3D::ICollideable& collideable, void* args, void(hitAction)(ICustomBody*, void*) ) = 0; + virtual void ApplyEffect(Oyster::Collision3D::ICollideable* collideable, void* args, EventAction_ApplyEffect effect) = 0; protected: virtual ~API() {} diff --git a/Code/Misc/EventHandler/EventButton.h b/Code/Misc/EventHandler/EventButton.h index 6a220845..b891889d 100644 --- a/Code/Misc/EventHandler/EventButton.h +++ b/Code/Misc/EventHandler/EventButton.h @@ -155,15 +155,20 @@ namespace Oyster break; case ButtonState_Hover: - case ButtonState_Released: if(outside == false) { clicked = true; currentState = ButtonState_Pressed; } else + { currentState = ButtonState_Hover; + } break; + case ButtonState_Released: + currentState = ButtonState_Hover; + break; + case ButtonState_Pressed: case ButtonState_Down: diff --git a/Code/Misc/EventHandler/EventButtonCollection.cpp b/Code/Misc/EventHandler/EventButtonCollection.cpp index cc769b5c..2bd5f09a 100644 --- a/Code/Misc/EventHandler/EventButtonCollection.cpp +++ b/Code/Misc/EventHandler/EventButtonCollection.cpp @@ -8,8 +8,8 @@ using namespace Oyster::Event; -EventButtonCollection::EventButtonCollection() - : collectionState(EventCollectionState_Enabled) +EventButtonCollection::EventButtonCollection(EventCollectionState state) + : collectionState(state) { } @@ -65,6 +65,13 @@ void EventButtonCollection::SetState(const EventCollectionState state) void EventButtonCollection::Clear() { + int size = buttons.size(); + for(int i = 0; i < size; i++) + { + delete buttons[i]; + buttons[i] = NULL; + } buttons.clear(); + collectionState = EventCollectionState_Enabled; } \ No newline at end of file diff --git a/Code/Misc/EventHandler/EventButtonCollection.h b/Code/Misc/EventHandler/EventButtonCollection.h index 56bb3d27..5bcd044a 100644 --- a/Code/Misc/EventHandler/EventButtonCollection.h +++ b/Code/Misc/EventHandler/EventButtonCollection.h @@ -28,20 +28,20 @@ namespace Oyster }; /******************************** - This EventButtonCollection will handle the destruction of the buttons when they are added to the collection. - + This EventButtonCollection will handle the destruction of the buttons when they are added to the collection ********************************/ class EventButtonCollection { public: - EventButtonCollection(); + EventButtonCollection(EventCollectionState state = EventCollectionState_Enabled); ~EventButtonCollection(); void Update(InputClass* inputObject); void Render(); - template - void AddButton(EventButton* button) + /*Add a button to the collection when a button is added to the collection you are not allowed to delete it. + */ + template void AddButton(EventButton* button) { buttons.push_back(button); } @@ -52,6 +52,11 @@ namespace Oyster //Clear all buttons and reset the state. void Clear(); + private: + //Can't copy + EventButtonCollection(const EventButtonCollection& obj); + EventButtonCollection& operator =(const EventButtonCollection& obj); + protected: std::vector buttons; EventCollectionState collectionState; diff --git a/Code/Misc/EventHandler/EventHandler.cpp b/Code/Misc/EventHandler/EventHandler.cpp index 139e0cac..4b623714 100644 --- a/Code/Misc/EventHandler/EventHandler.cpp +++ b/Code/Misc/EventHandler/EventHandler.cpp @@ -23,6 +23,7 @@ EventHandler::~EventHandler() for(int i = 0; i < size; i++) { delete collections[i]; + collections[i] = NULL; } } @@ -32,6 +33,7 @@ void EventHandler::Clean() for(int i = 0; i < size; i++) { delete collections[i]; + collections[i] = NULL; } collections.clear(); } @@ -54,6 +56,12 @@ void EventHandler::Render() void EventHandler::AddCollection(EventButtonCollection* collection) { + for(int i = 0; i < collections.size(); i++) + { + //Do not add the collection if it's already in the list. + if(collections.at(i) == collection) + return; + } collections.push_back(collection); } @@ -64,6 +72,7 @@ void EventHandler::DeleteCollection(EventButtonCollection* collection) if(collections.at(i) == collection) { delete collection; + collection = NULL; collections.erase(collections.begin() + i); break; } diff --git a/Code/Misc/EventHandler/EventHandler.h b/Code/Misc/EventHandler/EventHandler.h index 8459a77a..71a35ecd 100644 --- a/Code/Misc/EventHandler/EventHandler.h +++ b/Code/Misc/EventHandler/EventHandler.h @@ -29,11 +29,21 @@ namespace Oyster void Update(InputClass* inputObject); void Render(); + /*Add a collection to the EventHandler will only add collections not already present in the list. + + */ void AddCollection(EventButtonCollection* collection); void DeleteCollection(EventButtonCollection* collection); + private: + //Can't copy this class. + EventHandler(const EventHandler& obj); + EventHandler& operator =(const EventHandler& obj); + private: std::vector collections; + + //EventButtonCollection is a firend so it can delete it self. friend class EventButtonCollection; }; } diff --git a/Code/OysterGraphics/ClassDiagram.cd b/Code/OysterGraphics/ClassDiagram.cd deleted file mode 100644 index 7b894197..00000000 --- a/Code/OysterGraphics/ClassDiagram.cd +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp index 51ea20a2..b8d8bbae 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp @@ -158,9 +158,9 @@ namespace Oyster Render::Gui::Begin2DRender(); } - void API::RenderGuiElement(API::Texture tex, Math::Float2 pos, Math::Float2 size) + void API::RenderGuiElement(API::Texture tex, Math::Float2 pos, Math::Float2 size, Math::Float3 color) { - Render::Gui::Render((ID3D11ShaderResourceView*)tex,pos,size); + Render::Gui::Render((ID3D11ShaderResourceView*)tex,pos,size,color); } API::Texture API::CreateTexture(std::wstring filename) @@ -191,9 +191,9 @@ namespace Oyster Render::Gui::Begin2DTextRender(); } - void API::RenderText(std::wstring text, Math::Float2 Pos, Math::Float2 Size) + void API::RenderText(std::wstring text, Math::Float2 Pos, Math::Float2 Size, Math::Float3 color) { - Render::Gui::RenderText(text,Pos,Size); + Render::Gui::RenderText(text,Pos,Size,color); } } } \ No newline at end of file diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.h b/Code/OysterGraphics/DllInterfaces/GFXAPI.h index 6511fc4d..bdf70072 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.h +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.h @@ -57,13 +57,13 @@ namespace Oyster static void StartGuiRender(); //! @brief Renders a single GUI element using the texture provided and the Pos in the center, %based system - static void RenderGuiElement(Texture, Math::Float2 Pos, Math::Float2 Size); + static void RenderGuiElement(Texture, Math::Float2 Pos, Math::Float2 Size, Math::Float3 Color = Math::Float3(1,1,1)); //! @brief Configures Renderer to process 2D Text, data will be passed in to EndFrame() static void StartTextRender(); //! @brief Renders a single GUI string using the texture provided and the Pos in the center, %based system - static void RenderText(std::wstring, Math::Float2 Pos, Math::Float2 Size); + static void RenderText(std::wstring, Math::Float2 Pos, Math::Float2 Size, Math::Float3 Color = Math::Float3(1,1,1)); //! @brief Performs light calculations, post effects and presents the scene static void EndFrame(); diff --git a/Code/OysterGraphics/OysterGraphics.vcxproj.filters.orig b/Code/OysterGraphics/OysterGraphics.vcxproj.filters.orig deleted file mode 100644 index 94814340..00000000 --- a/Code/OysterGraphics/OysterGraphics.vcxproj.filters.orig +++ /dev/null @@ -1,88 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - -<<<<<<< HEAD - -======= - ->>>>>>> f08e9491ed00b00aedba0eabf1caed33830fc0e2 - Source Files - - - Source Files - -<<<<<<< HEAD - -======= - - Source Files - - ->>>>>>> f08e9491ed00b00aedba0eabf1caed33830fc0e2 - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - - - - \ No newline at end of file diff --git a/Code/OysterGraphics/OysterGraphics.vcxproj.orig b/Code/OysterGraphics/OysterGraphics.vcxproj.orig deleted file mode 100644 index 8a0e9221..00000000 --- a/Code/OysterGraphics/OysterGraphics.vcxproj.orig +++ /dev/null @@ -1,214 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {0EC83E64-230E-48EF-B08C-6AC9651B4F82} - OysterGraphics - - - - StaticLibrary - true - v110 - MultiByte - - - StaticLibrary - true - v110 - MultiByte - - - StaticLibrary - false - v110 - true - MultiByte - - - StaticLibrary - false - v110 - true - MultiByte - - - - - - - - - - - - - - - - - - - $(SolutionDir)..\External\Lib\$(ProjectName)\ - $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName)D - - - $(SolutionDir)..\External\Lib\$(ProjectName)\ - $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName) - - - $(SolutionDir)..\External\Lib\$(ProjectName)\ - $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName)D - - - $(SolutionDir)..\External\Lib\$(ProjectName)\ - $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ - $(ProjectName)_$(PlatformShortName) - - - - Level3 - Disabled - true - $(SolutionDir)OysterMath;$(SolutionDir)Misc;%(AdditionalIncludeDirectories) - - - true - - - true - - - - - Level3 - Disabled - true - ..\OysterPhysic3D\Collision;..\OysterPhysics3D;..\OysterMath;..\Misc;%(AdditionalIncludeDirectories) - - - true - - - - - Level3 - MaxSpeed - true - true - true - ..\OysterPhysics3D;..\OysterMath;..\Misc;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - Level3 - MaxSpeed - true - true - true - ..\OysterPhysics3D;..\OysterMath;..\Misc;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - - - -<<<<<<< HEAD - - - -======= - - - - ->>>>>>> f08e9491ed00b00aedba0eabf1caed33830fc0e2 - - - - - -<<<<<<< HEAD -======= - - ->>>>>>> f08e9491ed00b00aedba0eabf1caed33830fc0e2 - - - - - - - - - - {2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee} - - - {f10cbc03-9809-4cba-95d8-327c287b18ee} - - - - - Vertex - Vertex - Vertex - Vertex - - - Pixel - Pixel - Pixel - Pixel - true - 5.0 - main - - - Vertex - Vertex - Vertex - Vertex - true - 5.0 - main - - - - - - - - \ No newline at end of file diff --git a/Code/OysterGraphics/Render/DefaultRenderer.cpp b/Code/OysterGraphics/Render/DefaultRenderer.cpp index 2ad8646b..a92c54d6 100644 --- a/Code/OysterGraphics/Render/DefaultRenderer.cpp +++ b/Code/OysterGraphics/Render/DefaultRenderer.cpp @@ -82,7 +82,7 @@ namespace Oyster } int b = 0; Model::Animation A = *models[i].Animation.AnimationPlaying; - while(models[i].Animation.AnimationTime>A.duration) + while(models[i].Animation.AnimationTime>A.duration && models[i].Animation.LoopAnimation) models[i].Animation.AnimationTime -= (float)A.duration; float position = models[i].Animation.AnimationTime; diff --git a/Code/OysterGraphics/Render/GuiRenderer.cpp b/Code/OysterGraphics/Render/GuiRenderer.cpp index ee114898..fbdfa37c 100644 --- a/Code/OysterGraphics/Render/GuiRenderer.cpp +++ b/Code/OysterGraphics/Render/GuiRenderer.cpp @@ -16,7 +16,7 @@ namespace Oyster Core::PipelineManager::SetRenderPass(Render::Resources::Gui::Pass); } - void Gui::Render(ID3D11ShaderResourceView* tex,Math::Float2 pos, Math::Float2 size) + void Gui::Render(ID3D11ShaderResourceView* tex,Math::Float2 pos, Math::Float2 size, Math::Float3 color) { Core::deviceContext->PSSetShaderResources(0,1,&tex); @@ -34,6 +34,12 @@ namespace Oyster void* data = Render::Resources::Gui::Data.Map(); memcpy(data,&gd,sizeof(Definitions::GuiData)); Render::Resources::Gui::Data.Unmap(); + + data = Render::Resources::Gui::Color.Map(); + memcpy(data,&color,sizeof(Math::Float3)); + Render::Resources::Gui::Color.Unmap(); + + Core::deviceContext->Draw(1,0); } @@ -43,7 +49,7 @@ namespace Oyster Core::PipelineManager::SetRenderPass(Resources::Gui::Text::Pass); } - void Gui::RenderText(std::wstring text, Math::Float2 pos, Math::Float2 size) + void Gui::RenderText(std::wstring text, Math::Float2 pos, Math::Float2 size, Math::Float3 color) { size.x = size.x / (text.length() * TEXT_SPACING /2); @@ -70,6 +76,10 @@ namespace Oyster Render::Resources::Gui::Data.Unmap(); Definitions::Text2D tmpInst; + data = Render::Resources::Gui::Color.Map(); + memcpy(data,&color,sizeof(Math::Float3)); + Render::Resources::Gui::Color.Unmap(); + void* dest = Resources::Gui::Text::Vertex.Map(); Definitions::Text2D* dataView = reinterpret_cast(dest); //tmpInst.charOffset=_pos; diff --git a/Code/OysterGraphics/Render/GuiRenderer.h b/Code/OysterGraphics/Render/GuiRenderer.h index 6d865950..f5513d2f 100644 --- a/Code/OysterGraphics/Render/GuiRenderer.h +++ b/Code/OysterGraphics/Render/GuiRenderer.h @@ -12,9 +12,9 @@ namespace Oyster { public: static void Begin2DRender(); - static void Render(ID3D11ShaderResourceView* tex, Math::Float2 pos, Math::Float2 size); + static void Render(ID3D11ShaderResourceView* tex, Math::Float2 pos, Math::Float2 size, Math::Float3 tint = Math::Float3(1,1,1)); static void Begin2DTextRender(); - static void RenderText(std::wstring text, Math::Float2 pos, Math::Float2 size); + static void RenderText(std::wstring text, Math::Float2 pos, Math::Float2 size, Math::Float3 tint = Math::Float3(1,1,1)); }; } } diff --git a/Code/OysterGraphics/Render/Resources.cpp b/Code/OysterGraphics/Render/Resources.cpp index e0a0aa79..73834071 100644 --- a/Code/OysterGraphics/Render/Resources.cpp +++ b/Code/OysterGraphics/Render/Resources.cpp @@ -45,6 +45,7 @@ namespace Oyster Buffer Resources::Gather::AnimationData = Buffer(); Buffer Resources::Light::LightConstantsData = Buffer(); Buffer Resources::Gui::Data = Buffer(); + Buffer Resources::Gui::Color = Buffer(); Buffer Resources::Gui::Text::Vertex = Buffer(); Buffer Resources::Post::Data = Buffer(); @@ -118,6 +119,10 @@ namespace Oyster desc.ElementSize = sizeof(Definitions::AnimationData); Gather::AnimationData.Init(desc); + desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_PS; + desc.ElementSize = sizeof(Math::Float3); + Gui::Color.Init(desc); + desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_GS; desc.NumElements = 1; desc.ElementSize = sizeof(Definitions::GuiData); @@ -378,6 +383,7 @@ namespace Oyster Gui::Pass.Shaders.Geometry = GetShader::Geometry(L"2D"); Gui::Pass.RTV.push_back(GBufferRTV[2]); Gui::Pass.CBuffers.Geometry.push_back(Gui::Data); + Gui::Pass.CBuffers.Pixel.push_back(Gui::Color); D3D11_INPUT_ELEMENT_DESC indesc2D[] = { @@ -421,6 +427,7 @@ namespace Oyster Shader::CreateInputLayout(Text2Ddesc,3, GetShader::Vertex(L"2DText") ,Gui::Text::Pass.IAStage.Layout); Gui::Text::Pass.CBuffers.Geometry.push_back(Gui::Data); + Gui::Text::Pass.CBuffers.Pixel.push_back(Gui::Color); Gui::Text::Pass.SRV.Pixel.push_back(Gui::Text::Font); Gui::Text::Pass.RTV.push_back(GBufferRTV[2]); Gui::Text::Pass.RenderStates.SampleCount = 1; @@ -448,6 +455,7 @@ namespace Oyster Light::LightConstantsData.~Buffer(); Light::PointLightsData.~Buffer(); Gui::Data.~Buffer(); + Gui::Color.~Buffer(); Gui::Text::Vertex.~Buffer(); Post::Data.~Buffer(); SAFE_RELEASE(Light::PointLightView); diff --git a/Code/OysterGraphics/Render/Resources.h b/Code/OysterGraphics/Render/Resources.h index cdc12efc..d43b5756 100644 --- a/Code/OysterGraphics/Render/Resources.h +++ b/Code/OysterGraphics/Render/Resources.h @@ -61,6 +61,7 @@ namespace Oyster { static Core::PipelineManager::RenderPass Pass; static Core::Buffer Data; + static Core::Buffer Color; struct Text { static Core::PipelineManager::RenderPass Pass; diff --git a/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl b/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl index a09111b9..c28fd642 100644 --- a/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl +++ b/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl @@ -2,5 +2,5 @@ float4 main(Pixel2DIn input) : SV_Target0 { - return Material.Sample(LinearSampler,input.Uv); + return Material.Sample(LinearSampler,input.Uv) * float4(Color,1); } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli b/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli index 5a026d34..4b507644 100644 --- a/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli +++ b/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli @@ -3,11 +3,16 @@ struct Vertex2DIn float2 Pos : Position; }; -cbuffer EveryObject2D : register(c0) +cbuffer EveryObject2D : register(b0) { float4x4 Translation; }; +cbuffer ColorData : register(b0) +{ + float3 Color; +}; + struct Pixel2DIn { float4 Pos : SV_Position; diff --git a/Code/OysterGraphics/Shader/Passes/2D/Text/Header.hlsli b/Code/OysterGraphics/Shader/Passes/2D/Text/Header.hlsli index 7b64fd79..6d7ab899 100644 --- a/Code/OysterGraphics/Shader/Passes/2D/Text/Header.hlsli +++ b/Code/OysterGraphics/Shader/Passes/2D/Text/Header.hlsli @@ -1,5 +1,5 @@ #include "../Header.hlsli" -cbuffer TextPerObject : register(c0) +cbuffer TextPerObject : register(b0) { float4x4 gWorld; }; diff --git a/Code/OysterPhysics3D/Cone.cpp b/Code/OysterPhysics3D/Cone.cpp new file mode 100644 index 00000000..61d7faf3 --- /dev/null +++ b/Code/OysterPhysics3D/Cone.cpp @@ -0,0 +1,49 @@ +///////////////////////////////////////////////////////////////////// +// Created by Erik Persson 2014 +///////////////////////////////////////////////////////////////////// + +#include "Cone.h" +#include "OysterCollision3D.h" + +using namespace ::Oyster::Collision3D; +using namespace ::Oyster::Math3D; + + +Cone::Cone( ) : ICollideable(Type_cone) +{ + this->radius = 1; + this->height = Oyster::Math::Float3(0,0,0); +} + +Cone::Cone( const ::Oyster::Math::Float3 &height, const Oyster::Math::Float3 &position, const ::Oyster::Math::Float &radius ) : ICollideable(Type_cone) +{ + this->radius = radius; + this->height = height; + this->position = position; +} + +Cone::Cone( const ::Oyster::Math::Float4 &height, const Oyster::Math::Float4 &position, const ::Oyster::Math::Float &radius ) : ICollideable(Type_cone) +{ + this->radius = radius; + this->height = (Oyster::Math::Float3)height; + this->position = (Oyster::Math::Float3)position; +} + +Cone::~Cone( ) +{ + +} + +Cone & Cone::operator = ( const Cone &cone ) +{ + this->radius = cone.radius; + this->height = cone.height; + this->position = cone.position; + return *this; +} + +::Utility::DynamicMemory::UniquePointer Cone::Clone( ) const +{ + return ::Utility::DynamicMemory::UniquePointer( new Cone(*this) ); +} + diff --git a/Code/OysterPhysics3D/Cone.h b/Code/OysterPhysics3D/Cone.h new file mode 100644 index 00000000..3bae3df3 --- /dev/null +++ b/Code/OysterPhysics3D/Cone.h @@ -0,0 +1,48 @@ +///////////////////////////////////////////////////////////////////// +// Created by Erik Persson 2014 +///////////////////////////////////////////////////////////////////// + +#pragma once +#ifndef OYSTER_COLLISION_3D_CONE_H +#define OYSTER_COLLISION_3D_CONE_H + + +#include "OysterMath.h" +#include "ICollideable.h" + +namespace Oyster +{ + namespace Collision3D + { + class Cone : public ICollideable + { + public: + + Cone(); + Cone( const ::Oyster::Math::Float3 &height, const Oyster::Math::Float3 &position, const ::Oyster::Math::Float &radius ); + Cone( const ::Oyster::Math::Float4 &height, const Oyster::Math::Float4 &position, const ::Oyster::Math::Float &radius ); + virtual ~Cone( ); + + Cone & operator = ( const Cone &Cone ); + + virtual ::Utility::DynamicMemory::UniquePointer Clone( ) const; + + bool Intersects( const ICollideable &target ) const{return false;}; + bool Intersects( const ICollideable &target, ::Oyster::Math::Float4 &worldPointOfContact ) const{return false;}; + bool Contains( const ICollideable &target ) const{return false;}; + + ::Oyster::Math::Float TimeOfContact( const ICollideable &deuterStart, const ICollideable &deuterEnd ) const{return 0;}; + + + Oyster::Math::Float3 height; + Oyster::Math::Float3 position; + Oyster::Math::Float radius; + }; + } + +} + + + + +#endif \ No newline at end of file diff --git a/Code/OysterPhysics3D/ICollideable.h b/Code/OysterPhysics3D/ICollideable.h index 3e63200e..1caf23cf 100644 --- a/Code/OysterPhysics3D/ICollideable.h +++ b/Code/OysterPhysics3D/ICollideable.h @@ -26,7 +26,8 @@ namespace Oyster { namespace Collision3D //! Contains a collection of 3D shapes Type_box_axis_aligned, Type_box, Type_frustrum, - Type_line + Type_line, + Type_cone, }; const Type type; diff --git a/Code/OysterPhysics3D/OysterCollision3D.h b/Code/OysterPhysics3D/OysterCollision3D.h index 83a6239e..3b1e589f 100644 --- a/Code/OysterPhysics3D/OysterCollision3D.h +++ b/Code/OysterPhysics3D/OysterCollision3D.h @@ -17,6 +17,7 @@ #include "Box.h" #include "Frustrum.h" #include "Line.h" +#include "Cone.h" namespace Oyster { namespace Collision3D { namespace Utility { diff --git a/Code/OysterPhysics3D/OysterPhysics3D.vcxproj b/Code/OysterPhysics3D/OysterPhysics3D.vcxproj index dffeca4f..2998c1bb 100644 --- a/Code/OysterPhysics3D/OysterPhysics3D.vcxproj +++ b/Code/OysterPhysics3D/OysterPhysics3D.vcxproj @@ -154,6 +154,7 @@ + @@ -172,6 +173,7 @@ + diff --git a/Code/OysterPhysics3D/OysterPhysics3D.vcxproj.filters b/Code/OysterPhysics3D/OysterPhysics3D.vcxproj.filters index f6b6d934..4947a4d7 100644 --- a/Code/OysterPhysics3D/OysterPhysics3D.vcxproj.filters +++ b/Code/OysterPhysics3D/OysterPhysics3D.vcxproj.filters @@ -81,6 +81,9 @@ Header Files\Collision + + Header Files\Collision + @@ -131,5 +134,8 @@ Source Files\Physics + + Source Files\Collision + \ No newline at end of file diff --git a/Code/Tester/MainTest.cpp b/Code/Tester/MainTest.cpp index cd614f42..4462f060 100644 --- a/Code/Tester/MainTest.cpp +++ b/Code/Tester/MainTest.cpp @@ -176,7 +176,7 @@ HRESULT InitDirect3D() m->WorldMatrix.m[2][2] = 0.00000005f; m2 = Oyster::Graphics::API::CreateModel(L"char_temporary.dan"); m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3::null,Oyster::Math::Float3(4,0,0),Oyster::Math::Float3::null); - Oyster::Graphics::API::PlayAnimation(m2, L"movement",true); + Oyster::Graphics::API::PlayAnimation(m2, L"movement",false); t = Oyster::Graphics::API::CreateTexture(L"structure_corp_mdg.png"); t2 = Oyster::Graphics::API::CreateTexture(L"whiteGui.png"); @@ -233,14 +233,14 @@ HRESULT Render(float deltaTime) Oyster::Graphics::API::RenderModel(m2); Oyster::Graphics::API::StartGuiRender(); Oyster::Graphics::API::RenderGuiElement(t,Oyster::Math::Float2(0.5f,0.5f),Oyster::Math::Float2(1,1)); - Oyster::Graphics::API::RenderGuiElement(t2,Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float2(0.5f,0.1f)); + //Oyster::Graphics::API::RenderGuiElement(t2,Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float3(1,0,0)); Oyster::Graphics::API::StartTextRender(); std::wstring fps; float f = 1/deltaTime; fps = std::to_wstring(f); //Oyster::Graphics::API::RenderText(L"Lanariel",Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float2(0.5f,0.1f)); //Oyster::Graphics::API::RenderText(L"Lanariel WAS HERE",Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float2(0.5f,0.1f)); - //Oyster::Graphics::API::RenderText(fps,Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float2(0.5f,0.1f)); + Oyster::Graphics::API::RenderText(fps,Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float3(0,1,0)); Oyster::Graphics::API::EndFrame(); return S_OK;