From 3420babbbc6d10f1fc5be7ff7b895e618acd5f0e Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 19 Oct 2015 15:44:14 +0300 Subject: Allow support for different horses riding. --- src/being/actorsprite.cpp | 4 ++-- src/being/actorsprite.h | 4 ++-- src/being/being.cpp | 29 +++++++++++++++++++++-------- src/being/being.h | 2 ++ 4 files changed, 27 insertions(+), 12 deletions(-) (limited to 'src/being') diff --git a/src/being/actorsprite.cpp b/src/being/actorsprite.cpp index 0518c82fa..9b76ac328 100644 --- a/src/being/actorsprite.cpp +++ b/src/being/actorsprite.cpp @@ -66,6 +66,7 @@ ActorSprite::ActorSprite(const BeingId id) : mStunParticleEffects(), mStatusParticleEffects(&mStunParticleEffects, false), mChildParticleEffects(&mStatusParticleEffects, false), + mHorseId(0), mId(id), mStunMode(0), mUsedTargetCursor(nullptr), @@ -74,8 +75,7 @@ ActorSprite::ActorSprite(const BeingId id) : mCursorPaddingY(0), mMustResetParticles(false), mPoison(false), - mHaveCart(false), - mRiding(false) + mHaveCart(false) { } diff --git a/src/being/actorsprite.h b/src/being/actorsprite.h index 93fddedce..d5cb16613 100644 --- a/src/being/actorsprite.h +++ b/src/being/actorsprite.h @@ -177,7 +177,7 @@ class ActorSprite notfinal : public CompoundSprite, public Actor { return mHaveCart; } virtual void setRiding(const bool b) - { mRiding = b; } + { mHorseId = b ? 1 : 0; } protected: /** @@ -226,6 +226,7 @@ class ActorSprite notfinal : public CompoundSprite, public Actor ParticleList mStunParticleEffects; ParticleVector mStatusParticleEffects; ParticleList mChildParticleEffects; + int mHorseId; BeingId mId; uint16_t mStunMode; /**< Stun mode; zero if not stunned */ @@ -243,7 +244,6 @@ class ActorSprite notfinal : public CompoundSprite, public Actor bool mMustResetParticles; bool mPoison; bool mHaveCart; - bool mRiding; }; #endif // BEING_ACTORSPRITE_H diff --git a/src/being/being.cpp b/src/being/being.cpp index 03e67f327..96c94cc92 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -1249,7 +1249,7 @@ void Being::fireMissile(Being *const victim, const std::string &particle) const std::string Being::getSitAction() const { - if (mRiding) + if (mHorseId != 0) return SpriteAction::SITRIDE; if (mMap) { @@ -1267,7 +1267,7 @@ std::string Being::getSitAction() const std::string Being::getMoveAction() const { - if (mRiding) + if (mHorseId != 0) return SpriteAction::RIDE; if (mMap) { @@ -1285,7 +1285,7 @@ std::string Being::getWeaponAttackAction(const ItemInfo *const weapon) const if (!weapon) return SpriteAction::ATTACK; - if (mRiding) + if (mHorseId != 0) return weapon->getRideAttackAction(); if (mMap) { @@ -1317,7 +1317,7 @@ std::string Being::getAttackAction(const Attack *const attack1) const #define getSpriteAction(func, action) \ std::string Being::get##func##Action() const \ { \ - if (mRiding) \ + if (mHorseId != 0) \ return SpriteAction::action##RIDE; \ if (mMap) \ { \ @@ -4055,14 +4055,27 @@ void Being::removeHorse() void Being::setRiding(const bool b) { - if (b == mRiding) + if (serverFeatures->haveExtendedRiding()) return; - mRiding = b; + + if (b == (mHorseId != 0)) + return; + if (b) + setHorse(1); + else + setHorse(0); +} + +void Being::setHorse(const int horseId) +{ + if (mHorseId == horseId) + return; + mHorseId = horseId; setAction(mAction, 0); removeHorse(); - if (b) + if (mHorseId != 0) { - mHorseInfo = HorseDB::get(1); + mHorseInfo = HorseDB::get(horseId); if (mHorseInfo) { FOR_EACH (SpriteRefs, it, mHorseInfo->downSprites) diff --git a/src/being/being.h b/src/being/being.h index 8aad79698..9b6f3f6f7 100644 --- a/src/being/being.h +++ b/src/being/being.h @@ -895,6 +895,8 @@ class Being notfinal : public ActorSprite, void setRiding(const bool b) override final; + void setHorse(const int horseId); + void removeHorse(); void setSellBoard(const std::string &text); -- cgit v1.2.3-70-g09d2