walk fixed, animated text changes
This commit is contained in:
		
							parent
							
								
									400afa9981
								
							
						
					
					
						commit
						ad82c549b8
					
				|  | @ -25,6 +25,7 @@ | |||
| #include "map.h" | ||||
| #include <framework/core/clock.h> | ||||
| #include <framework/core/eventdispatcher.h> | ||||
| #include <framework/graphics/graphics.h> | ||||
| 
 | ||||
| AnimatedText::AnimatedText() | ||||
| { | ||||
|  | @ -46,7 +47,7 @@ void AnimatedText::start() | |||
| void AnimatedText::draw(const Point& p) | ||||
| { | ||||
|     if(m_font) | ||||
|         m_font->renderText(m_text, Rect(p + Point(0, -20.0 * g_clock.timeElapsed(m_startTime) / (DURATION / 1000)), m_textSize), Fw::AlignTopCenter, m_color); | ||||
|         m_font->renderText(m_text, Rect(p + Point(20 - m_textSize.width() / 2, -20.0 * g_clock.timeElapsed(m_startTime) / (DURATION / 1000)), m_textSize), Fw::AlignLeft, m_color); | ||||
| } | ||||
| 
 | ||||
| void AnimatedText::setColor(int color) | ||||
|  |  | |||
|  | @ -130,14 +130,14 @@ void Creature::drawInformation(int x, int y, bool useGray, const Rect& rect) | |||
|     Rect backgroundRect = Rect(x-(13.5), y, 27, 4); | ||||
|     backgroundRect.bound(rect); | ||||
| 
 | ||||
|     Rect textRect = Rect(x - m_nameSize.width() / 2.0, y-15, m_nameSize); | ||||
|     Rect textRect = Rect(x - m_nameSize.width() / 2.0, y-12, m_nameSize); | ||||
|     textRect.bound(rect); | ||||
| 
 | ||||
|     // distance them
 | ||||
|     if(textRect.top() == rect.top()) | ||||
|         backgroundRect.moveTop(textRect.top() + 15); | ||||
|         backgroundRect.moveTop(textRect.top() + 12); | ||||
|     if(backgroundRect.bottom() == rect.bottom()) | ||||
|         textRect.moveTop(backgroundRect.top() - 15); | ||||
|         textRect.moveTop(backgroundRect.top() - 12); | ||||
| 
 | ||||
|     // health rect is based on background rect, so no worries
 | ||||
|     Rect healthRect = backgroundRect.expanded(-1); | ||||
|  | @ -251,7 +251,7 @@ void Creature::updateWalk() | |||
|         g_dispatcher.scheduleEvent(std::bind(&Creature::updateWalk, asCreature()), m_walkTimePerPixel); | ||||
| } | ||||
| 
 | ||||
