walk displacment

master
Eduardo Bart 13 years ago
parent 361b28c6d6
commit 3a4bd50665

@ -41,8 +41,7 @@ void Effect::draw(int x, int y)
if(m_animation+1 == type.animationPhases) {
EffectPtr self = asEffect();
g_dispatcher.addEvent([self] {
TilePtr tile = g_map.getTile(self->getPosition());
tile->removeEffect(self);
g_map.getTile(self->getPosition())->removeEffect(self);
});
m_finished = true;
}

@ -74,6 +74,7 @@ void Map::draw(const Rect& rect)
float verticalStretchFactor = rect.height() / (float)(MAP_VISIBLE_HEIGHT * NUM_TILE_PIXELS);
// draw player names and health bars
//TODO: this could be cached to improve framerate
for(int x = 0; x < MAP_VISIBLE_WIDTH; ++x) {
for(int y = 0; y < MAP_VISIBLE_HEIGHT; ++y) {
Position tilePos = Position(m_centralPosition.x + (x - PLAYER_OFFSET_X + 1), m_centralPosition.y + (y - PLAYER_OFFSET_Y + 1), m_centralPosition.z);

@ -63,10 +63,12 @@ void Tile::draw(int x, int y)
}
// we can render creatures in 3x3 range
//TODO: this algorithm is slowing down render too much, but it could be cached to improve framerate
for(int xi = -1; xi <= 1; ++xi) {
for(int yi = -1; yi <= 1; ++yi) {
for(CreaturePtr creature : g_map.getTile(m_position + Position(xi, yi, 0))->getCreatures()) {
Rect creatureRect(x + xi*32 + creature->getWalkOffsetX(), y + yi*32 + creature->getWalkOffsetY(), 24, 24);
auto& type = creature->getType();
Rect creatureRect(x + xi*32 + creature->getWalkOffsetX() - type.xDisplacment, y + yi*32 + creature->getWalkOffsetY() - type.yDisplacment, 32, 32);
Rect thisTileRect(x, y, 32, 32);
// only render creatures where bottom right is inside our rect

@ -35,7 +35,7 @@ void ProtocolGame::parseMessage(InputMessage& msg)
{
while(!msg.eof()) {
uint8 opt = msg.getU8();
//dump << "protocol id:" << std::hex << (int)opt;
//dump << "protocol id:" << (int)opt;
switch(opt) {
case Otc::GameServerInitGame:
@ -663,8 +663,8 @@ void ProtocolGame::parsePlayerCancelAttack(InputMessage& msg)
void ProtocolGame::parseCreatureSpeak(InputMessage& msg)
{
msg.getU32(); // unkSpeak
msg.getString(); // name
msg.getU16(); // level
std::string name = msg.getString(); // name
uint16 level = msg.getU16(); // level
uint8 type = msg.getU8();
switch(type) {
@ -692,7 +692,8 @@ void ProtocolGame::parseCreatureSpeak(InputMessage& msg)
break;
}
msg.getString(); // message
std::string message = msg.getString(); // message
logDebug(name, "[", level, "]: ", message);
}
void ProtocolGame::parseChannelList(InputMessage& msg)

Loading…
Cancel
Save