Players are being added in the client
The client sends a debug player to the server, with a constant movement to show that the new client _is_ connecting. The next thing to add is the sync system, so that the clients know what the server looks like when they first join.
This commit is contained in:
+61
-26
@@ -35,7 +35,16 @@ InWorld::InWorld() {
|
|||||||
#endif
|
#endif
|
||||||
cout << "Client Index: " << infoMgr->GetClientIndex() << endl;
|
cout << "Client Index: " << infoMgr->GetClientIndex() << endl;
|
||||||
font.SetSurface(surfaceMgr->Get("font"));
|
font.SetSurface(surfaceMgr->Get("font"));
|
||||||
pc.GetSprite()->SetSurface(surfaceMgr->Get("elliot"), 32, 48);
|
|
||||||
|
//debugging
|
||||||
|
Packet::Packet p;
|
||||||
|
p.meta.type = Packet::Type::PLAYER_NEW;
|
||||||
|
snprintf(p.playerNew.handle, PACKET_STRING_SIZE, "%s", configUtil->CString("handle"));
|
||||||
|
snprintf(p.playerNew.avatar, PACKET_STRING_SIZE, "%s", configUtil->CString("avatar"));
|
||||||
|
p.playerNew.position = {0, 50};
|
||||||
|
p.playerNew.motion = {140, 0};
|
||||||
|
|
||||||
|
netUtil->Send(GAME_CHANNEL, &p, sizeof(Packet::Packet));
|
||||||
}
|
}
|
||||||
|
|
||||||
InWorld::~InWorld() {
|
InWorld::~InWorld() {
|
||||||
@@ -54,7 +63,10 @@ void InWorld::FrameStart() {
|
|||||||
|
|
||||||
void InWorld::Update(double delta) {
|
void InWorld::Update(double delta) {
|
||||||
while(HandlePacket(popNetworkPacket()));
|
while(HandlePacket(popNetworkPacket()));
|
||||||
pc.Update(delta);
|
|
||||||
|
for (map<int,PlayerCharacter>::iterator it = playerCharacters.begin(); it != playerCharacters.end(); it++) {
|
||||||
|
it->second.Update(delta);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::FrameEnd() {
|
void InWorld::FrameEnd() {
|
||||||
@@ -64,7 +76,9 @@ void InWorld::FrameEnd() {
|
|||||||
void InWorld::Render(SDL_Surface* const screen) {
|
void InWorld::Render(SDL_Surface* const screen) {
|
||||||
ClockFrameRate();
|
ClockFrameRate();
|
||||||
|
|
||||||
pc.DrawTo(screen);
|
for (map<int,PlayerCharacter>::iterator it = playerCharacters.begin(); it != playerCharacters.end(); it++) {
|
||||||
|
it->second.DrawTo(screen);
|
||||||
|
}
|
||||||
|
|
||||||
//since we're using this twice, make a tmp var
|
//since we're using this twice, make a tmp var
|
||||||
string fps = itos(GetFrameRate());
|
string fps = itos(GetFrameRate());
|
||||||
@@ -99,16 +113,16 @@ void InWorld::KeyDown(SDL_KeyboardEvent const& key) {
|
|||||||
ExitGame();
|
ExitGame();
|
||||||
break;
|
break;
|
||||||
case SDLK_w:
|
case SDLK_w:
|
||||||
pc.MoveDirection(CardinalDirection::NORTH);
|
//up
|
||||||
break;
|
break;
|
||||||
case SDLK_s:
|
case SDLK_s:
|
||||||
pc.MoveDirection(CardinalDirection::SOUTH);
|
//down
|
||||||
break;
|
break;
|
||||||
case SDLK_a:
|
case SDLK_a:
|
||||||
pc.MoveDirection(CardinalDirection::EAST);
|
//left
|
||||||
break;
|
break;
|
||||||
case SDLK_d:
|
case SDLK_d:
|
||||||
pc.MoveDirection(CardinalDirection::WEST);
|
//right
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,16 +131,16 @@ void InWorld::KeyUp(SDL_KeyboardEvent const& key) {
|
|||||||
//reversed
|
//reversed
|
||||||
switch(key.keysym.sym) {
|
switch(key.keysym.sym) {
|
||||||
case SDLK_w:
|
case SDLK_w:
|
||||||
pc.MoveDirection(CardinalDirection::SOUTH);
|
//
|
||||||
break;
|
break;
|
||||||
case SDLK_s:
|
case SDLK_s:
|
||||||
pc.MoveDirection(CardinalDirection::NORTH);
|
//
|
||||||
break;
|
break;
|
||||||
case SDLK_a:
|
case SDLK_a:
|
||||||
pc.MoveDirection(CardinalDirection::WEST);
|
//
|
||||||
break;
|
break;
|
||||||
case SDLK_d:
|
case SDLK_d:
|
||||||
pc.MoveDirection(CardinalDirection::EAST);
|
//
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -149,33 +163,33 @@ int InWorld::HandlePacket(Packet::Packet p) {
|
|||||||
case Packet::Type::PONG:
|
case Packet::Type::PONG:
|
||||||
//
|
//
|
||||||
break;
|
break;
|
||||||
// case PacketType::BROADCAST_REQUEST:
|
// case Packet::Type::BROADCAST_REQUEST:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
// case PacketType::BROADCAST_RESPONSE:
|
// case Packet::Type::BROADCAST_RESPONSE:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
// case PacketType::JOIN_REQUEST:
|
// case Packet::Type::JOIN_REQUEST:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
// case PacketType::JOIN_RESPONSE:
|
// case Packet::Type::JOIN_RESPONSE:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
case Packet::Type::DISCONNECT:
|
case Packet::Type::DISCONNECT:
|
||||||
HandleDisconnection(p.disconnect);
|
HandleDisconnection(p.disconnect);
|
||||||
break;
|
break;
|
||||||
// case PacketType::SYNCHRONIZE:
|
// case Packet::Type::SYNCHRONIZE:
|
||||||
// //
|
|
||||||
// break;
|
|
||||||
// case PacketType::PLAYER_NEW:
|
|
||||||
// //
|
|
||||||
// break;
|
|
||||||
// case PacketType::PLAYER_DELETE:
|
|
||||||
// //
|
|
||||||
// break;
|
|
||||||
// case PacketType::PLAYER_MOVE:
|
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
|
case Packet::Type::PLAYER_NEW:
|
||||||
|
AddPlayer(p.playerNew);
|
||||||
|
break;
|
||||||
|
case Packet::Type::PLAYER_DELETE:
|
||||||
|
RemovePlayer(p.playerDelete);
|
||||||
|
break;
|
||||||
|
case Packet::Type::PLAYER_UPDATE:
|
||||||
|
UpdatePlayer(p.playerUpdate);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw(runtime_error("Failed to recognize the packet type: " + itos(int(p.meta.type))));
|
throw(runtime_error("Failed to recognize the packet type: " + itos(int(p.meta.type))));
|
||||||
}
|
}
|
||||||
@@ -189,7 +203,6 @@ void InWorld::Disconnect() {
|
|||||||
p.disconnect.clientIndex = infoMgr->GetClientIndex();
|
p.disconnect.clientIndex = infoMgr->GetClientIndex();
|
||||||
netUtil->Send(GAME_CHANNEL, reinterpret_cast<void*>(&p), sizeof(Packet::Packet));
|
netUtil->Send(GAME_CHANNEL, reinterpret_cast<void*>(&p), sizeof(Packet::Packet));
|
||||||
netUtil->Unbind(GAME_CHANNEL);
|
netUtil->Unbind(GAME_CHANNEL);
|
||||||
endQueueThread();
|
|
||||||
|
|
||||||
//reset the client
|
//reset the client
|
||||||
infoMgr->ResetClientIndex();
|
infoMgr->ResetClientIndex();
|
||||||
@@ -198,11 +211,33 @@ void InWorld::Disconnect() {
|
|||||||
void InWorld::ExitGame() {
|
void InWorld::ExitGame() {
|
||||||
Disconnect();
|
Disconnect();
|
||||||
SetNextScene(SceneList::MAINMENU);
|
SetNextScene(SceneList::MAINMENU);
|
||||||
|
endQueueThread();
|
||||||
cout << "The game session has ended" << endl;
|
cout << "The game session has ended" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleDisconnection(Packet::Disconnect& disconnect) {
|
void InWorld::HandleDisconnection(Packet::Disconnect& disconnect) {
|
||||||
Disconnect();
|
Disconnect();
|
||||||
SetNextScene(SceneList::MAINMENU);
|
SetNextScene(SceneList::MAINMENU);
|
||||||
|
endQueueThread();
|
||||||
cout << "You have been disconnected" << endl;
|
cout << "You have been disconnected" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InWorld::AddPlayer(Packet::PlayerNew& p) {
|
||||||
|
//sprite
|
||||||
|
playerCharacters[p.playerIndex].GetSprite()->SetSurface(surfaceMgr->Get(p.avatar), 32, 48);
|
||||||
|
|
||||||
|
//pos
|
||||||
|
playerCharacters[p.playerIndex].SetPosition(p.position);
|
||||||
|
playerCharacters[p.playerIndex].SetMotion(p.motion);
|
||||||
|
|
||||||
|
//debugging
|
||||||
|
cout << "New player, index " << p.playerIndex << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void InWorld::RemovePlayer(Packet::PlayerDelete& p) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
void InWorld::UpdatePlayer(Packet::PlayerUpdate& p) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|||||||
+10
-4
@@ -23,12 +23,14 @@
|
|||||||
#define INWORLD_HPP_
|
#define INWORLD_HPP_
|
||||||
|
|
||||||
#include "base_scene.hpp"
|
#include "base_scene.hpp"
|
||||||
|
|
||||||
#include "utilities.hpp"
|
#include "utilities.hpp"
|
||||||
#include "defines.hpp"
|
#include "defines.hpp"
|
||||||
#include "singleton.hpp"
|
#include "singleton.hpp"
|
||||||
#include "packet.hpp"
|
#include "packet.hpp"
|
||||||
#include "network_queue.hpp"
|
#include "network_queue.hpp"
|
||||||
#include "information_manager.hpp"
|
#include "information_manager.hpp"
|
||||||
|
#include "player_character.hpp"
|
||||||
|
|
||||||
#include "config_utility.hpp"
|
#include "config_utility.hpp"
|
||||||
#include "surface_manager.hpp"
|
#include "surface_manager.hpp"
|
||||||
@@ -37,8 +39,7 @@
|
|||||||
#include "raster_font.hpp"
|
#include "raster_font.hpp"
|
||||||
#include "frame_rate.hpp"
|
#include "frame_rate.hpp"
|
||||||
|
|
||||||
//debugging
|
#include <map>
|
||||||
#include "player_character.hpp"
|
|
||||||
|
|
||||||
class InWorld : public BaseScene {
|
class InWorld : public BaseScene {
|
||||||
public:
|
public:
|
||||||
@@ -62,11 +63,16 @@ protected:
|
|||||||
void KeyUp(SDL_KeyboardEvent const&);
|
void KeyUp(SDL_KeyboardEvent const&);
|
||||||
|
|
||||||
//Utilities
|
//Utilities
|
||||||
int HandlePacket(Packet::Packet p);
|
int HandlePacket(Packet::Packet);
|
||||||
void Disconnect();
|
void Disconnect();
|
||||||
void ExitGame();
|
void ExitGame();
|
||||||
|
|
||||||
void HandleDisconnection(Packet::Disconnect&);
|
void HandleDisconnection(Packet::Disconnect&);
|
||||||
|
|
||||||
|
void AddPlayer(Packet::PlayerNew&);
|
||||||
|
void RemovePlayer(Packet::PlayerDelete&);
|
||||||
|
void UpdatePlayer(Packet::PlayerUpdate&);
|
||||||
|
|
||||||
//services
|
//services
|
||||||
ConfigUtility* configUtil = Singleton<ConfigUtility>::Get();
|
ConfigUtility* configUtil = Singleton<ConfigUtility>::Get();
|
||||||
SurfaceManager* surfaceMgr = Singleton<SurfaceManager>::Get();
|
SurfaceManager* surfaceMgr = Singleton<SurfaceManager>::Get();
|
||||||
@@ -75,7 +81,7 @@ protected:
|
|||||||
|
|
||||||
//members
|
//members
|
||||||
RasterFont font;
|
RasterFont font;
|
||||||
PlayerCharacter pc;
|
std::map<int, PlayerCharacter> playerCharacters;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+7
-7
@@ -169,31 +169,31 @@ int Lobby::HandlePacket(Packet::Packet p) {
|
|||||||
case Packet::Type::PONG:
|
case Packet::Type::PONG:
|
||||||
//
|
//
|
||||||
break;
|
break;
|
||||||
// case PacketType::BROADCAST_REQUEST:
|
// case Packet::Type::BROADCAST_REQUEST:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
case Packet::Type::BROADCAST_RESPONSE:
|
case Packet::Type::BROADCAST_RESPONSE:
|
||||||
PushServer(p.broadcastResponse);
|
PushServer(p.broadcastResponse);
|
||||||
break;
|
break;
|
||||||
// case PacketType::JOIN_REQUEST:
|
// case Packet::Type::JOIN_REQUEST:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
case Packet::Type::JOIN_RESPONSE:
|
case Packet::Type::JOIN_RESPONSE:
|
||||||
BeginGame(p.joinResponse);
|
BeginGame(p.joinResponse);
|
||||||
break;
|
break;
|
||||||
// case PacketType::DISCONNECT:
|
// case Packet::Type::DISCONNECT:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
// case PacketType::SYNCHRONIZE:
|
// case Packet::Type::SYNCHRONIZE:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
// case PacketType::PLAYER_NEW:
|
// case Packet::Type::PLAYER_NEW:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
// case PacketType::PLAYER_DELETE:
|
// case Packet::Type::PLAYER_DELETE:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
// case PacketType::PLAYER_MOVE:
|
// case Packet::Type::PLAYER_UPDATE:
|
||||||
// //
|
// //
|
||||||
// break;
|
// break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ struct PlayerNew {
|
|||||||
int clientIndex;
|
int clientIndex;
|
||||||
char handle[PACKET_STRING_SIZE];
|
char handle[PACKET_STRING_SIZE];
|
||||||
char avatar[PACKET_STRING_SIZE];
|
char avatar[PACKET_STRING_SIZE];
|
||||||
|
Vector2 position;
|
||||||
|
Vector2 motion;
|
||||||
//TODO Playerdata
|
//TODO Playerdata
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -129,7 +129,16 @@ void ServerApplication::Quit() {
|
|||||||
//-------------------------
|
//-------------------------
|
||||||
|
|
||||||
void ServerApplication::UpdateWorld(double delta) {
|
void ServerApplication::UpdateWorld(double delta) {
|
||||||
//
|
//the recalc here each loop is a stopgap, see issue #9 for details
|
||||||
|
for (map<int, PlayerEntry>::iterator it = players.begin(); it != players.end(); it++) {
|
||||||
|
if (it->second.motion.x != 0 && it->second.motion.y != 0) {
|
||||||
|
constexpr double d = 1.0/sqrt(2);
|
||||||
|
it->second.position += it->second.motion * delta * d;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
it->second.position += it->second.motion * delta;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
@@ -173,7 +182,7 @@ int ServerApplication::HandlePacket(Packet::Packet p) {
|
|||||||
RelayPacket(p);
|
RelayPacket(p);
|
||||||
break;
|
break;
|
||||||
case Packet::Type::PLAYER_DELETE:
|
case Packet::Type::PLAYER_DELETE:
|
||||||
DeletePlayer(p.playerDelete);
|
RemovePlayer(p.playerDelete);
|
||||||
RelayPacket(p);
|
RelayPacket(p);
|
||||||
break;
|
break;
|
||||||
case Packet::Type::PLAYER_UPDATE:
|
case Packet::Type::PLAYER_UPDATE:
|
||||||
@@ -239,31 +248,31 @@ void ServerApplication::HandleDisconnection(Packet::Disconnect& disconnect) {
|
|||||||
cout << "number of clients: " << clients.size() << endl;
|
cout << "number of clients: " << clients.size() << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::AddPlayer(Packet::PlayerNew& playerNew) {
|
void ServerApplication::AddPlayer(Packet::PlayerNew& p) {
|
||||||
//add the player
|
//add the player
|
||||||
PlayerEntry newPlayer = {
|
PlayerEntry newPlayer = {
|
||||||
uniqueIndex++,
|
uniqueIndex++,
|
||||||
playerNew.clientIndex,
|
p.clientIndex,
|
||||||
playerNew.handle,
|
p.handle,
|
||||||
playerNew.avatar,
|
p.avatar,
|
||||||
{0,0},
|
p.position,
|
||||||
{0,0}
|
p.motion
|
||||||
};
|
};
|
||||||
|
|
||||||
players[newPlayer.index] = newPlayer;
|
players[newPlayer.index] = newPlayer;
|
||||||
|
|
||||||
//prep for relay
|
//prep for relay
|
||||||
playerNew.playerIndex = newPlayer.index;
|
p.playerIndex = newPlayer.index;
|
||||||
|
|
||||||
//debugging
|
//debugging
|
||||||
cout << "New player " << newPlayer.handle << "Has joined the game" << endl;
|
cout << "New player " << newPlayer.handle << "Has joined the game" << endl;
|
||||||
cout << "Number of players: " << players.size() << endl;
|
cout << "Number of players: " << players.size() << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::DeletePlayer(Packet::PlayerDelete& playerDelete) {
|
void ServerApplication::RemovePlayer(Packet::PlayerDelete& p) {
|
||||||
//TODO remove a player
|
//TODO remove a player
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::UpdatePlayer(Packet::PlayerUpdate& playerUpdate) {
|
void ServerApplication::UpdatePlayer(Packet::PlayerUpdate& p) {
|
||||||
//TODO update a player
|
//TODO update a player
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ private:
|
|||||||
void HandleDisconnection(Packet::Disconnect&);
|
void HandleDisconnection(Packet::Disconnect&);
|
||||||
|
|
||||||
void AddPlayer(Packet::PlayerNew&);
|
void AddPlayer(Packet::PlayerNew&);
|
||||||
void DeletePlayer(Packet::PlayerDelete&);
|
void RemovePlayer(Packet::PlayerDelete&);
|
||||||
void UpdatePlayer(Packet::PlayerUpdate&);
|
void UpdatePlayer(Packet::PlayerUpdate&);
|
||||||
|
|
||||||
//services
|
//services
|
||||||
|
|||||||
Reference in New Issue
Block a user