Filled out some client side monster code
This commit is contained in:
@@ -21,3 +21,26 @@
|
|||||||
*/
|
*/
|
||||||
#include "base_monster.hpp"
|
#include "base_monster.hpp"
|
||||||
|
|
||||||
|
#include "config_utility.hpp"
|
||||||
|
|
||||||
|
void BaseMonster::CorrectSprite() {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string BaseMonster::SetHandle(std::string s) {
|
||||||
|
return handle = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string BaseMonster::GetHandle() const {
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string BaseMonster::SetAvatar(std::string s) {
|
||||||
|
avatar = s;
|
||||||
|
sprite.LoadSurface(ConfigUtility::GetSingleton()["dir.sprites"] + avatar, 4, 1);
|
||||||
|
return avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string BaseMonster::GetAvatar() const {
|
||||||
|
return avatar;
|
||||||
|
}
|
||||||
@@ -29,8 +29,17 @@ public:
|
|||||||
BaseMonster() = default;
|
BaseMonster() = default;
|
||||||
virtual ~BaseMonster() = default;
|
virtual ~BaseMonster() = default;
|
||||||
|
|
||||||
|
void CorrectSprite();
|
||||||
|
|
||||||
|
std::string SetHandle(std::string s);
|
||||||
|
std::string GetHandle() const;
|
||||||
|
std::string SetAvatar(std::string s);
|
||||||
|
std::string GetAvatar() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//
|
//metadata
|
||||||
|
std::string handle;
|
||||||
|
std::string avatar;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -51,7 +51,7 @@ void InWorld::HandleCharacterCreate(CharacterPacket* const argPacket) {
|
|||||||
//fill the character's info
|
//fill the character's info
|
||||||
character->SetOrigin(argPacket->origin);
|
character->SetOrigin(argPacket->origin);
|
||||||
character->SetMotion(argPacket->motion);
|
character->SetMotion(argPacket->motion);
|
||||||
character->SetBounds({CHARACTER_BOUNDS_X, CHARACTER_BOUNDS_Y, CHARACTER_BOUNDS_WIDTH, CHARACTER_BOUNDS_HEIGHT});
|
character->SetBounds({CHARACTER_BOUNDS_X, CHARACTER_BOUNDS_Y, CHARACTER_BOUNDS_WIDTH, CHARACTER_BOUNDS_HEIGHT}); //TODO: send the bounds from the server
|
||||||
character->SetHandle(argPacket->handle);
|
character->SetHandle(argPacket->handle);
|
||||||
character->SetAvatar(argPacket->avatar);
|
character->SetAvatar(argPacket->avatar);
|
||||||
character->SetOwner(argPacket->accountIndex);
|
character->SetOwner(argPacket->accountIndex);
|
||||||
@@ -71,7 +71,7 @@ void InWorld::HandleCharacterCreate(CharacterPacket* const argPacket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//debug
|
//debug
|
||||||
std::cout << "Create, total: " << characterMap.size() << std::endl;
|
std::cout << "Character Create, total: " << characterMap.size() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleCharacterDelete(CharacterPacket* const argPacket) {
|
void InWorld::HandleCharacterDelete(CharacterPacket* const argPacket) {
|
||||||
@@ -97,7 +97,7 @@ void InWorld::HandleCharacterDelete(CharacterPacket* const argPacket) {
|
|||||||
characterMap.erase(characterIt);
|
characterMap.erase(characterIt);
|
||||||
|
|
||||||
//debug
|
//debug
|
||||||
std::cout << "Delete, total: " << characterMap.size() << std::endl;
|
std::cout << "Character Delete, total: " << characterMap.size() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleCharacterQueryExists(CharacterPacket* const argPacket) {
|
void InWorld::HandleCharacterQueryExists(CharacterPacket* const argPacket) {
|
||||||
@@ -124,7 +124,7 @@ void InWorld::HandleCharacterQueryExists(CharacterPacket* const argPacket) {
|
|||||||
character->CorrectSprite();
|
character->CorrectSprite();
|
||||||
|
|
||||||
//debug
|
//debug
|
||||||
std::cout << "Query, total: " << characterMap.size() << std::endl;
|
std::cout << "Character Query, total: " << characterMap.size() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleCharacterMovement(CharacterPacket* const argPacket) {
|
void InWorld::HandleCharacterMovement(CharacterPacket* const argPacket) {
|
||||||
@@ -152,15 +152,71 @@ void InWorld::HandleCharacterAttack(CharacterPacket* const argPacket) {
|
|||||||
//-------------------------
|
//-------------------------
|
||||||
|
|
||||||
void InWorld::HandleMonsterCreate(MonsterPacket* const argPacket) {
|
void InWorld::HandleMonsterCreate(MonsterPacket* const argPacket) {
|
||||||
//TODO
|
//check for logic errors
|
||||||
|
if (monsterMap.find(argPacket->monsterIndex) != monsterMap.end()) {
|
||||||
|
std::ostringstream msg;
|
||||||
|
msg << "Double monster creation event; ";
|
||||||
|
msg << "Index: " << argPacket->monsterIndex << "; ";
|
||||||
|
msg << "Handle: " << argPacket->handle;
|
||||||
|
throw(std::runtime_error(msg.str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//ignore monsters from other rooms
|
||||||
|
if (roomIndex != argPacket->roomIndex) {
|
||||||
|
//temporary error checking
|
||||||
|
std::ostringstream msg;
|
||||||
|
msg << "Monster from the wrong room received: ";
|
||||||
|
msg << "monsterIndex: " << argPacket->monsterIndex << ", roomIndex: " << argPacket->roomIndex;
|
||||||
|
throw(std::runtime_error(msg.str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//implicitly create the element
|
||||||
|
BaseMonster* monster = &monsterMap[argPacket->monsterIndex];
|
||||||
|
|
||||||
|
//fill the monster's info
|
||||||
|
monster->SetHandle(argPacket->handle);
|
||||||
|
monster->SetAvatar(argPacket->avatar);
|
||||||
|
monster->SetBounds(argPacket->bounds);
|
||||||
|
monster->SetOrigin(argPacket->origin);
|
||||||
|
monster->SetMotion(argPacket->motion);
|
||||||
|
|
||||||
|
//debug
|
||||||
|
std::cout << "Monster Create, total: " << monsterMap.size() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleMonsterDelete(MonsterPacket* const argPacket) {
|
void InWorld::HandleMonsterDelete(MonsterPacket* const argPacket) {
|
||||||
//TODO
|
//ignore if this monster doesn't exist
|
||||||
|
std::map<int, BaseMonster>::iterator monsterIt = monsterMap.find(argPacket->monsterIndex);
|
||||||
|
if (monsterIt == monsterMap.end()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//remove this monster
|
||||||
|
monsterMap.erase(monsterIt);
|
||||||
|
|
||||||
|
//debug
|
||||||
|
std::cout << "Monster Delete, total: " << monsterMap.size() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleMonsterQueryExists(MonsterPacket* const argPacket) {
|
void InWorld::HandleMonsterQueryExists(MonsterPacket* const argPacket) {
|
||||||
//TODO
|
//ignore monsters in a different room (sub-optimal)
|
||||||
|
if (argPacket->roomIndex != roomIndex) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//implicitly create the element
|
||||||
|
BaseMonster* monster = &monsterMap[argPacket->monsterIndex];
|
||||||
|
|
||||||
|
//fill the monster's info
|
||||||
|
monster->SetHandle(argPacket->handle);
|
||||||
|
monster->SetAvatar(argPacket->avatar);
|
||||||
|
monster->SetBounds(argPacket->bounds);
|
||||||
|
monster->SetOrigin(argPacket->origin);
|
||||||
|
monster->SetMotion(argPacket->motion);
|
||||||
|
|
||||||
|
//debug
|
||||||
|
std::cout << "Monster Query, total: " << monsterMap.size() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleMonsterMovement(MonsterPacket* const argPacket) {
|
void InWorld::HandleMonsterMovement(MonsterPacket* const argPacket) {
|
||||||
@@ -175,7 +231,6 @@ void InWorld::HandleMonsterAttack(MonsterPacket* const argPacket) {
|
|||||||
//player movement
|
//player movement
|
||||||
//-------------------------
|
//-------------------------
|
||||||
|
|
||||||
//TODO: add a "movement" packet type
|
|
||||||
void InWorld::SendLocalCharacterMovement() {
|
void InWorld::SendLocalCharacterMovement() {
|
||||||
CharacterPacket newPacket;
|
CharacterPacket newPacket;
|
||||||
newPacket.type = SerialPacketType::CHARACTER_MOVEMENT;
|
newPacket.type = SerialPacketType::CHARACTER_MOVEMENT;
|
||||||
|
|||||||
@@ -77,6 +77,8 @@ InWorld::InWorld(int* const argClientIndex, int* const argAccountIndex):
|
|||||||
memset(&newPacket, 0, MAX_PACKET_SIZE);
|
memset(&newPacket, 0, MAX_PACKET_SIZE);
|
||||||
newPacket.type = SerialPacketType::QUERY_CHARACTER_EXISTS;
|
newPacket.type = SerialPacketType::QUERY_CHARACTER_EXISTS;
|
||||||
network.SendTo(Channels::SERVER, &newPacket);
|
network.SendTo(Channels::SERVER, &newPacket);
|
||||||
|
// newPacket.type = SerialPacketType::QUERY_MONSTER_EXISTS;
|
||||||
|
// network.SendTo(Channels::SERVER, &newPacket);
|
||||||
|
|
||||||
//set the camera's values
|
//set the camera's values
|
||||||
camera.width = GetScreen()->w;
|
camera.width = GetScreen()->w;
|
||||||
|
|||||||
Reference in New Issue
Block a user