Entire project is building cleanly again, but characters are static
This commit is contained in:
@@ -84,7 +84,7 @@ void InCombat::Render(SDL_Surface* const screen) {
|
|||||||
|
|
||||||
void InCombat::QuitEvent() {
|
void InCombat::QuitEvent() {
|
||||||
//exit the game AND the server
|
//exit the game AND the server
|
||||||
RequestDisconnect();
|
// RequestDisconnect();
|
||||||
SetNextScene(SceneList::MAINMENU);
|
SetNextScene(SceneList::MAINMENU);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+30
-27
@@ -46,7 +46,7 @@ InWorld::InWorld(
|
|||||||
accountIndex(*argAccountIndex),
|
accountIndex(*argAccountIndex),
|
||||||
characterIndex(*argCharacterIndex),
|
characterIndex(*argCharacterIndex),
|
||||||
combatMap(*argCombatMap),
|
combatMap(*argCombatMap),
|
||||||
characterMap(*argCharacterMap),
|
characterMap(*argCharacterMap)
|
||||||
{
|
{
|
||||||
//setup the utility objects
|
//setup the utility objects
|
||||||
buttonImage.LoadSurface(config["dir.interface"] + "button_menu.bmp");
|
buttonImage.LoadSurface(config["dir.interface"] + "button_menu.bmp");
|
||||||
@@ -111,13 +111,13 @@ void InWorld::Update(double delta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//update the characters
|
//update the characters
|
||||||
for (auto& it : playerCharacters) {
|
for (auto& it : characterMap) {
|
||||||
if (it.second.motion.x && it.second.motion.y) {
|
if (it.second.motion.x && it.second.motion.y) {
|
||||||
//TODO: refactor this into a method
|
//TODO: refactor this into a method
|
||||||
it.second.position += it.second.motion * CHARACTER_WALKING_SPEED * CHARACTER_WALKING_MOD;
|
it.second.position += it.second.motion * delta * CHARACTER_WALKING_MOD;
|
||||||
}
|
}
|
||||||
else if (it.second.motion != 0) {
|
else if (it.second.motion != 0) {
|
||||||
it.second.position += it.second.motion * CHARACTER_WALKING_SPEED;
|
it.second.position += it.second.motion * delta;
|
||||||
}
|
}
|
||||||
//TODO: SPRITE: fix sprite
|
//TODO: SPRITE: fix sprite
|
||||||
}
|
}
|
||||||
@@ -151,8 +151,9 @@ void InWorld::Render(SDL_Surface* const screen) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//draw characters
|
//draw characters
|
||||||
for (auto& it : playerCharacters) {
|
for (auto& it : characterMap) {
|
||||||
it.second.DrawTo(screen, camera.x, camera.y);
|
//TODO: refactor this
|
||||||
|
it.second.sprite.DrawTo(screen, it.second.position.x - camera.x, it.second.position.y - camera.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
//draw UI
|
//draw UI
|
||||||
@@ -200,28 +201,28 @@ void InWorld::KeyDown(SDL_KeyboardEvent const& key) {
|
|||||||
//player movement
|
//player movement
|
||||||
case SDLK_LEFT:
|
case SDLK_LEFT:
|
||||||
if (localCharacter) {
|
if (localCharacter) {
|
||||||
localCharacter->AdjustDirection(PlayerCharacter::Direction::WEST);
|
localCharacter->motion.x -= CHARACTER_WALKING_SPEED;
|
||||||
SendPlayerUpdate();
|
SendPlayerUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDLK_RIGHT:
|
case SDLK_RIGHT:
|
||||||
if (localCharacter) {
|
if (localCharacter) {
|
||||||
localCharacter->AdjustDirection(PlayerCharacter::Direction::EAST);
|
localCharacter->motion.x += CHARACTER_WALKING_SPEED;
|
||||||
SendPlayerUpdate();
|
SendPlayerUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDLK_UP:
|
case SDLK_UP:
|
||||||
if (localCharacter) {
|
if (localCharacter) {
|
||||||
localCharacter->AdjustDirection(PlayerCharacter::Direction::NORTH);
|
localCharacter->motion.y -= CHARACTER_WALKING_SPEED;
|
||||||
SendPlayerUpdate();
|
SendPlayerUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDLK_DOWN:
|
case SDLK_DOWN:
|
||||||
if (localCharacter) {
|
if (localCharacter) {
|
||||||
localCharacter->AdjustDirection(PlayerCharacter::Direction::SOUTH);
|
localCharacter->motion.y += CHARACTER_WALKING_SPEED;
|
||||||
SendPlayerUpdate();
|
SendPlayerUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -233,28 +234,28 @@ void InWorld::KeyUp(SDL_KeyboardEvent const& key) {
|
|||||||
//player movement
|
//player movement
|
||||||
case SDLK_LEFT:
|
case SDLK_LEFT:
|
||||||
if (localCharacter) {
|
if (localCharacter) {
|
||||||
localCharacter->AdjustDirection(PlayerCharacter::Direction::EAST);
|
localCharacter->motion.x += CHARACTER_WALKING_SPEED;
|
||||||
SendPlayerUpdate();
|
SendPlayerUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDLK_RIGHT:
|
case SDLK_RIGHT:
|
||||||
if (localCharacter) {
|
if (localCharacter) {
|
||||||
localCharacter->AdjustDirection(PlayerCharacter::Direction::WEST);
|
localCharacter->motion.x -= CHARACTER_WALKING_SPEED;
|
||||||
SendPlayerUpdate();
|
SendPlayerUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDLK_UP:
|
case SDLK_UP:
|
||||||
if (localCharacter) {
|
if (localCharacter) {
|
||||||
localCharacter->AdjustDirection(PlayerCharacter::Direction::SOUTH);
|
localCharacter->motion.y += CHARACTER_WALKING_SPEED;
|
||||||
SendPlayerUpdate();
|
SendPlayerUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDLK_DOWN:
|
case SDLK_DOWN:
|
||||||
if (localCharacter) {
|
if (localCharacter) {
|
||||||
localCharacter->AdjustDirection(PlayerCharacter::Direction::NORTH);
|
localCharacter->motion.y -= CHARACTER_WALKING_SPEED;
|
||||||
SendPlayerUpdate();
|
SendPlayerUpdate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -305,48 +306,50 @@ void InWorld::HandleRegionContent(SerialPacket packet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleCharacterUpdate(SerialPacket packet) {
|
void InWorld::HandleCharacterUpdate(SerialPacket packet) {
|
||||||
if (playerCharacters.find(packet.characterInfo.characterIndex) == playerCharacters.end()) {
|
if (characterMap.find(packet.characterInfo.characterIndex) == characterMap.end()) {
|
||||||
HandleCharacterNew(packet);
|
HandleCharacterNew(packet);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//update only if the message didn't originate from here
|
//update only if the message didn't originate from here
|
||||||
if (packet.characterInfo.clientIndex != clientIndex) {
|
if (packet.characterInfo.clientIndex != clientIndex) {
|
||||||
playerCharacters[packet.characterInfo.characterIndex].SetPosition(packet.characterInfo.position);
|
characterMap[packet.characterInfo.characterIndex].position = packet.characterInfo.position;
|
||||||
playerCharacters[packet.characterInfo.characterIndex].SetMotion(packet.characterInfo.motion);
|
characterMap[packet.characterInfo.characterIndex].motion = packet.characterInfo.motion;
|
||||||
}
|
}
|
||||||
playerCharacters[packet.characterInfo.characterIndex].ResetDirection();
|
//TODO: refactor this
|
||||||
|
// characterMap[packet.characterInfo.characterIndex].ResetDirection();
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleCharacterNew(SerialPacket packet) {
|
void InWorld::HandleCharacterNew(SerialPacket packet) {
|
||||||
if (playerCharacters.find(packet.characterInfo.characterIndex) != playerCharacters.end()) {
|
if (characterMap.find(packet.characterInfo.characterIndex) != characterMap.end()) {
|
||||||
throw(std::runtime_error("Cannot create duplicate characters"));
|
throw(std::runtime_error("Cannot create duplicate characters"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: set the player's handle
|
//TODO: set the player's handle
|
||||||
//TODO: use a reference, don't use a lookup for every call
|
//TODO: use a reference, don't use a lookup for every call
|
||||||
playerCharacters[packet.characterInfo.characterIndex].GetSprite()->LoadSurface(config["dir.sprites"] + packet.characterInfo.avatar, 4, 4);
|
characterMap[packet.characterInfo.characterIndex].sprite.LoadSurface(config["dir.sprites"] + packet.characterInfo.avatar, 4, 4);
|
||||||
playerCharacters[packet.characterInfo.characterIndex].SetPosition(packet.characterInfo.position);
|
characterMap[packet.characterInfo.characterIndex].position = packet.characterInfo.position;
|
||||||
playerCharacters[packet.characterInfo.characterIndex].SetMotion(packet.characterInfo.motion);
|
characterMap[packet.characterInfo.characterIndex].motion = packet.characterInfo.motion;
|
||||||
playerCharacters[packet.characterInfo.characterIndex].ResetDirection();
|
//TODO: refactor this
|
||||||
|
// characterMap[packet.characterInfo.characterIndex].ResetDirection();
|
||||||
|
|
||||||
//catch this client's player object
|
//catch this client's player object
|
||||||
if (packet.characterInfo.characterIndex == characterIndex && !localCharacter) {
|
if (packet.characterInfo.characterIndex == characterIndex && !localCharacter) {
|
||||||
localCharacter = &playerCharacters[characterIndex];
|
localCharacter = &characterMap[characterIndex];
|
||||||
|
|
||||||
//setup the camera
|
//setup the camera
|
||||||
camera.width = GetScreen()->w;
|
camera.width = GetScreen()->w;
|
||||||
camera.height = GetScreen()->h;
|
camera.height = GetScreen()->h;
|
||||||
//center on the player's character
|
//center on the player's character
|
||||||
camera.marginX = (GetScreen()->w / 2 - localCharacter->sprite->GetImage()->GetClipW() / 2);
|
camera.marginX = (GetScreen()->w / 2 - localCharacter->sprite.GetImage()->GetClipW() / 2);
|
||||||
camera.marginY = (GetScreen()->h / 2 - localCharacter->sprite->GetImage()->GetClipH() / 2);
|
camera.marginY = (GetScreen()->h / 2 - localCharacter->sprite.GetImage()->GetClipH() / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleCharacterDelete(SerialPacket packet) {
|
void InWorld::HandleCharacterDelete(SerialPacket packet) {
|
||||||
//TODO: authenticate when own character is being deleted
|
//TODO: authenticate when own character is being deleted
|
||||||
|
|
||||||
playerCharacters.erase(packet.characterInfo.characterIndex);
|
characterMap.erase(packet.characterInfo.characterIndex);
|
||||||
|
|
||||||
//catch this client's player object
|
//catch this client's player object
|
||||||
if (packet.characterInfo.characterIndex == characterIndex) {
|
if (packet.characterInfo.characterIndex == characterIndex) {
|
||||||
|
|||||||
Reference in New Issue
Block a user