| void Creature::cancelWalk(Otc::Direction direction) | ||||
| void Creature::cancelWalk(Otc::Direction direction, bool) | ||||
| { | ||||
|     m_walking = false; | ||||
|     m_walkStart = 0; | ||||
|  |  | |||
|  | @ -62,7 +62,7 @@ public: | |||
| 
 | ||||
|     virtual void walk(const Position& position, bool inverse = true); | ||||
|     void turn(Otc::Direction direction); | ||||
|     virtual void cancelWalk(Otc::Direction direction); | ||||
|     virtual void cancelWalk(Otc::Direction direction, bool force = false); | ||||
|     Point getWalkOffset() { return m_walkOffset; } | ||||
| 
 | ||||
|     bool isWalking() { return m_walking; } | ||||
|  |  | |||
|  | @ -28,10 +28,12 @@ | |||
| LocalPlayer::LocalPlayer() | ||||
| { | ||||
|     m_clientWalking = false; | ||||
|     m_nextWalkDirection = Otc::InvalidDirection; | ||||
| } | ||||
| 
 | ||||
| void LocalPlayer::clientWalk(Otc::Direction direction) | ||||
| { | ||||
|     // We're not walking, so start a client walk.
 | ||||
|     if(!m_walking) { | ||||
|         Position newPos = m_position + Position::getPositionFromDirection(direction); | ||||
|         Creature::walk(newPos, false); | ||||
|  | @ -41,33 +43,59 @@ void LocalPlayer::clientWalk(Otc::Direction direction) | |||
| 
 | ||||
| void LocalPlayer::walk(const Position& position, bool inverse) | ||||
| { | ||||
|     // This can only be received by protocol, so its always inverse.
 | ||||
| 
 | ||||
|     // If we're already walking, just finish it.
 | ||||
|     if(m_clientWalking) { | ||||
|         m_clientWalking = false; | ||||
| 
 | ||||
|         Position pos = Position::getPositionFromDirection(m_direction); | ||||
|         Point walkOffset = Point(m_walkOffset.x - pos.x * 32, | ||||
|                                  m_walkOffset.y - pos.y * 32); | ||||
| 
 | ||||
|         Creature::walk(position, inverse); | ||||
| 
 | ||||
|         // Restore walk offset, because we were already walking.
 | ||||
|         m_walkOffset = walkOffset; | ||||
|         m_clientWalking = false; | ||||
|     } | ||||
|     else { | ||||
|         m_walkOffset.x = 0; | ||||
|         m_walkOffset.y = 0; | ||||
|     // If we're not client walking, we'll just walk like every NPC. Ie: When player is pushed.
 | ||||
|     else | ||||
|         Creature::walk(position, inverse); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void LocalPlayer::cancelWalk(Otc::Direction direction) | ||||
| void LocalPlayer::cancelWalk(Otc::Direction direction, bool force) | ||||
| { | ||||
|     m_clientWalking = false; | ||||
|     Creature::cancelWalk(direction); | ||||
|     // Server said we cant walk. Ie: houses, vip areas.
 | ||||
|     if(force) { | ||||
|         m_clientWalking = false; | ||||
|         Creature::cancelWalk(direction); | ||||
|     } | ||||
|     else { | ||||
|         // Walk finished, and we already received the confirmation from server.
 | ||||
|         if(m_walking && !m_clientWalking) { | ||||
|             m_clientWalking = false; | ||||
|             Creature::cancelWalk(direction); | ||||
| 
 | ||||
|             if(m_nextWalkDirection != Otc::InvalidDirection) { | ||||
|                 g_game.walk(m_nextWalkDirection); | ||||
|                 m_nextWalkDirection = Otc::InvalidDirection; | ||||
|             } | ||||
|         } | ||||
|         //else..
 | ||||
|         // Walk finished, however we havent received the confirmation from server. So wait for it.
 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| bool LocalPlayer::canWalk(Otc::Direction direction) | ||||
| { | ||||
|     if(m_walking) | ||||
|     if(m_walking) { | ||||
|         if(direction != m_direction && m_nextWalkDirection != direction) | ||||
|             m_nextWalkDirection = direction; | ||||
|         else if(direction == m_direction && m_nextWalkDirection != Otc::InvalidDirection) | ||||
|             m_nextWalkDirection = Otc::InvalidDirection; | ||||
| 
 | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     Position newPos = m_position + Position::getPositionFromDirection(direction); | ||||
|     TilePtr tile = g_map.getTile(newPos); | ||||
|  |  | |||
|  | @ -44,7 +44,7 @@ public: | |||
| 
 | ||||
|     void clientWalk(Otc::Direction direction); | ||||
|     void walk(const Position& position, bool inverse); | ||||
|     void cancelWalk(Otc::Direction direction); | ||||
|     void cancelWalk(Otc::Direction direction, bool force = false); | ||||
|     bool canWalk(Otc::Direction direction); | ||||
| 
 | ||||
|     LocalPlayerPtr asLocalPlayer() { return std::static_pointer_cast<LocalPlayer>(shared_from_this()); } | ||||
|  | @ -53,6 +53,7 @@ private: | |||
|     uint16 m_drawSpeed; | ||||
|     bool m_canReportBugs; | ||||
|     bool m_clientWalking; | ||||
|     Otc::Direction m_nextWalkDirection; | ||||
| 
 | ||||
|     int m_skills[Otc::LastSkill][Otc::LastSkillType]; | ||||
|     double m_statistics[Otc::LastStatistic]; | ||||
|  |  | |||
|  | @ -841,7 +841,7 @@ void ProtocolGame::parseTextMessage(InputMessage& msg) | |||
| void ProtocolGame::parseCancelWalk(InputMessage& msg) | ||||
| { | ||||
|     Otc::Direction direction = (Otc::Direction)msg.getU8(); | ||||
|     m_localPlayer->cancelWalk(direction); | ||||
|     m_localPlayer->cancelWalk(direction, true); | ||||
| } | ||||
| 
 | ||||
| void ProtocolGame::parseFloorChangeUp(InputMessage& msg) | ||||
|  |  | |||
|  | @ -73,10 +73,10 @@ bool UIMap::onMousePress(const Point& mousePos, Fw::MouseButton button) | |||
| 
 | ||||
|         // cool testing \/
 | ||||
|         if(button == Fw::MouseLeftButton) { | ||||
|             /*MissilePtr shot = MissilePtr(new Missile());
 | ||||
|             MissilePtr shot = MissilePtr(new Missile()); | ||||
|             shot->setId(1); | ||||
|             shot->setPath(g_map.getCentralPosition(), tilePos); | ||||
|             g_map.addThing(shot, g_map.getCentralPosition());*/ | ||||
|             g_map.addThing(shot, g_map.getCentralPosition()); | ||||
| 
 | ||||
|             AnimatedTextPtr animatedText = AnimatedTextPtr(new AnimatedText); | ||||
|             animatedText->setPosition(g_map.getCentralPosition()); | ||||
|  | @ -91,6 +91,12 @@ bool UIMap::onMousePress(const Point& mousePos, Fw::MouseButton button) | |||
|             effect->start(); | ||||
|             if(tile) | ||||
|                 tile->addEffect(effect); | ||||
| 
 | ||||
|             AnimatedTextPtr animatedText = AnimatedTextPtr(new AnimatedText); | ||||
|             animatedText->setPosition(g_map.getCentralPosition()); | ||||
|             animatedText->setColor(12); | ||||
|             animatedText->setText("8"); | ||||
|             g_map.addThing(animatedText, g_map.getCentralPosition()); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Henrique Santiago
						Henrique Santiago