diff --git a/Code/Game/GameClient/GameClientState/GameState.cpp b/Code/Game/GameClient/GameClientState/GameState.cpp
index 462422a6..a4e22bbc 100644
--- a/Code/Game/GameClient/GameClientState/GameState.cpp
+++ b/Code/Game/GameClient/GameClientState/GameState.cpp
@@ -327,7 +327,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->privData->nwClient->Send( Protocol_PlayerLeftTurn(yaw * mouseSensitivity) );
+ }
}
// shoot
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/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();