Merge remote-tracking branch 'origin/master' into Animations

This commit is contained in:
viktorljung
2016-01-24 22:42:12 +01:00
26 changed files with 653 additions and 302 deletions
+21
View File
@@ -0,0 +1,21 @@
#ifndef EComponentDeleted_h__
#define EComponentDeleted_h__
#include "../Common.h"
#include "Event.h"
#include "Entity.h"
namespace Events
{
struct ComponentDeleted : Event
{
EntityID Entity;
std::string ComponentType;
// True if the component was deleted as a result of the entity it was attached to being deleted
bool Cascaded;
};
}
#endif
+19
View File
@@ -0,0 +1,19 @@
#ifndef EEntityDeleted_h__
#define EEntityDeleted_h__
#include "Event.h"
#include "Entity.h"
namespace Events
{
struct EntityDeleted : Event
{
EntityID DeletedEntity;
// True if the entity deletion was triggered because the entity's parent was deleted before it
bool Cascaded;
};
}
#endif
+3 -3
View File
@@ -2,15 +2,15 @@
#define EPlayerDamage_h__
#include "EventBroker.h"
#include "../Core/Entity.h"
#include "../Core/EntityWrapper.h"
namespace Events
{
struct PlayerDamage : Event
{
double DamageAmount;
EntityID PlayerDamagedID;
EntityWrapper Player;
double Damage;
};
}
+2 -4
View File
@@ -2,16 +2,14 @@
#define EShoot_h__
#include "EventBroker.h"
#include "../Core/Entity.h"
#include "Engine/GLM.h"
#include "../Core/EntityWrapper.h"
namespace Events
{
struct Shoot : Event
{
//ID for who made the shot
EntityID shooter;
EntityWrapper Player;
};
}
+2 -1
View File
@@ -23,9 +23,10 @@ struct EntityWrapper
static const EntityWrapper Invalid;
bool HasComponent(const std::string& componentName);
bool HasComponent(const std::string& componentType);
EntityWrapper Parent();
EntityWrapper FirstChildByName(const std::string& name);
EntityWrapper FirstParentWithComponent(const std::string& componentType);
bool IsChildOf(EntityWrapper potentialParent);
bool Valid();
+6
View File
@@ -5,11 +5,15 @@
#include "Entity.h"
#include "ObjectPool.h"
#include "ComponentPool.h"
#include "EventBroker.h"
class World
{
public:
World() = default;
World(EventBroker* eventBroker)
: m_EventBroker(eventBroker)
{ }
~World();
// Create empty entity
@@ -46,6 +50,7 @@ public:
std::string GetName(EntityID entity) const;
private:
EventBroker* m_EventBroker = nullptr;
EntityID m_CurrentEntityID = 0;
std::unordered_map<EntityID, EntityID> m_EntityParents;
@@ -55,6 +60,7 @@ private:
std::unordered_map<EntityID, std::string> m_EntityNames;
EntityID generateEntityID();
void deleteEntityRecursive(EntityID entity, bool cascaded = false);
};
#endif
+8 -1
View File
@@ -50,6 +50,7 @@ private:
PlayerID m_PlayerID = -1;
EntityID m_ServerEntityID = std::numeric_limits<EntityID>::max();
bool m_IsConnected = false;
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
// Server Client Lookup map
// Assumes that root node for client and server is EntityID 0.
@@ -79,12 +80,15 @@ private:
void parsePing();
void parseKick();
void parsePlayersSpawned(Packet& packet);
void parseEntityDeletion(Packet& packet);
void parseComponentDeletion(Packet& packet);
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
void parseSnapshot(Packet& packet);
void identifyPacketLoss();
bool hasServerTimedOut();
EntityID createPlayer();
void sendInputCommands();
void sendLocalPlayerTransform();
void becomePlayer();
// Mapping Logic
// Returns if local EntityID exist in map
@@ -92,13 +96,16 @@ private:
// Returns if server EntityID exist in map
bool serverClientMapsHasEntity(EntityID serverEntityID);
void insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
void deleteFromServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
// Events
EventBroker* m_EventBroker;
EventRelay<Client, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(const Events::InputCommand& e);
EventRelay<Client, Events::PlayerDamage> m_EPlayeDamage;
EventRelay<Client, Events::PlayerDamage> m_EPlayerDamage;
bool OnPlayerDamage(const Events::PlayerDamage& e);
EventRelay<Client, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
};
#endif
+4 -1
View File
@@ -15,7 +15,10 @@ enum class MessageType
PlayerConnected,
BecomePlayer,
Kick,
OnPlayerSpawned
OnPlayerSpawned,
EntityDeleted,
ComponentDeleted,
PlayerTransform
};
#endif
-1
View File
@@ -15,7 +15,6 @@
#define INPUTSIZE 4097
typedef unsigned int PlayerID;
typedef unsigned int PacketID;
typedef unsigned int UserID;
class Network
{
+2 -1
View File
@@ -1,9 +1,10 @@
#ifndef PlayerDefinition_h__
#define PlayerDefinition_h__
#include <string>
#include "../Core/Entity.h"
struct PlayerDefinition {
int EntityID = -1;
::EntityID EntityID = EntityID_Invalid;
std::string Name = "";
boost::asio::ip::udp::endpoint Endpoint;
unsigned int PacketID;
+11 -5
View File
@@ -16,6 +16,8 @@
#include "Core/EPlayerDamage.h"
#include "Network/EPlayerDisconnected.h"
#include "Core/EPlayerSpawned.h"
#include "Core/EEntityDeleted.h"
#include "Core/EComponentDeleted.h"
class Server : public Network
{
@@ -31,8 +33,7 @@ private:
boost::asio::ip::udp::socket m_Socket;
// Sending messages to client logic
PlayerDefinition m_PlayerDefinitions[8]; //
std::vector<PlayerDefinition> m_ConnectedUsers;
std::map<PlayerID, PlayerDefinition> m_ConnectedPlayers;
char readBuffer[INPUTSIZE] = { 0 };
int bytesRead = 0;
// time for previouse message
@@ -43,6 +44,7 @@ private:
int pingIntervalMs;
int snapshotInterval;
int checkTimeOutInterval = 100;
int m_NextPlayerID = 0;
//Timers
std::clock_t m_StartPingTime;
@@ -58,14 +60,14 @@ private:
// Private member functions
int receive(char* data);
void readFromClients();
void send(Packet& packet, UserID user);
void send(PlayerID player, Packet& packet);
void send(Packet& packet);
void broadcast(Packet& packet);
void sendSnapshot();
void addChildrenToPacket(Packet& packet, EntityID entityID);
void sendPing();
void checkForTimeOuts();
void disconnect(UserID user);
void disconnect(PlayerID playerID);
void parseMessageType(Packet& packet);
void parseOnInputCommand(Packet& packet);
void parseOnPlayerDamage(Packet& packet);
@@ -74,7 +76,6 @@ private:
void parseClientPing();
void parsePing();
void identifyPacketLoss();
void createPlayer();
void kick(PlayerID player);
PlayerID GetPlayerIDFromEndpoint(boost::asio::ip::udp::endpoint endpoint);
// Debug event
@@ -82,6 +83,11 @@ private:
bool OnInputCommand(const Events::InputCommand& e);
EventRelay<Server, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
EventRelay<Server, Events::EntityDeleted> m_EEntityDeleted;
bool OnEntityDeleted(const Events::EntityDeleted& e);
EventRelay<Server, Events::ComponentDeleted> m_EComponentDeleted;
bool OnComponentDeleted(const Events::ComponentDeleted& e);
void parsePlayerTransform(Packet& packet);
};
#endif