diff --git a/src/client/creature.cpp b/src/client/creature.cpp index ca2b66cc..f6d708f7 100644 --- a/src/client/creature.cpp +++ b/src/client/creature.cpp @@ -576,36 +576,23 @@ void Creature::setName(const std::string& name) void Creature::setHealthPercent(uint8 healthPercent) { - m_informationColor = Color::black; - - if(healthPercent > 92) { - m_informationColor.setGreen(188); - } - else if(healthPercent > 60) { - m_informationColor.setRed(80); - m_informationColor.setGreen(161); - m_informationColor.setBlue(80); - } - else if(healthPercent > 30) { - m_informationColor.setRed(161); - m_informationColor.setGreen(161); - } - else if(healthPercent > 8) { - m_informationColor.setRed(160); - m_informationColor.setGreen(39); - m_informationColor.setBlue(39); - } - else if(healthPercent > 3) { - m_informationColor.setRed(160); - } - else { - m_informationColor.setRed(79); - } + if(healthPercent > 92) + m_informationColor = Color(0, 188, 0); + else if(healthPercent > 60) + m_informationColor = Color(80, 161, 80); + else if(healthPercent > 30) + m_informationColor = Color(80, 161, 0); + else if(healthPercent > 8) + m_informationColor = Color(160, 39, 39); + else if(healthPercent > 3) + m_informationColor = Color(160, 0, 0); + else + m_informationColor = Color(79, 0, 0); m_healthPercent = healthPercent; callLuaField("onHealthPercentChange", healthPercent); - if(healthPercent < 1) + if(healthPercent <= 0) onDeath(); } @@ -826,11 +813,7 @@ int Creature::getStepDuration(bool ignoreDiagonal) Point Creature::getDisplacement() { - if(m_outfit.getCategory() == ThingCategoryEffect) - return Point(8, 8); - else if(m_outfit.getCategory() == ThingCategoryItem) - return Point(0, 0); - return Thing::getDisplacement(); + return Point(getDisplacementX(), getDisplacementY()); } int Creature::getDisplacementX() diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index 9b6677c6..dafdc268 100644 --- a/src/client/localplayer.cpp +++ b/src/client/localplayer.cpp @@ -57,21 +57,6 @@ LocalPlayer::LocalPlayer() m_totalCapacity = -1; } -void LocalPlayer::draw(const Point& dest, float scaleFactor, bool animate, LightView *lightView) -{ - Creature::draw(dest, scaleFactor, animate, lightView); - - /* - // This is a test to rotation, translate and scale transformations. - Point rotateOffset = dest; - rotateOffset += ((animate ? m_walkOffset : Point(0,0)) + Point(16,16)) * scaleFactor; - g_painter->pushTransformMatrix(); - g_painter->rotate(rotateOffset, Fw::pi * std::sin(g_clock.millis()/1000.0f)); - Creature::draw(dest, scaleFactor, animate, lightView); - g_painter->popTransformMatrix(); - */ -} - void LocalPlayer::lockWalk(int millis) { m_walkLockExpiration = std::max(m_walkLockExpiration, (ticks_t) g_clock.millis() + millis); diff --git a/src/client/localplayer.h b/src/client/localplayer.h index 3c7feb36..242e9bd6 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -35,8 +35,6 @@ class LocalPlayer : public Player public: LocalPlayer(); - virtual void draw(const Point& dest, float scaleFactor, bool animate, LightView *lightView = nullptr); - void unlockWalk() { m_walkLockExpiration = 0; } void lockWalk(int millis = 250); void stopAutoWalkUpdate(); diff --git a/src/client/position.h b/src/client/position.h index 3f95ef0f..50b1540d 100644 --- a/src/client/position.h +++ b/src/client/position.h @@ -141,46 +141,26 @@ public: } Otc::Direction getDirectionFromPosition(const Position& position) const { - int dx = position.x - x; - int dy = position.y - y; - - if(dx == 0 && dy == 0) + float angle = getAngleFromPosition(position) * RAD_TO_DEC; + + if(angle >= 360 - 22.5 || angle < 0 + 22.5) + return Otc::East; + else if(angle >= 45 - 22.5 && angle < 45 + 22.5) + return Otc::NorthEast; + else if(angle >= 90 - 22.5 && angle < 90 + 22.5) + return Otc::North; + else if(angle >= 135 - 22.5 && angle < 135 + 22.5) + return Otc::NorthWest; + else if(angle >= 180 - 22.5 && angle < 180 + 22.5) + return Otc::West; + else if(angle >= 225 - 22.5 && angle < 225 + 22.5) + return Otc::SouthWest; + else if(angle >= 270 - 22.5 && angle < 270 + 22.5) + return Otc::South; + else if(angle >= 315 - 22.5 && angle < 315 + 22.5) + return Otc::SouthEast; + else return Otc::InvalidDirection; - else if(dx == 0) { - if(dy < 0) - return Otc::North; - else if(dy > 0) - return Otc::South; - } - else if(dy == 0) { - if(dx < 0) - return Otc::West; - else if(dx > 0) - return Otc::East; - } - else { - float angle = std::atan2(dy * -1, dx) * RAD_TO_DEC; - if(angle < 0) - angle += 360; - - if(angle >= 360 - 22.5 || angle < 0 + 22.5) - return Otc::East; - else if(angle >= 45 - 22.5 && angle < 45 + 22.5) - return Otc::NorthEast; - else if(angle >= 90 - 22.5 && angle < 90 + 22.5) - return Otc::North; - else if(angle >= 135 - 22.5 && angle < 135 + 22.5) - return Otc::NorthWest; - else if(angle >= 180 - 22.5 && angle < 180 + 22.5) - return Otc::West; - else if(angle >= 225 - 22.5 && angle < 225 + 22.5) - return Otc::SouthWest; - else if(angle >= 270 - 22.5 && angle < 270 + 22.5) - return Otc::South; - else if(angle >= 315 - 22.5 && angle < 315 + 22.5) - return Otc::SouthEast; - } - return Otc::InvalidDirection; } bool isMapPosition() const { return (x < 65535 && y < 65535 && z <= Otc::MAX_Z); }