diff --git a/Code/Game/GameClient/GameClientState/C_Object.cpp b/Code/Game/GameClient/GameClientState/C_Object.cpp index 50664a92..b4f18d34 100644 --- a/Code/Game/GameClient/GameClientState/C_Object.cpp +++ b/Code/Game/GameClient/GameClientState/C_Object.cpp @@ -5,7 +5,7 @@ C_Object::C_Object() world = Oyster::Math::Float4x4::identity; position = Oyster::Math::Float3::null; rotation = Oyster::Math::Quaternion::identity; - scale = Oyster::Math::Float3::null; + scale = Oyster::Math::Float3(1); id = 0; model = NULL; @@ -89,7 +89,10 @@ int C_Object::GetId() const } void C_Object::Render() { - Oyster::Graphics::API::RenderModel(model); + if( this->model ) + { + Oyster::Graphics::API::RenderModel(model); + } } void C_Object::Release() { @@ -100,6 +103,26 @@ void C_Object::Release() } } +Oyster::Math::Float3 C_Object::GetTint() +{ + return model->Tint; +} + +Oyster::Math::Float3 C_Object::GetGlowTint() +{ + return model->GlowTint; +} + +void C_Object::SetTint(Oyster::Math::Float3 tint) +{ + model->Tint = tint; +} + +void C_Object::SetGlowTint(Oyster::Math::Float3 tint) +{ + model->GlowTint = tint; +} + //////////////////////////////////////////////// @@ -113,14 +136,16 @@ bool C_Object::InitRB(RBInitData RBInit) type = RBInit.type; return true; } +void C_Object::updateRBWorld() +{ + Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(this->position); + Oyster::Math3D::Float4x4 rot = Oyster::Math3D::RotationMatrix(this->rotation); + Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(this->scale); + RBworld = translation * rot * scale; +} Oyster::Math::Float4x4 C_Object::getRBWorld() const { - Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(this->RBposition); - Oyster::Math3D::Float4x4 rot = Oyster::Math3D::RotationMatrix(this->RBrotation); - Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(this->RBscale); - Oyster::Math3D::Float4x4 world = translation * rot * scale; - - return world; + return RBworld; } void C_Object::setRBPos(Oyster::Math::Float3 newPos) { diff --git a/Code/Game/GameClient/GameClientState/C_Object.h b/Code/Game/GameClient/GameClientState/C_Object.h index dcc2731c..fd118068 100644 --- a/Code/Game/GameClient/GameClientState/C_Object.h +++ b/Code/Game/GameClient/GameClientState/C_Object.h @@ -40,6 +40,7 @@ namespace DanBias Oyster::Math::Float3 scale; // RB DEBUG + Oyster::Math::Float4x4 RBworld; Oyster::Math::Float3 RBposition; Oyster::Math::Quaternion RBrotation; Oyster::Math::Float3 RBscale; @@ -66,7 +67,15 @@ namespace DanBias void addScale(Oyster::Math::Float3 deltaScale); Oyster::Math::Float3 getScale() const; + Oyster::Math::Float3 GetTint(); + Oyster::Math::Float3 GetGlowTint(); + + void SetTint(Oyster::Math::Float3); + void SetGlowTint(Oyster::Math::Float3); + + // RB DEBUG + void updateRBWorld(); bool InitRB(RBInitData modelInit); Oyster::Math::Float4x4 getRBWorld() const; void setRBPos(Oyster::Math::Float3 newPos); diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp index 462422a6..532bd29d 100644 --- a/Code/Game/GameClient/GameClientState/GameState.cpp +++ b/Code/Game/GameClient/GameClientState/GameState.cpp @@ -126,6 +126,7 @@ void GameState::InitiatePlayer( int id, const std::string &modelName, const floa RBData.position = position; RBData.rotation = ArrayToQuaternion( rotation ); RBData.scale = scale; + RBData.type = RB_Type_Cube; // !RB DEBUG if( isMyPlayer ) { @@ -138,7 +139,10 @@ void GameState::InitiatePlayer( int id, const std::string &modelName, const floa this->privData->myId = id; this->privData->camera.SetPosition( this->privData->player.getPos() ); Float3 offset = Float3( 0.0f ); - offset.y = this->privData->player.getScale().y * 0.9f; + // DEBUG position of camera so we can see the player model + offset.y = this->privData->player.getScale().y * 5.0f; + offset.z = this->privData->player.getScale().z * -5.0f; + // !DEBUG this->privData->camera.SetHeadOffset( offset ); this->privData->camera.UpdateOrientation(); } @@ -182,7 +186,9 @@ bool GameState::Render() for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject ) { if( dynamicObject->second ) + { dynamicObject->second->Render(); + } } @@ -327,7 +333,11 @@ void GameState::ReadKeyInput() { static const float mouseSensitivity = Radian( 1.0f ); this->privData->camera.PitchDown( this->privData->input->GetPitch() * mouseSensitivity ); - this->privData->nwClient->Send( Protocol_PlayerLeftTurn(this->privData->input->GetYaw() * mouseSensitivity) ); + float yaw = this->privData->input->GetYaw(); + //if( yaw != 0.0f ) //This made the camera reset to a specific rotation. + { + this->privData->nwClient->Send( Protocol_PlayerLeftTurn(yaw * mouseSensitivity) ); + } } // shoot @@ -496,6 +506,12 @@ const GameClientState::NetEvent & GameState::DataRecieved( const GameClientState this->privData->camera.SetRotation( rotation ); this->privData->player.setPos( position ); this->privData->player.setRot( rotation ); + this->privData->player.updateWorld(); + // RB DEBUG + this->privData->player.setRBPos ( position ); + this->privData->player.setRBRot ( rotation ); + this->privData->player.updateRBWorld(); + // !RB DEBUG } C_DynamicObj *object = (*this->privData->dynamicObjects)[decoded.object_ID]; @@ -504,9 +520,11 @@ const GameClientState::NetEvent & GameState::DataRecieved( const GameClientState { object->setPos( position ); object->setRot( rotation ); + object->updateWorld(); // RB DEBUG object->setRBPos ( position ); object->setRBRot ( rotation ); + object->updateRBWorld(); // !RB DEBUG } } diff --git a/Code/Game/GameClient/GameClientState/MainState.cpp b/Code/Game/GameClient/GameClientState/MainState.cpp index f34b9ad6..5b96b385 100644 --- a/Code/Game/GameClient/GameClientState/MainState.cpp +++ b/Code/Game/GameClient/GameClientState/MainState.cpp @@ -79,9 +79,10 @@ GameClientState::ClientState MainState::Update( float deltaTime ) { bool test = this->privData->input->IsMousePressed(); if(test) - { + { // HACK: debug trap still in use? int i = 0; }; + this->privData->input->GetMousePos( mouseState.x, mouseState.y ); mouseState.mouseButtonPressed = this->privData->input->IsMousePressed(); } diff --git a/Code/Game/GameClient/GameClientState/NetLoadState.cpp b/Code/Game/GameClient/GameClientState/NetLoadState.cpp index de4f57d5..9ef0dac9 100644 --- a/Code/Game/GameClient/GameClientState/NetLoadState.cpp +++ b/Code/Game/GameClient/GameClientState/NetLoadState.cpp @@ -157,6 +157,7 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size * 2; RBData.type = RB_Type_Cube; staticObject->InitRB( RBData ); + staticObject->updateRBWorld(); } if(oh->boundingVolume.geoType == CollisionGeometryType_Sphere) @@ -166,6 +167,7 @@ void NetLoadState::LoadGame( const ::std::string &fileName ) RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius * 2; RBData.type = RB_Type_Sphere; staticObject->InitRB( RBData ); + staticObject->updateRBWorld(); } // !RB DEBUG diff --git a/Code/Game/GameLogic/Game_PlayerData.cpp b/Code/Game/GameLogic/Game_PlayerData.cpp index ed964724..045da742 100644 --- a/Code/Game/GameLogic/Game_PlayerData.cpp +++ b/Code/Game/GameLogic/Game_PlayerData.cpp @@ -5,7 +5,7 @@ using namespace GameLogic; Game::PlayerData::PlayerData() { - Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,250,0); + Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,180,0); Oyster::Math::Float height = 2.0f; Oyster::Math::Float radius = 0.5f; Oyster::Math::Float mass = 40; @@ -24,7 +24,7 @@ Game::PlayerData::PlayerData() Game::PlayerData::PlayerData(int playerID,int teamID) { - Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,250,0); + Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(-50,180,0); Oyster::Math::Float height = 2.0f; Oyster::Math::Float radius = 0.5f; Oyster::Math::Float mass = 40; diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index 9febbe47..c9938dbd 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -300,6 +300,7 @@ bool Level::InitiateLevel(std::wstring levelPath) Object* dynamicGameObj = CreateGameObj(dynamicObjData, rigidBody_Dynamic); if (dynamicGameObj != NULL) { + dynamicGameObj->GetRigidBody()->SetSubscription(Level::PhysicsOnMoveLevel); this->dynamicObjects.Push((DynamicObject*)dynamicGameObj); } } diff --git a/Code/Game/GameLogic/Player.cpp b/Code/Game/GameLogic/Player.cpp index 77953d43..848c528a 100644 --- a/Code/Game/GameLogic/Player.cpp +++ b/Code/Game/GameLogic/Player.cpp @@ -127,7 +127,7 @@ void Player::BeginFrame() } - if (key_forward <= 0.001 && key_backward <= 0.001 && key_strafeRight <= 0.001 && key_strafeLeft <= 0.001 && key_jump <= 0.001 ) //&& this->rigidBody->GetLambda() < 0.7f) + if (key_forward <= 0.001 && key_backward <= 0.001 && key_strafeRight <= 0.001 && key_strafeLeft <= 0.001 && key_jump <= 0.001 && this->rigidBody->GetLambda() < 0.7f) { /* Dampen when on the ground and not being moved by the player */ linearVelocity *= 0.2f; diff --git a/Code/Game/GameProtocols/PlayerProtocols.h b/Code/Game/GameProtocols/PlayerProtocols.h index 57137fb4..350c2cf6 100644 --- a/Code/Game/GameProtocols/PlayerProtocols.h +++ b/Code/Game/GameProtocols/PlayerProtocols.h @@ -97,6 +97,8 @@ namespace GameLogic { this->protocol[0].value = protocol_Gameplay_PlayerLeftTurn; this->protocol[0].type = ::Oyster::Network::NetAttributeType_Short; + // deltaRadian + this->protocol[1].type = ::Oyster::Network::NetAttributeType_Float; this->deltaRadian = deltaRadian; } diff --git a/Code/Misc/Input/Input.vcxproj b/Code/Misc/Input/Input.vcxproj index 8642e69e..6e945f94 100644 --- a/Code/Misc/Input/Input.vcxproj +++ b/Code/Misc/Input/Input.vcxproj @@ -28,6 +28,7 @@ + @@ -35,6 +36,7 @@ + diff --git a/Code/Misc/Input/L_inputClass.cpp b/Code/Misc/Input/L_inputClass.cpp index 03271333..c0fe6a63 100644 --- a/Code/Misc/Input/L_inputClass.cpp +++ b/Code/Misc/Input/L_inputClass.cpp @@ -189,7 +189,7 @@ float InputClass::GetPitch( ) float InputClass::GetYaw( ) { float dX = (static_cast( m_mouseState.lX)/5); - return -dX; + return dX; } bool InputClass::IsMousePressed() diff --git a/Code/Network/NetworkDependencies/ConnectionUDP.cpp b/Code/Network/NetworkDependencies/ConnectionUDP.cpp new file mode 100644 index 00000000..e7d065a6 --- /dev/null +++ b/Code/Network/NetworkDependencies/ConnectionUDP.cpp @@ -0,0 +1,218 @@ +#include "ConnectionUDP.h" + +#include + +using namespace Oyster::Network; + +ConnectionUDP::ConnectionUDP() +{ + this->ipSize = 16; + this->socket = -1; + this->stillSending = false; + this->closed = true; + this->Address = NULL; +} + +ConnectionUDP::ConnectionUDP( int socket ) +{ + this->ipSize = 16; + this->socket = socket; + this->stillSending = false; + this->closed = true; + this->Address = NULL; +} + +ConnectionUDP::~ConnectionUDP() +{ + closesocket( this->socket ); +} + +int ConnectionUDP::Connect(unsigned short port, const char serverName[]) +{ + this->port = port; + + closed = false; + stillSending = true; + + struct hostent *hostEnt; + if((hostEnt = gethostbyname(serverName)) == NULL) + { + return SOCKET_ERROR; + } + + + this->Address = *(unsigned long*)hostEnt->h_addr; + this->port = htons(this->port); + return 0; +} + +int ConnectionUDP::Disconnect() +{ + int result = closesocket(this->socket); + + if(result == SOCKET_ERROR) + { + return result; + } + + return 0; +} + +int ConnectionUDP::InitiateServer(unsigned short port) +{ + int errorCode = 0; + + if((errorCode = InitiateSocket()) != 0) + { + return errorCode; + } + + struct sockaddr_in server; + server.sin_family = AF_INET; + server.sin_addr.s_addr = INADDR_ANY; + server.sin_port = htons(port); + + if(bind(this->socket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) + { + errorCode = SOCKET_ERROR; + closesocket(this->socket); + return errorCode; + } + + closed = false; + stillSending = true; + return 0; +} + +int ConnectionUDP::InitiateClient() +{ + return InitiateSocket(); +} + +int ConnectionUDP::InitiateBroadcast(unsigned short port) +{ + int result = InitiateSocket(); + + + int flag = 1; + result = setsockopt(this->socket, /* socket affected */ + SOL_SOCKET, /* set option at TCP level */ + SO_BROADCAST, /* name of option */ + (char *) &flag, /* the cast is historical cruft */ + sizeof(flag)); /* length of option value */ + if (result < 0) + return -1; +} + +int ConnectionUDP::Send(OysterByte &bytes) +{ + int nBytes; + struct sockaddr_in reciever; + reciever.sin_family = AF_INET; + reciever.sin_addr.s_addr = this->Address; + reciever.sin_port = port; + + //printf("Send: %d\n", bytes.GetSize()); + nBytes = sendto(this->socket, + bytes, + bytes.GetSize(), + 0, + (sockaddr*)&reciever, + sizeof(sockaddr_in) + ); + + if ( nBytes != bytes.GetSize() ) + { + return nBytes; + } + + return 0; +} + +int ConnectionUDP::Recieve(OysterByte &bytes) +{ + int nBytes; + sockaddr_in from; + int fromLength = sizeof( from ); + + bytes.Resize(1000); + nBytes = recvfrom(this->socket, + bytes, + 1000, + 0, + (sockaddr*)&from, + &fromLength + ); + + + if(nBytes <= 0) + { + bytes.SetSize(0); + return WSAGetLastError(); + } + else + { + bytes.SetSize(nBytes); + } + + + //address and port of the client who sent the message + unsigned int from_address = ntohl( from.sin_addr.s_addr ); + unsigned int from_port = ntohs( from.sin_port ); + + + return 0; +} + +bool ConnectionUDP::IsSending() +{ + return stillSending; +} + +bool ConnectionUDP::IsConnected() +{ + if(closed) + { + return false; + } + + return true; +} + +int ConnectionUDP::SetBlockingMode( bool blocking ) +{ + DWORD nonBlocking; + + if(blocking) + { + nonBlocking = 0; + } + else + { + nonBlocking = 1; + } + + int result = ioctlsocket(this->socket, FIONBIO, &nonBlocking); + if(result != 0) + { + return result; + } + + //Success + return 0; +} +////////////////////////////////////// +// Private Methods +////////////////////////////////////// + +int ConnectionUDP::InitiateSocket() +{ + this->socket = (int)::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + + if(this->socket == SOCKET_ERROR) + { + return socket; + } + + return 0; +} \ No newline at end of file diff --git a/Code/Network/NetworkDependencies/ConnectionUDP.h b/Code/Network/NetworkDependencies/ConnectionUDP.h new file mode 100644 index 00000000..163ad741 --- /dev/null +++ b/Code/Network/NetworkDependencies/ConnectionUDP.h @@ -0,0 +1,57 @@ +#ifndef NETWORK_DEPENDENCIES_CONNECTIONUDP_H +#define NETWORK_DEPENDENCIES_CONNECTIONUDP_H + +////////////////////////////////// +// Created by Sam Svensson 2013 // +////////////////////////////////// + +#include "IConnection.h" +#include "../NetworkDependencies/OysterByte.h" + +namespace Oyster +{ + namespace Network + { + class ConnectionUDP : public IConnection + { + public: + ConnectionUDP(); + ConnectionUDP( int socket); + virtual ~ConnectionUDP(); + + virtual int InitiateServer( unsigned short port ); + virtual int InitiateClient(); + + virtual int InitiateBroadcast(unsigned short port); + + virtual int Send ( OysterByte &byte ); + virtual int Recieve( OysterByte &byte ); + + virtual int Connect( unsigned short port, const char serverName[] ); + + virtual int Disconnect(); + + bool IsSending(); + bool IsConnected(); + int GetIpSize(); + + int SetBlockingMode( bool blocking ); + + private: + int InitiateSocket(); + + int socket; + //char ipAddress[16]; + //unsigned short port; + int ipSize; + + unsigned long Address; + unsigned short port; + + bool stillSending; + bool closed; + }; + } +} + +#endif diff --git a/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj b/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj index 79521d28..9f508f0c 100644 --- a/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj +++ b/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj @@ -147,6 +147,7 @@ + @@ -157,6 +158,7 @@ + diff --git a/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj.filters b/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj.filters index 6a695e88..f24743d1 100644 --- a/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj.filters +++ b/Code/Network/NetworkDependencies/NetworkDependencies.vcxproj.filters @@ -9,6 +9,7 @@ + @@ -25,5 +26,6 @@ + \ No newline at end of file diff --git a/Code/OysterGraphics/Definitions/GraphicalDefinition.h b/Code/OysterGraphics/Definitions/GraphicalDefinition.h index fcfd865c..c9b42c00 100644 --- a/Code/OysterGraphics/Definitions/GraphicalDefinition.h +++ b/Code/OysterGraphics/Definitions/GraphicalDefinition.h @@ -79,6 +79,14 @@ namespace Oyster unsigned int StopY; Math::Float4 BlurMask; }; + + struct TintData + { + Math::Float3 Tint; + Math::Float PAD; + Math::Float3 GlowTint; + Math::Float PAD2; + }; } } } \ No newline at end of file diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp index 36cbfd54..41063265 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp @@ -139,6 +139,7 @@ namespace Oyster m->Visible = true; m->Animation.AnimationPlaying = NULL; m->Tint = Math::Float3(1); + m->GlowTint = Math::Float3(1); m->info = (Model::ModelInfo*)Core::loader.LoadResource((Core::modelPath + filename).c_str(),Oyster::Graphics::Loading::LoadDAN, Oyster::Graphics::Loading::UnloadDAN); Model::ModelInfo* mi = (Model::ModelInfo*)m->info; @@ -224,7 +225,7 @@ namespace Oyster #else API::State API::ReloadShaders() { - + return API::State::Sucsess; } void API::StartRenderWireFrame() diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.h b/Code/OysterGraphics/DllInterfaces/GFXAPI.h index 71e12662..827f639f 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.h +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.h @@ -38,7 +38,7 @@ namespace Oyster typedef void* Texture; static State Init(HWND Window, bool MSAA_Quality, bool Fullscreen, Option options); -#ifdef _DEBUG + static State ReloadShaders(); //should be called after rendered normal models, before GUI or Text rendering @@ -51,7 +51,6 @@ namespace Oyster static void RenderDebugSphere(Math::Matrix world); static void StartRenderFullModel(); -#endif //! @todo Memory Leaks diff --git a/Code/OysterGraphics/Model/Model.h b/Code/OysterGraphics/Model/Model.h index b264cf50..5985dbcd 100644 --- a/Code/OysterGraphics/Model/Model.h +++ b/Code/OysterGraphics/Model/Model.h @@ -24,6 +24,7 @@ namespace Oyster ModelInfo* info; Oyster::Math::Float4x4 WorldMatrix; Oyster::Math::Float3 Tint; + Oyster::Math::Float3 GlowTint; bool Visible; AnimationData Animation; }; diff --git a/Code/OysterGraphics/Render/DefaultRenderer.cpp b/Code/OysterGraphics/Render/DefaultRenderer.cpp index 689c3abe..7d0d987b 100644 --- a/Code/OysterGraphics/Render/DefaultRenderer.cpp +++ b/Code/OysterGraphics/Render/DefaultRenderer.cpp @@ -136,8 +136,15 @@ namespace Oyster memcpy(data,&(pm),sizeof(pm)); Resources::Gather::ModelData.Unmap(); + Definitions::TintData td; + td.GlowTint = models[i].GlowTint; + td.Tint = models[i].Tint; + td.PAD = 0; + td.PAD2 = 0; + int s = sizeof(Definitions::TintData); + data = Render::Resources::Color.Map(); - memcpy(data,&models[i].Tint,sizeof(Math::Float3)); + memcpy(data,&td,sizeof(Definitions::TintData)); Render::Resources::Color.Unmap(); if(info->Material.size()) diff --git a/Code/OysterGraphics/Render/Resources.cpp b/Code/OysterGraphics/Render/Resources.cpp index 1de7d4ce..2e693472 100644 --- a/Code/OysterGraphics/Render/Resources.cpp +++ b/Code/OysterGraphics/Render/Resources.cpp @@ -123,7 +123,7 @@ namespace Oyster Gather::AnimationData.Init(desc); desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_PS; - desc.ElementSize = sizeof(Math::Float3); + desc.ElementSize = sizeof(Definitions::TintData); Color.Init(desc); desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_GS; @@ -176,7 +176,7 @@ namespace Oyster sdesc.Filter = D3D11_FILTER_ANISOTROPIC; sdesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; sdesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; - sdesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; + sdesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; sdesc.MipLODBias = 0; sdesc.MaxAnisotropy =4; sdesc.ComparisonFunc = D3D11_COMPARISON_LESS_EQUAL; diff --git a/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl b/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl index d9545573..af095acf 100644 --- a/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl +++ b/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl @@ -40,7 +40,10 @@ float3 perturb_normal( float3 N, float3 V, float2 texcoord ) PixelOut main(VertexOut input) { PixelOut output; - output.DiffuseGlow = Diffuse.Sample(S1, input.UV) * float4(Color, 1); + float4 DiffGlow = Diffuse.Sample(S1, input.UV); + float3 tint = Color*(1-DiffGlow) + GlowColor * DiffGlow; + tint = tint / 2; + output.DiffuseGlow = DiffGlow * float4(tint,1); //NORMALIZE float3x3 CoTangentFrame = cotangent_frame(input.normal, normalize(input.ViewPos), input.UV); diff --git a/Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli b/Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli index 7584fcd3..75a297bb 100644 --- a/Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli +++ b/Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli @@ -42,4 +42,7 @@ cbuffer PerModel : register(b1) cbuffer Tint : register(b0) { float3 Color; + float PAD; + float3 GlowColor; + float PAD2; } \ No newline at end of file diff --git a/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.cpp b/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.cpp index f2f97280..df66bc12 100644 --- a/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.cpp +++ b/Code/Physics/GamePhysics/Implementation/PhysicsAPI_Impl.cpp @@ -283,6 +283,11 @@ void API_Impl::UpdateWorld() SimpleRigidBody* simpleBody = dynamic_cast(this->customBodies[i]); this->customBodies[i]->SetGravity(-(this->customBodies[i]->GetState().centerPos - this->gravityPoint).GetNormalized()*this->gravity); simpleBody->PreStep(this->dynamicsWorld); + + if(simpleBody->GetRigidBody()->getActivationState() == ACTIVE_TAG) + { + this->customBodies[i]->CallSubscription_Move(); + } } this->dynamicsWorld->stepSimulation(this->timeStep, 1, this->timeStep); @@ -295,12 +300,7 @@ void API_Impl::UpdateWorld() btTransform trans; trans = simpleBody->GetRigidBody()->getWorldTransform(); this->customBodies[i]->SetPosition(Float3(trans.getOrigin().x(), trans.getOrigin().y(), trans.getOrigin().z())); - this->customBodies[i]->SetRotation(Quaternion(Float3(trans.getRotation().x(), trans.getRotation().y(), trans.getRotation().z()), trans.getRotation().w())); - - if(simpleBody->GetRigidBody()->getActivationState() == ACTIVE_TAG) - { - this->customBodies[i]->CallSubscription_Move(); - } + this->customBodies[i]->SetRotation(Quaternion(Float3(trans.getRotation().x(), trans.getRotation().y(), trans.getRotation().z()), trans.getRotation().w())); } int numManifolds = this->dynamicsWorld->getDispatcher()->getNumManifolds();