diff --git a/server/creatures/creature_manager.cpp b/server/creatures/creature_manager.cpp index 78fdb37..1235419 100644 --- a/server/creatures/creature_manager.cpp +++ b/server/creatures/creature_manager.cpp @@ -30,12 +30,12 @@ CreatureManager::~CreatureManager() { } //arg: a list of creatures to be updated in the clients -int CreatureManager::Update(std::list* creatureList) { +int CreatureManager::Update(std::list>* creatureList) { int ret; for (auto& it : elementMap) { ret = it.second.Update(lua); if (ret) { - creatureList->push_back(&it.second); + creatureList->push_back(std::pair(it.first, &it.second)); } } } diff --git a/server/creatures/creature_manager.hpp b/server/creatures/creature_manager.hpp index 39a8d29..3c60f1b 100644 --- a/server/creatures/creature_manager.hpp +++ b/server/creatures/creature_manager.hpp @@ -37,7 +37,7 @@ public: ~CreatureManager(); //common public methods - int Update(std::list* creatureList); + int Update(std::list>* creatureList); int Create(std::string avatar, int scriptRef); void Unload(int uid); diff --git a/server/rooms/makefile b/server/rooms/makefile index 3908a57..fbab23c 100644 --- a/server/rooms/makefile +++ b/server/rooms/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. .. ../characters ../creatures ../entities ../monsters ../triggers ../../common/gameplay ../../common/map ../../common/utilities +INCLUDES+=. .. ../characters ../creatures ../entities ../monsters ../triggers ../../common/gameplay ../../common/map ../../common/network ../../common/network/packet_types ../../common/utilities LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/server/rooms/room_data.cpp b/server/rooms/room_data.cpp index f3c1b0b..8791d24 100644 --- a/server/rooms/room_data.cpp +++ b/server/rooms/room_data.cpp @@ -21,6 +21,9 @@ */ #include "room_data.hpp" +#include "serial_packet.hpp" +#include "server_utilities.hpp" + #include #include #include @@ -99,10 +102,15 @@ void RoomData::RunFrame() { } //a list of creatures that need to be updated client-side - std::list creatureList; + std::list< std::pair> creatureList; creatureMgr.Update(&creatureList); - //TODO: (0) send the updates + //send the updates + for (auto& it : creatureList) { + CreaturePacket packet; + copyCreatureToPacket(&packet, it.second, it.first); + //TODO: send + } //TODO: creature/character collisions } diff --git a/server/server_utilities.cpp b/server/server_utilities.cpp index eca5421..727e73b 100644 --- a/server/server_utilities.cpp +++ b/server/server_utilities.cpp @@ -169,6 +169,14 @@ void copyCharacterToPacket(CharacterPacket* const packet, CharacterData* const c packet->bounds = characterData->GetBounds(); } +void copyCreatureToPacket(CreaturePacket* const packet, CreatureData* const creatureData, int creatureIndex) { + packet->creatureIndex = creatureIndex; + strncpy(packet->avatar, creatureData->GetAvatar().c_str(), PACKET_STRING_SIZE); + packet->origin = creatureData->GetOrigin(); + packet->motion = creatureData->GetMotion(); + packet->bounds = creatureData->GetBounds(); +} + void pumpAndChangeRooms(int characterIndex, int newRoomIndex) { //get the character object CharacterData* character = CharacterManager::GetSingleton().Get(characterIndex); diff --git a/server/server_utilities.hpp b/server/server_utilities.hpp index df33888..0014f59 100644 --- a/server/server_utilities.hpp +++ b/server/server_utilities.hpp @@ -22,6 +22,7 @@ #pragma once #include "character_data.hpp" +#include "creature_data.hpp" #include "serial_packet.hpp" #include "vector2.hpp" @@ -34,5 +35,8 @@ void pumpPacketProximity(SerialPacket* const argPacket, int roomIndex, Vector2 p void copyCharacterToPacket(CharacterPacket* const packet, int characterIndex); void copyCharacterToPacket(CharacterPacket* const packet, CharacterData* const characterData, int characterIndex); + +void copyCreatureToPacket(CreaturePacket* const packet, CreatureData* const creatureData, int creatureIndex); + void pumpAndChangeRooms(int characterIndex, int newRoomIndex); void pumpAndChangeRooms(CharacterData* const characterData, int newRoomIndex, int characterIndex);