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:
Kayne Ruse
2013-06-24 16:15:48 +10:00
parent 2235f307e7
commit 3f2fcdf9e1
6 changed files with 101 additions and 49 deletions
+61 -26
View File
@@ -35,7 +35,16 @@ InWorld::InWorld() {
#endif
cout << "Client Index: " << infoMgr->GetClientIndex() << endl;
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() {
@@ -54,7 +63,10 @@ void InWorld::FrameStart() {
void InWorld::Update(double delta) {
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() {
@@ -64,7 +76,9 @@ void InWorld::FrameEnd() {
void InWorld::Render(SDL_Surface* const screen) {
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
string fps = itos(GetFrameRate());
@@ -99,16 +113,16 @@ void InWorld::KeyDown(SDL_KeyboardEvent const& key) {
ExitGame();
break;
case SDLK_w:
pc.MoveDirection(CardinalDirection::NORTH);
//up
break;
case SDLK_s:
pc.MoveDirection(CardinalDirection::SOUTH);
//down
break;
case SDLK_a:
pc.MoveDirection(CardinalDirection::EAST);
//left
break;
case SDLK_d:
pc.MoveDirection(CardinalDirection::WEST);
//right
break;
}
}
@@ -117,16 +131,16 @@ void InWorld::KeyUp(SDL_KeyboardEvent const& key) {
//reversed
switch(key.keysym.sym) {
case SDLK_w:
pc.MoveDirection(CardinalDirection::SOUTH);
//
break;
case SDLK_s:
pc.MoveDirection(CardinalDirection::NORTH);
//
break;
case SDLK_a:
pc.MoveDirection(CardinalDirection::WEST);
//
break;
case SDLK_d:
pc.MoveDirection(CardinalDirection::EAST);
//
break;
}
}
@@ -149,33 +163,33 @@ int InWorld::HandlePacket(Packet::Packet p) {
case Packet::Type::PONG:
//
break;
// case PacketType::BROADCAST_REQUEST:
// case Packet::Type::BROADCAST_REQUEST:
// //
// break;
// case PacketType::BROADCAST_RESPONSE:
// case Packet::Type::BROADCAST_RESPONSE:
// //
// break;
// case PacketType::JOIN_REQUEST:
// case Packet::Type::JOIN_REQUEST:
// //
// break;
// case PacketType::JOIN_RESPONSE:
// case Packet::Type::JOIN_RESPONSE:
// //
// break;
case Packet::Type::DISCONNECT:
HandleDisconnection(p.disconnect);
break;
// case PacketType::SYNCHRONIZE:
// //
// break;
// case PacketType::PLAYER_NEW:
// //
// break;
// case PacketType::PLAYER_DELETE:
// //
// break;
// case PacketType::PLAYER_MOVE:
// case Packet::Type::SYNCHRONIZE:
// //
// 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:
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();
netUtil->Send(GAME_CHANNEL, reinterpret_cast<void*>(&p), sizeof(Packet::Packet));
netUtil->Unbind(GAME_CHANNEL);
endQueueThread();
//reset the client
infoMgr->ResetClientIndex();
@@ -198,11 +211,33 @@ void InWorld::Disconnect() {
void InWorld::ExitGame() {
Disconnect();
SetNextScene(SceneList::MAINMENU);
endQueueThread();
cout << "The game session has ended" << endl;
}
void InWorld::HandleDisconnection(Packet::Disconnect& disconnect) {
Disconnect();
SetNextScene(SceneList::MAINMENU);
endQueueThread();
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
View File
@@ -23,12 +23,14 @@
#define INWORLD_HPP_
#include "base_scene.hpp"
#include "utilities.hpp"
#include "defines.hpp"
#include "singleton.hpp"
#include "packet.hpp"
#include "network_queue.hpp"
#include "information_manager.hpp"
#include "player_character.hpp"
#include "config_utility.hpp"
#include "surface_manager.hpp"
@@ -37,8 +39,7 @@
#include "raster_font.hpp"
#include "frame_rate.hpp"
//debugging
#include "player_character.hpp"
#include <map>
class InWorld : public BaseScene {
public:
@@ -62,11 +63,16 @@ protected:
void KeyUp(SDL_KeyboardEvent const&);
//Utilities
int HandlePacket(Packet::Packet p);
int HandlePacket(Packet::Packet);
void Disconnect();
void ExitGame();
void HandleDisconnection(Packet::Disconnect&);
void AddPlayer(Packet::PlayerNew&);
void RemovePlayer(Packet::PlayerDelete&);
void UpdatePlayer(Packet::PlayerUpdate&);
//services
ConfigUtility* configUtil = Singleton<ConfigUtility>::Get();
SurfaceManager* surfaceMgr = Singleton<SurfaceManager>::Get();
@@ -75,7 +81,7 @@ protected:
//members
RasterFont font;
PlayerCharacter pc;
std::map<int, PlayerCharacter> playerCharacters;
};
#endif
+7 -7
View File
@@ -169,31 +169,31 @@ int Lobby::HandlePacket(Packet::Packet p) {
case Packet::Type::PONG:
//
break;
// case PacketType::BROADCAST_REQUEST:
// case Packet::Type::BROADCAST_REQUEST:
// //
// break;
case Packet::Type::BROADCAST_RESPONSE:
PushServer(p.broadcastResponse);
break;
// case PacketType::JOIN_REQUEST:
// case Packet::Type::JOIN_REQUEST:
// //
// break;
case Packet::Type::JOIN_RESPONSE:
BeginGame(p.joinResponse);
break;
// case PacketType::DISCONNECT:
// case Packet::Type::DISCONNECT:
// //
// break;
// case PacketType::SYNCHRONIZE:
// case Packet::Type::SYNCHRONIZE:
// //
// break;
// case PacketType::PLAYER_NEW:
// case Packet::Type::PLAYER_NEW:
// //
// break;
// case PacketType::PLAYER_DELETE:
// case Packet::Type::PLAYER_DELETE:
// //
// break;
// case PacketType::PLAYER_MOVE:
// case Packet::Type::PLAYER_UPDATE:
// //
// break;
default: