walk fixed, animated text changes
This commit is contained in:
parent
400afa9981
commit
ad82c549b8
|
@ -25,6 +25,7 @@
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
#include <framework/core/clock.h>
|
#include <framework/core/clock.h>
|
||||||
#include <framework/core/eventdispatcher.h>
|
#include <framework/core/eventdispatcher.h>
|
||||||
|
#include <framework/graphics/graphics.h>
|
||||||
|
|
||||||
AnimatedText::AnimatedText()
|
AnimatedText::AnimatedText()
|
||||||
{
|
{
|
||||||
|
@ -46,7 +47,7 @@ void AnimatedText::start()
|
||||||
void AnimatedText::draw(const Point& p)
|
void AnimatedText::draw(const Point& p)
|
||||||
{
|
{
|
||||||
if(m_font)
|
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)
|
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);
|
Rect backgroundRect = Rect(x-(13.5), y, 27, 4);
|
||||||
backgroundRect.bound(rect);
|
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);
|
textRect.bound(rect);
|
||||||
|
|
||||||
// distance them
|
// distance them
|
||||||
if(textRect.top() == rect.top())
|
if(textRect.top() == rect.top())
|
||||||
backgroundRect.moveTop(textRect.top() + 15);
|
backgroundRect.moveTop(textRect.top() + 12);
|
||||||
if(backgroundRect.bottom() == rect.bottom())
|
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
|
// health rect is based on background rect, so no worries
|
||||||
Rect healthRect = backgroundRect.expanded(-1);
|
Rect healthRect = backgroundRect.expanded(-1);
|
||||||
|
@ -251,7 +251,7 @@ void Creature::updateWalk()
|
||||||
g_dispatcher.scheduleEvent(std::bind(&Creature::updateWalk, asCreature()), m_walkTimePerPixel);
|
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_walking = false;
|
||||||
m_walkStart = 0;
|
m_walkStart = 0;
|
||||||
|
|
|
@ -62,7 +62,7 @@ public:
|
||||||
|
|
||||||
virtual void walk(const Position& position, bool inverse = true);
|
virtual void walk(const Position& position, bool inverse = true);
|
||||||
void turn(Otc::Direction direction);
|
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; }
|
Point getWalkOffset() { return m_walkOffset; }
|
||||||
|
|
||||||
bool isWalking() { return m_walking; }
|
bool isWalking() { return m_walking; }
|
||||||
|
|
|
@ -28,10 +28,12 @@
|
||||||
LocalPlayer::LocalPlayer()
|
LocalPlayer::LocalPlayer()
|
||||||
{
|
{
|
||||||
m_clientWalking = false;
|
m_clientWalking = false;
|
||||||
|
m_nextWalkDirection = Otc::InvalidDirection;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocalPlayer::clientWalk(Otc::Direction direction)
|
void LocalPlayer::clientWalk(Otc::Direction direction)
|
||||||
{
|
{
|
||||||
|
// We're not walking, so start a client walk.
|
||||||
if(!m_walking) {
|
if(!m_walking) {
|
||||||
Position newPos = m_position + Position::getPositionFromDirection(direction);
|
Position newPos = m_position + Position::getPositionFromDirection(direction);
|
||||||
Creature::walk(newPos, false);
|
Creature::walk(newPos, false);
|
||||||
|
@ -41,33 +43,59 @@ void LocalPlayer::clientWalk(Otc::Direction direction)
|
||||||
|
|
||||||
void LocalPlayer::walk(const Position& position, bool inverse)
|
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) {
|
if(m_clientWalking) {
|
||||||
|
m_clientWalking = false;
|
||||||
|
|
||||||
Position pos = Position::getPositionFromDirection(m_direction);
|
Position pos = Position::getPositionFromDirection(m_direction);
|
||||||
Point walkOffset = Point(m_walkOffset.x - pos.x * 32,
|
Point walkOffset = Point(m_walkOffset.x - pos.x * 32,
|
||||||
m_walkOffset.y - pos.y * 32);
|
m_walkOffset.y - pos.y * 32);
|
||||||
|
|
||||||
Creature::walk(position, inverse);
|
Creature::walk(position, inverse);
|
||||||
|
|
||||||
|
// Restore walk offset, because we were already walking.
|
||||||
m_walkOffset = walkOffset;
|
m_walkOffset = walkOffset;
|
||||||
m_clientWalking = false;
|
|
||||||
}
|
}
|
||||||
else {
|
// If we're not client walking, we'll just walk like every NPC. Ie: When player is pushed.
|
||||||
m_walkOffset.x = 0;
|
else
|
||||||
m_walkOffset.y = 0;
|
|
||||||
Creature::walk(position, inverse);
|
Creature::walk(position, inverse);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocalPlayer::cancelWalk(Otc::Direction direction)
|
void LocalPlayer::cancelWalk(Otc::Direction direction, bool force)
|
||||||
{
|
{
|
||||||
|
// Server said we cant walk. Ie: houses, vip areas.
|
||||||
|
if(force) {
|
||||||
m_clientWalking = false;
|
m_clientWalking = false;
|
||||||
Creature::cancelWalk(direction);
|
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)
|
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;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Position newPos = m_position + Position::getPositionFromDirection(direction);
|
Position newPos = m_position + Position::getPositionFromDirection(direction);
|
||||||
TilePtr tile = g_map.getTile(newPos);
|
TilePtr tile = g_map.getTile(newPos);
|
||||||
|
|
|
@ -44,7 +44,7 @@ public:
|
||||||
|
|
||||||
void clientWalk(Otc::Direction direction);
|
void clientWalk(Otc::Direction direction);
|
||||||
void walk(const Position& position, bool inverse);
|
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);
|
bool canWalk(Otc::Direction direction);
|
||||||
|
|
||||||
LocalPlayerPtr asLocalPlayer() { return std::static_pointer_cast<LocalPlayer>(shared_from_this()); }
|
LocalPlayerPtr asLocalPlayer() { return std::static_pointer_cast<LocalPlayer>(shared_from_this()); }
|
||||||
|
@ -53,6 +53,7 @@ private:
|
||||||
uint16 m_drawSpeed;
|
uint16 m_drawSpeed;
|
||||||
bool m_canReportBugs;
|
bool m_canReportBugs;
|
||||||
bool m_clientWalking;
|
bool m_clientWalking;
|
||||||
|
Otc::Direction m_nextWalkDirection;
|
||||||
|
|
||||||
int m_skills[Otc::LastSkill][Otc::LastSkillType];
|
int m_skills[Otc::LastSkill][Otc::LastSkillType];
|
||||||
double m_statistics[Otc::LastStatistic];
|
double m_statistics[Otc::LastStatistic];
|
||||||
|
|
|
@ -841,7 +841,7 @@ void ProtocolGame::parseTextMessage(InputMessage& msg)
|
||||||
void ProtocolGame::parseCancelWalk(InputMessage& msg)
|
void ProtocolGame::parseCancelWalk(InputMessage& msg)
|
||||||
{
|
{
|
||||||
Otc::Direction direction = (Otc::Direction)msg.getU8();
|
Otc::Direction direction = (Otc::Direction)msg.getU8();
|
||||||
m_localPlayer->cancelWalk(direction);
|
m_localPlayer->cancelWalk(direction, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolGame::parseFloorChangeUp(InputMessage& msg)
|
void ProtocolGame::parseFloorChangeUp(InputMessage& msg)
|
||||||
|
|
|
@ -73,10 +73,10 @@ bool UIMap::onMousePress(const Point& mousePos, Fw::MouseButton button)
|
||||||
|
|
||||||
// cool testing \/
|
// cool testing \/
|
||||||
if(button == Fw::MouseLeftButton) {
|
if(button == Fw::MouseLeftButton) {
|
||||||
/*MissilePtr shot = MissilePtr(new Missile());
|
MissilePtr shot = MissilePtr(new Missile());
|
||||||
shot->setId(1);
|
shot->setId(1);
|
||||||
shot->setPath(g_map.getCentralPosition(), tilePos);
|
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);
|
AnimatedTextPtr animatedText = AnimatedTextPtr(new AnimatedText);
|
||||||
animatedText->setPosition(g_map.getCentralPosition());
|
animatedText->setPosition(g_map.getCentralPosition());
|
||||||
|
@ -91,6 +91,12 @@ bool UIMap::onMousePress(const Point& mousePos, Fw::MouseButton button)
|
||||||
effect->start();
|
effect->start();
|
||||||
if(tile)
|
if(tile)
|
||||||
tile->addEffect(effect);
|
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