From 38873bb99dea8a8089f1056bc1b28a59ed1f83d3 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 13 Jun 2017 19:56:05 +0300 Subject: Move virtual methods from Being constructor to postInit. --- src/actormanager.cpp | 5 ++++- src/being/being.cpp | 20 +++++++++++++++++--- src/being/being.h | 12 +++++++++--- src/being/localplayer.cpp | 5 +++-- src/being/localplayer.h | 2 +- src/gui/windowmanager_unittest.cc | 4 ++-- src/gui/windows/charcreatedialog.cpp | 2 +- src/gui/windows/npcdialog.cpp | 2 +- src/utils/chatutils_unittest.cc | 14 +++++++------- 9 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/actormanager.cpp b/src/actormanager.cpp index 44e8e7cb7..bef691a71 100644 --- a/src/actormanager.cpp +++ b/src/actormanager.cpp @@ -277,7 +277,10 @@ Being *ActorManager::createBeing(const BeingId id, const ActorTypeT type, const BeingTypeId subtype) { - Being *const being = new Being(id, type, subtype, mMap); + Being *const being = Being::createBeing(id, + type, + subtype, + mMap); mActors.insert(being); diff --git a/src/being/being.cpp b/src/being/being.cpp index 97492d431..e954a5e97 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -156,9 +156,7 @@ static const unsigned int SPEECH_MAX_TIME = 800; FOR_EACH (std::vector::const_iterator, it, name) Being::Being(const BeingId id, - const ActorTypeT type, - const BeingTypeId subtype, - Map *const map) : + const ActorTypeT type) : ActorSprite(id), mNextSound(), mInfo(BeingInfo::unknown), @@ -277,7 +275,11 @@ Being::Being(const BeingId id, for_each_badges() mBadges[f] = nullptr; +} +void Being::postInit(const BeingTypeId subtype, + Map *const map) +{ setMap(map); setSubtype(subtype, 0); @@ -5359,3 +5361,15 @@ void Being::setLanguageId(const int lang) restrict2 noexcept2 mLanguageId = lang; } } + +Being *Being::createBeing(const BeingId id, + const ActorTypeT type, + const BeingTypeId subType, + Map *const map) +{ + Being *const being = new Being(id, + type); + being->postInit(subType, + map); + return being; +} diff --git a/src/being/being.h b/src/being/being.h index 52ea8b9ec..3d21311b7 100644 --- a/src/being/being.h +++ b/src/being/being.h @@ -102,9 +102,7 @@ class Being notfinal : public ActorSprite, * @param map the map the being is on */ Being(const BeingId id, - const ActorTypeT type, - const BeingTypeId subtype, - Map *const map); + const ActorTypeT type); A_DELETE_COPY(Being) @@ -1084,6 +1082,11 @@ class Being notfinal : public ActorSprite, void fixDirectionOffsets(int &offsetX, int &offsetY) const; + static Being *createBeing(const BeingId id, + const ActorTypeT type, + const BeingTypeId subtype, + Map *const map); + protected: void drawPlayerSpriteAt(Graphics *restrict const graphics, const int x, @@ -1206,6 +1209,9 @@ class Being notfinal : public ActorSprite, bool mIsGM; protected: + void postInit(const BeingTypeId subType, + Map *const map); + /** * Calculates the offset in the given directions. * If walking in direction 'neg' the value is negated. diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index e2b126065..ea64bb0a3 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -110,8 +110,8 @@ extern OkDialog *weightNotice; extern time_t weightNoticeTime; LocalPlayer::LocalPlayer(const BeingId id, - const BeingTypeId subtype) : - Being(id, ActorType::Player, subtype, nullptr), + const BeingTypeId subType) : + Being(id, ActorType::Player), ActorSpriteListener(), AttributeListener(), PlayerDeathListener(), @@ -184,6 +184,7 @@ LocalPlayer::LocalPlayer(const BeingId id, { logger->log1("LocalPlayer::LocalPlayer"); + postInit(subType, nullptr); mAttackRange = 0; mLevel = 1; mAdvanced = true; diff --git a/src/being/localplayer.h b/src/being/localplayer.h index e123fa6a6..99cab9b55 100644 --- a/src/being/localplayer.h +++ b/src/being/localplayer.h @@ -58,7 +58,7 @@ class LocalPlayer final : public Being, * Constructor. */ explicit LocalPlayer(const BeingId id, - const BeingTypeId subtype = BeingTypeId_zero); + const BeingTypeId subType = BeingTypeId_zero); A_DELETE_COPY(LocalPlayer) diff --git a/src/gui/windowmanager_unittest.cc b/src/gui/windowmanager_unittest.cc index 0928cb121..8f280036a 100644 --- a/src/gui/windowmanager_unittest.cc +++ b/src/gui/windowmanager_unittest.cc @@ -250,7 +250,7 @@ TEST_CASE("Windows tests", "windowmanager") Map *map = new Map("test map", 10, 10, 32, 32); - Being *being = new Being(BeingId_zero, + Being *being = Being::createBeing(BeingId_zero, ActorType::Avatar, id, map); @@ -404,7 +404,7 @@ TEST_CASE("Windows tests", "windowmanager") { Equipment *equipment = new Equipment; Map *map = new Map("test", 100, 100, 32, 32); - Being *being = new Being(BeingId_zero, + Being *being = Being::createBeing(BeingId_zero, ActorType::Player, BeingTypeId_zero, map); diff --git a/src/gui/windows/charcreatedialog.cpp b/src/gui/windows/charcreatedialog.cpp index 535ee956f..4d4e7b35b 100644 --- a/src/gui/windows/charcreatedialog.cpp +++ b/src/gui/windows/charcreatedialog.cpp @@ -112,7 +112,7 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *const parent, mCreateButton(new Button(this, _("Create"), "create", this)), // TRANSLATORS: char create dialog button mCancelButton(new Button(this, _("Cancel"), "cancel", this)), - mPlayer(new Being(BeingId_zero, + mPlayer(Being::createBeing(BeingId_zero, ActorType::Player, BeingTypeId_zero, nullptr)), diff --git a/src/gui/windows/npcdialog.cpp b/src/gui/windows/npcdialog.cpp index 453f35126..7b1cedfd2 100644 --- a/src/gui/windows/npcdialog.cpp +++ b/src/gui/windows/npcdialog.cpp @@ -1128,7 +1128,7 @@ void NpcDialog::showAvatar(const BeingTypeId avatarId) if (needShow) { delete mAvatarBeing; - mAvatarBeing = new Being(BeingId_zero, + mAvatarBeing = Being::createBeing(BeingId_zero, ActorType::Avatar, avatarId, nullptr); diff --git a/src/utils/chatutils_unittest.cc b/src/utils/chatutils_unittest.cc index f6e608556..cbe87da9d 100644 --- a/src/utils/chatutils_unittest.cc +++ b/src/utils/chatutils_unittest.cc @@ -132,7 +132,7 @@ TEST_CASE("chatutils replaceVars", "") SECTION("player") { - Being *player1 = new Being(static_cast(2), + Being *player1 = Being::createBeing(static_cast(2), ActorType::Player, BeingTypeId_zero, nullptr); @@ -147,7 +147,7 @@ TEST_CASE("chatutils replaceVars", "") SECTION("monster") { - Being *const monster = new Being(static_cast(3), + Being *const monster = Being::createBeing(static_cast(3), ActorType::Monster, BeingTypeId_zero, nullptr); @@ -167,7 +167,7 @@ TEST_CASE("chatutils replaceVars", "") replaceVars(str); REQUIRE(str == "test "); - Being *const player1 = new Being(static_cast(2), + Being *const player1 = Being::createBeing(static_cast(2), ActorType::Player, BeingTypeId_zero, nullptr); @@ -178,7 +178,7 @@ TEST_CASE("chatutils replaceVars", "") replaceVars(str); REQUIRE(str == "test player1"); - Being *const player2 = new Being(static_cast(4), + Being *const player2 = Being::createBeing(static_cast(4), ActorType::Player, BeingTypeId_zero, nullptr); @@ -203,7 +203,7 @@ TEST_CASE("chatutils replaceVars", "") replaceVars(str); REQUIRE(str == "test "); - Being *const player1 = new Being(static_cast(2), + Being *const player1 = Being::createBeing(static_cast(2), ActorType::Player, BeingTypeId_zero, nullptr); @@ -215,7 +215,7 @@ TEST_CASE("chatutils replaceVars", "") replaceVars(str); REQUIRE(str == "test player1"); - Being *const player2 = new Being(static_cast(4), + Being *const player2 = Being::createBeing(static_cast(4), ActorType::Player, BeingTypeId_zero, nullptr); @@ -229,7 +229,7 @@ TEST_CASE("chatutils replaceVars", "") Party *const party2 = Party::getParty(2); - Being *const player3 = new Being(static_cast(5), + Being *const player3 = Being::createBeing(static_cast(5), ActorType::Player, BeingTypeId_zero, nullptr); -- cgit v1.2.3-60-g2f50