diagonal walking, there is a map bug
This commit is contained in:
parent
aacf98b45c
commit
b859f66952
|
@ -25,7 +25,7 @@ MESSAGE(STATUS "BUILD TYPE: " ${CMAKE_BUILD_TYPE})
|
||||||
|
|
||||||
# setup compiler options
|
# setup compiler options
|
||||||
IF(CMAKE_COMPILER_IS_GNUCXX)
|
IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
SET(CXX_WARNS "-Wall -Wextra -Werror -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-variable")
|
SET(CXX_WARNS "-Wall -Wextra -Werror -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-variable -Wno-switch")
|
||||||
SET(CMAKE_CXX_FLAGS "-std=c++0x -pipe ${CXX_WARNS}")
|
SET(CMAKE_CXX_FLAGS "-std=c++0x -pipe ${CXX_WARNS}")
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -ggdb3 -fno-inline")
|
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -ggdb3 -fno-inline")
|
||||||
SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
|
SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
|
||||||
|
|
|
@ -79,7 +79,11 @@ namespace Otc
|
||||||
North = 0,
|
North = 0,
|
||||||
East,
|
East,
|
||||||
South,
|
South,
|
||||||
West
|
West,
|
||||||
|
NorthEast,
|
||||||
|
SouthEast,
|
||||||
|
SouthWest,
|
||||||
|
NorthWest
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SpeakClasses {
|
enum SpeakClasses {
|
||||||
|
|
|
@ -62,18 +62,15 @@ void Creature::draw(int x, int y)
|
||||||
// 1000 * groundSpeed / playerSpeed
|
// 1000 * groundSpeed / playerSpeed
|
||||||
|
|
||||||
// TODO 1: FIX RENDER STEP 2
|
// TODO 1: FIX RENDER STEP 2
|
||||||
// TODO 2: FIX SHAKY EFFECT
|
// TODO 2: FIX DIAGONAL WALKING, BUGS MAP
|
||||||
// TODO 3: ADD ANIMATION
|
// TODO 3: ADD ANIMATION
|
||||||
// TODO 4: ADD DIAGONAL WALKING
|
|
||||||
|
|
||||||
x += m_walkOffsetX;
|
x += m_walkOffsetX;
|
||||||
y += m_walkOffsetY;
|
y += m_walkOffsetY;
|
||||||
|
|
||||||
const ThingAttributes& attributes = getAttributes();
|
const ThingAttributes& attributes = getAttributes();
|
||||||
|
|
||||||
|
|
||||||
// Render creature
|
// Render creature
|
||||||
m_xDiv = m_direction;
|
|
||||||
for(m_yDiv = 0; m_yDiv < attributes.ydiv; m_yDiv++) {
|
for(m_yDiv = 0; m_yDiv < attributes.ydiv; m_yDiv++) {
|
||||||
|
|
||||||
// continue if we dont have this addon.
|
// continue if we dont have this addon.
|
||||||
|
@ -117,13 +114,14 @@ void Creature::draw(int x, int y)
|
||||||
int pixelsWalked = std::floor((g_platform.getTicks() - m_lastTicks) / m_walkTimePerPixel);
|
int pixelsWalked = std::floor((g_platform.getTicks() - m_lastTicks) / m_walkTimePerPixel);
|
||||||
int remainingTime = (g_platform.getTicks() - m_lastTicks) % (int)m_walkTimePerPixel;
|
int remainingTime = (g_platform.getTicks() - m_lastTicks) % (int)m_walkTimePerPixel;
|
||||||
|
|
||||||
if(m_direction == Otc::North)
|
if(m_direction == Otc::North || m_direction == Otc::NorthEast || m_direction == Otc::NorthWest)
|
||||||
m_walkOffsetY = std::max(m_walkOffsetY - pixelsWalked, 0);
|
m_walkOffsetY = std::max(m_walkOffsetY - pixelsWalked, 0);
|
||||||
else if(m_direction == Otc::East)
|
else if(m_direction == Otc::South || m_direction == Otc::SouthEast || m_direction == Otc::SouthWest)
|
||||||
m_walkOffsetX = std::min(m_walkOffsetX + pixelsWalked, 0);
|
|
||||||
else if(m_direction == Otc::South)
|
|
||||||
m_walkOffsetY = std::min(m_walkOffsetY + pixelsWalked, 0);
|
m_walkOffsetY = std::min(m_walkOffsetY + pixelsWalked, 0);
|
||||||
else if(m_direction == Otc::West)
|
|
||||||
|
if(m_direction == Otc::East || m_direction == Otc::NorthEast || m_direction == Otc::SouthEast)
|
||||||
|
m_walkOffsetX = std::min(m_walkOffsetX + pixelsWalked, 0);
|
||||||
|
else if(m_direction == Otc::West || m_direction == Otc::NorthWest || m_direction == Otc::SouthWest)
|
||||||
m_walkOffsetX = std::max(m_walkOffsetX - pixelsWalked, 0);
|
m_walkOffsetX = std::max(m_walkOffsetX - pixelsWalked, 0);
|
||||||
|
|
||||||
//double walkOffset = std::max(m_walkOffsetX, m_walkOffsetY);
|
//double walkOffset = std::max(m_walkOffsetX, m_walkOffsetY);
|
||||||
|
@ -178,6 +176,7 @@ void Creature::walk(const Position& position)
|
||||||
m_walkOffsetX = 0;
|
m_walkOffsetX = 0;
|
||||||
m_walkOffsetY = 0;
|
m_walkOffsetY = 0;
|
||||||
m_walkingFromPosition = m_position;
|
m_walkingFromPosition = m_position;
|
||||||
|
int walkTimeFactor = 1;
|
||||||
|
|
||||||
// update map tiles
|
// update map tiles
|
||||||
g_map.removeThingByPtr(asThing());
|
g_map.removeThingByPtr(asThing());
|
||||||
|
@ -201,11 +200,46 @@ void Creature::walk(const Position& position)
|
||||||
m_direction = Otc::West;
|
m_direction = Otc::West;
|
||||||
m_walkOffsetX = 32;
|
m_walkOffsetX = 32;
|
||||||
}
|
}
|
||||||
|
else if(m_walkingFromPosition + Position(1, -1, 0) == m_position) {
|
||||||
|
m_direction = Otc::NorthEast;
|
||||||
|
m_walkOffsetX = -32;
|
||||||
|
m_walkOffsetY = 32;
|
||||||
|
walkTimeFactor = 2;
|
||||||
|
}
|
||||||
|
else if(m_walkingFromPosition + Position(1, 1, 0) == m_position) {
|
||||||
|
m_direction = Otc::SouthEast;
|
||||||
|
m_walkOffsetX = -32;
|
||||||
|
m_walkOffsetY = -32;
|
||||||
|
walkTimeFactor = 2;
|
||||||
|
}
|
||||||
|
else if(m_walkingFromPosition + Position(-1, 1, 0) == m_position) {
|
||||||
|
m_direction = Otc::SouthWest;
|
||||||
|
m_walkOffsetX = 32;
|
||||||
|
m_walkOffsetY = -32;
|
||||||
|
walkTimeFactor = 2;
|
||||||
|
}
|
||||||
|
else if(m_walkingFromPosition + Position(-1, -1, 0) == m_position) {
|
||||||
|
m_direction = Otc::NorthWest;
|
||||||
|
m_walkOffsetX = 32;
|
||||||
|
m_walkOffsetY = 32;
|
||||||
|
walkTimeFactor = 2;
|
||||||
|
}
|
||||||
else { // Teleport
|
else { // Teleport
|
||||||
// we teleported, dont walk or change direction
|
// we teleported, dont walk or change direction
|
||||||
m_walking = false;
|
m_walking = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate xDiv
|
||||||
|
if(m_direction >= 4) {
|
||||||
|
if(m_direction == Otc::NorthEast || m_direction == Otc::SouthEast)
|
||||||
|
m_xDiv = Otc::East;
|
||||||
|
else if(m_direction == Otc::NorthWest || m_direction == Otc::SouthWest)
|
||||||
|
m_xDiv = Otc::West;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_xDiv = m_direction;
|
||||||
|
}
|
||||||
|
|
||||||
// get walk speed
|
// get walk speed
|
||||||
int groundSpeed = 0;
|
int groundSpeed = 0;
|
||||||
|
|
||||||
|
@ -213,7 +247,7 @@ void Creature::walk(const Position& position)
|
||||||
if(ground)
|
if(ground)
|
||||||
groundSpeed = ground->getAttributes().speed;
|
groundSpeed = ground->getAttributes().speed;
|
||||||
|
|
||||||
float walkTime = 1000.0 * (float)groundSpeed / m_speed;
|
float walkTime = walkTimeFactor * 1000.0 * (float)groundSpeed / m_speed;
|
||||||
walkTime = walkTime == 0 ? 1000 : walkTime;
|
walkTime = walkTime == 0 ? 1000 : walkTime;
|
||||||
|
|
||||||
m_walkTimePerPixel = walkTime / 32.0;
|
m_walkTimePerPixel = walkTime / 32.0;
|
||||||
|
|
|
@ -87,6 +87,18 @@ void Game::walk(Otc::Direction direction)
|
||||||
case Otc::West:
|
case Otc::West:
|
||||||
m_protocolGame->sendWalkWest();
|
m_protocolGame->sendWalkWest();
|
||||||
break;
|
break;
|
||||||
|
case Otc::NorthEast:
|
||||||
|
m_protocolGame->sendWalkNorthEast();
|
||||||
|
break;
|
||||||
|
case Otc::SouthEast:
|
||||||
|
m_protocolGame->sendWalkSouthEast();
|
||||||
|
break;
|
||||||
|
case Otc::SouthWest:
|
||||||
|
m_protocolGame->sendWalkSouthWest();
|
||||||
|
break;
|
||||||
|
case Otc::NorthWest:
|
||||||
|
m_protocolGame->sendWalkNorthWest();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,10 @@ public:
|
||||||
void sendWalkEast();
|
void sendWalkEast();
|
||||||
void sendWalkSouth();
|
void sendWalkSouth();
|
||||||
void sendWalkWest();
|
void sendWalkWest();
|
||||||
|
void sendWalkNorthEast();
|
||||||
|
void sendWalkSouthEast();
|
||||||
|
void sendWalkSouthWest();
|
||||||
|
void sendWalkNorthWest();
|
||||||
void sendTurnNorth();
|
void sendTurnNorth();
|
||||||
void sendTurnEast();
|
void sendTurnEast();
|
||||||
void sendTurnSouth();
|
void sendTurnSouth();
|
||||||
|
|
|
@ -102,6 +102,34 @@ void ProtocolGame::sendWalkWest()
|
||||||
send(oMsg);
|
send(oMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProtocolGame::sendWalkNorthEast()
|
||||||
|
{
|
||||||
|
OutputMessage oMsg;
|
||||||
|
oMsg.addU8(0x6A);
|
||||||
|
send(oMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProtocolGame::sendWalkSouthEast()
|
||||||
|
{
|
||||||
|
OutputMessage oMsg;
|
||||||
|
oMsg.addU8(0x6B);
|
||||||
|
send(oMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProtocolGame::sendWalkSouthWest()
|
||||||
|
{
|
||||||
|
OutputMessage oMsg;
|
||||||
|
oMsg.addU8(0x6C);
|
||||||
|
send(oMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProtocolGame::sendWalkNorthWest()
|
||||||
|
{
|
||||||
|
OutputMessage oMsg;
|
||||||
|
oMsg.addU8(0x6D);
|
||||||
|
send(oMsg);
|
||||||
|
}
|
||||||
|
|
||||||
void ProtocolGame::sendTurnNorth()
|
void ProtocolGame::sendTurnNorth()
|
||||||
{
|
{
|
||||||
OutputMessage oMsg;
|
OutputMessage oMsg;
|
||||||
|
@ -129,5 +157,3 @@ void ProtocolGame::sendTurnWest()
|
||||||
oMsg.addU8(0x72);
|
oMsg.addU8(0x72);
|
||||||
send(oMsg);
|
send(oMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,18 @@ bool UIMap::onKeyPress(uchar keyCode, char keyChar, int keyboardModifiers)
|
||||||
} else if(keyCode == Fw::KeyLeft || keyCode == Fw::KeyNumpad4) {
|
} else if(keyCode == Fw::KeyLeft || keyCode == Fw::KeyNumpad4) {
|
||||||
g_game.walk(Otc::West);
|
g_game.walk(Otc::West);
|
||||||
return true;
|
return true;
|
||||||
|
} else if(keyCode == Fw::KeyNumpad9) {
|
||||||
|
g_game.walk(Otc::NorthEast);
|
||||||
|
return true;
|
||||||
|
} else if(keyCode == Fw::KeyNumpad3) {
|
||||||
|
g_game.walk(Otc::SouthEast);
|
||||||
|
return true;
|
||||||
|
} else if(keyCode == Fw::KeyNumpad1) {
|
||||||
|
g_game.walk(Otc::SouthWest);
|
||||||
|
return true;
|
||||||
|
} else if(keyCode == Fw::KeyNumpad7) {
|
||||||
|
g_game.walk(Otc::NorthWest);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
} else if(keyboardModifiers == Fw::KeyboardCtrlModifier) {
|
} else if(keyboardModifiers == Fw::KeyboardCtrlModifier) {
|
||||||
if(keyCode == Fw::KeyUp || keyCode == Fw::KeyNumpad8) {
|
if(keyCode == Fw::KeyUp || keyCode == Fw::KeyNumpad8) {
|
||||||
|
|
Loading…
Reference in New Issue