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 | ||||
| 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_DEBUG "-O0 -g3 -ggdb3 -fno-inline") | ||||
|     SET(CMAKE_CXX_FLAGS_RELEASE "-O2") | ||||
|  |  | |||
|  | @ -79,7 +79,11 @@ namespace Otc | |||
|         North = 0, | ||||
|         East, | ||||
|         South, | ||||
|         West | ||||
|         West, | ||||
|         NorthEast, | ||||
|         SouthEast, | ||||
|         SouthWest, | ||||
|         NorthWest | ||||
|     }; | ||||
| 
 | ||||
|     enum SpeakClasses { | ||||
|  |  | |||
|  | @ -62,18 +62,15 @@ void Creature::draw(int x, int y) | |||
|     // 1000 * groundSpeed / playerSpeed
 | ||||
| 
 | ||||
|     // TODO 1: FIX RENDER STEP 2
 | ||||
|     // TODO 2: FIX SHAKY EFFECT
 | ||||
|     // TODO 2: FIX DIAGONAL WALKING, BUGS MAP
 | ||||
|     // TODO 3: ADD ANIMATION
 | ||||
|     // TODO 4: ADD DIAGONAL WALKING
 | ||||
| 
 | ||||
|     x += m_walkOffsetX; | ||||
|     y += m_walkOffsetY; | ||||
| 
 | ||||
|     const ThingAttributes& attributes = getAttributes(); | ||||
| 
 | ||||
| 
 | ||||
|     // Render creature
 | ||||
|     m_xDiv = m_direction; | ||||
|     for(m_yDiv = 0; m_yDiv < attributes.ydiv; m_yDiv++) { | ||||
| 
 | ||||
|         // 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 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); | ||||
|             else if(m_direction == Otc::East) | ||||
|                 m_walkOffsetX = std::min(m_walkOffsetX + pixelsWalked, 0); | ||||
|             else if(m_direction == Otc::South) | ||||
|             else if(m_direction == Otc::South || m_direction == Otc::SouthEast || m_direction == Otc::SouthWest) | ||||
|                 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); | ||||
| 
 | ||||
|             //double walkOffset = std::max(m_walkOffsetX, m_walkOffsetY);
 | ||||
|  | @ -178,6 +176,7 @@ void Creature::walk(const Position& position) | |||
|     m_walkOffsetX = 0; | ||||
|     m_walkOffsetY = 0; | ||||
|     m_walkingFromPosition = m_position; | ||||
|     int walkTimeFactor = 1; | ||||
| 
 | ||||
|     // update map tiles
 | ||||
|     g_map.removeThingByPtr(asThing()); | ||||
|  | @ -201,11 +200,46 @@ void Creature::walk(const Position& position) | |||
|         m_direction = Otc::West; | ||||
|         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
 | ||||
|         // we teleported, dont walk or change direction
 | ||||
|         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
 | ||||
|     int groundSpeed = 0; | ||||
| 
 | ||||
|  | @ -213,7 +247,7 @@ void Creature::walk(const Position& position) | |||
|     if(ground) | ||||
|         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; | ||||
| 
 | ||||
|     m_walkTimePerPixel = walkTime / 32.0; | ||||
|  |  | |||
|  | @ -87,6 +87,18 @@ void Game::walk(Otc::Direction direction) | |||
|     case Otc::West: | ||||
|         m_protocolGame->sendWalkWest(); | ||||
|         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 sendWalkSouth(); | ||||
|     void sendWalkWest(); | ||||
|     void sendWalkNorthEast(); | ||||
|     void sendWalkSouthEast(); | ||||
|     void sendWalkSouthWest(); | ||||
|     void sendWalkNorthWest(); | ||||
|     void sendTurnNorth(); | ||||
|     void sendTurnEast(); | ||||
|     void sendTurnSouth(); | ||||
|  |  | |||
|  | @ -102,6 +102,34 @@ void ProtocolGame::sendWalkWest() | |||
|     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() | ||||
| { | ||||
|     OutputMessage oMsg; | ||||
|  | @ -129,5 +157,3 @@ void ProtocolGame::sendTurnWest() | |||
|     oMsg.addU8(0x72); | ||||
|     send(oMsg); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -52,6 +52,18 @@ bool UIMap::onKeyPress(uchar keyCode, char keyChar, int keyboardModifiers) | |||
|         } else if(keyCode == Fw::KeyLeft || keyCode == Fw::KeyNumpad4) { | ||||
|             g_game.walk(Otc::West); | ||||
|             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) { | ||||
|         if(keyCode == Fw::KeyUp || keyCode == Fw::KeyNumpad8) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Henrique
						Henrique