From 8ed5f412e2a3ffd9b141fc5d82e8dc93b245e43f Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Sat, 15 Jul 2023 14:50:09 +0300 Subject: [PATCH] Show per-type object names in editor --- .../CObjectClassesHandler.cpp | 4 +- .../CommonConstructors.cpp | 41 +++++++++++++++++++ .../CommonConstructors.h | 21 ++++++++++ lib/registerTypes/RegisterTypes.h | 2 + 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/lib/mapObjectConstructors/CObjectClassesHandler.cpp b/lib/mapObjectConstructors/CObjectClassesHandler.cpp index 18926795b..22265c0cb 100644 --- a/lib/mapObjectConstructors/CObjectClassesHandler.cpp +++ b/lib/mapObjectConstructors/CObjectClassesHandler.cpp @@ -57,6 +57,8 @@ CObjectClassesHandler::CObjectClassesHandler() SET_HANDLER_CLASS("shrine", ShrineInstanceConstructor); SET_HANDLER_CLASS("hillFort", HillFortInstanceConstructor); SET_HANDLER_CLASS("shipyard", ShipyardInstanceConstructor); + SET_HANDLER_CLASS("monster", CreatureInstanceConstructor); + SET_HANDLER_CLASS("resource", ResourceInstanceConstructor); SET_HANDLER_CLASS("static", CObstacleConstructor); SET_HANDLER_CLASS("", CObstacleConstructor); @@ -73,7 +75,6 @@ CObjectClassesHandler::CObjectClassesHandler() SET_HANDLER("artifact", CGArtifact); SET_HANDLER("borderGate", CGBorderGate); SET_HANDLER("borderGuard", CGBorderGuard); - SET_HANDLER("monster", CGCreature); SET_HANDLER("denOfThieves", CGDenOfthieves); SET_HANDLER("event", CGEvent); SET_HANDLER("garrison", CGGarrison); @@ -87,7 +88,6 @@ CObjectClassesHandler::CObjectClassesHandler() SET_HANDLER("pandora", CGPandoraBox); SET_HANDLER("prison", CGHeroInstance); SET_HANDLER("questGuard", CGQuestGuard); - SET_HANDLER("resource", CGResource); SET_HANDLER("scholar", CGScholar); SET_HANDLER("seerHut", CGSeerHut); SET_HANDLER("sign", CGSignBottle); diff --git a/lib/mapObjectConstructors/CommonConstructors.cpp b/lib/mapObjectConstructors/CommonConstructors.cpp index 4a21d8825..f762b4d46 100644 --- a/lib/mapObjectConstructors/CommonConstructors.cpp +++ b/lib/mapObjectConstructors/CommonConstructors.cpp @@ -20,6 +20,7 @@ #include "../TerrainHandler.h" #include "../VCMI_Lib.h" +#include "../mapObjects/CGCreature.h" #include "../mapObjects/CGHeroInstance.h" #include "../mapObjects/CGMarket.h" #include "../mapObjects/CGTownInstance.h" @@ -35,6 +36,26 @@ bool CObstacleConstructor::isStaticObject() return true; } +bool CreatureInstanceConstructor::hasNameTextID() const +{ + return true; +} + +std::string CreatureInstanceConstructor::getNameTextID() const +{ + return VLC->creatures()->getByIndex(getSubIndex())->getNamePluralTextID(); +} + +bool ResourceInstanceConstructor::hasNameTextID() const +{ + return true; +} + +std::string ResourceInstanceConstructor::getNameTextID() const +{ + return TextIdentifier("core", "restypes", getSubIndex()).get(); +} + void CTownInstanceConstructor::initTypeData(const JsonNode & input) { VLC->modh->identifiers.requestIdentifier("faction", input["faction"], [&](si32 index) @@ -86,6 +107,16 @@ void CTownInstanceConstructor::randomizeObject(CGTownInstance * object, CRandomG object->appearance = templ; } +bool CTownInstanceConstructor::hasNameTextID() const +{ + return true; +} + +std::string CTownInstanceConstructor::getNameTextID() const +{ + return faction->getNameTextID(); +} + void CHeroInstanceConstructor::initTypeData(const JsonNode & input) { VLC->modh->identifiers.requestIdentifier( @@ -133,6 +164,16 @@ void CHeroInstanceConstructor::randomizeObject(CGHeroInstance * object, CRandomG } +bool CHeroInstanceConstructor::hasNameTextID() const +{ + return true; +} + +std::string CHeroInstanceConstructor::getNameTextID() const +{ + return heroClass->getNameTextID(); +} + void BoatInstanceConstructor::initTypeData(const JsonNode & input) { layer = EPathfindingLayer::SAIL; diff --git a/lib/mapObjectConstructors/CommonConstructors.h b/lib/mapObjectConstructors/CommonConstructors.h index 4a58d699e..4a2d9481e 100644 --- a/lib/mapObjectConstructors/CommonConstructors.h +++ b/lib/mapObjectConstructors/CommonConstructors.h @@ -22,6 +22,7 @@ class CGTownInstance; class CGHeroInstance; class CGMarket; class CHeroClass; +class CGCreature; class CBank; class CGBoat; class CFaction; @@ -33,6 +34,20 @@ public: bool isStaticObject() override; }; +class CreatureInstanceConstructor : public CDefaultObjectTypeHandler +{ +public: + bool hasNameTextID() const override; + std::string getNameTextID() const override; +}; + +class ResourceInstanceConstructor : public CDefaultObjectTypeHandler +{ +public: + bool hasNameTextID() const override; + std::string getNameTextID() const override; +}; + class CTownInstanceConstructor : public CDefaultObjectTypeHandler { JsonNode filtersJson; @@ -48,6 +63,9 @@ public: void randomizeObject(CGTownInstance * object, CRandomGenerator & rng) const override; void afterLoadFinalization() override; + bool hasNameTextID() const override; + std::string getNameTextID() const override; + template void serialize(Handler &h, const int version) { h & filtersJson; @@ -72,6 +90,9 @@ public: void randomizeObject(CGHeroInstance * object, CRandomGenerator & rng) const override; void afterLoadFinalization() override; + bool hasNameTextID() const override; + std::string getNameTextID() const override; + template void serialize(Handler &h, const int version) { h & filtersJson; diff --git a/lib/registerTypes/RegisterTypes.h b/lib/registerTypes/RegisterTypes.h index c23a60074..09a2d8f7f 100644 --- a/lib/registerTypes/RegisterTypes.h +++ b/lib/registerTypes/RegisterTypes.h @@ -107,6 +107,8 @@ void registerTypesMapObjectTypes(Serializer &s) s.template registerType(); s.template registerType(); s.template registerType(); + s.template registerType(); + s.template registerType(); #define REGISTER_GENERIC_HANDLER(TYPENAME) s.template registerType >()