Crossfire Resources Editor
ResourcesManager.h
Go to the documentation of this file.
1 /*
2  * Crossfire -- cooperative multi-player graphical RPG and adventure game
3  *
4  * Copyright (c) 2022 the Crossfire Development Team
5  *
6  * Crossfire is free software and comes with ABSOLUTELY NO WARRANTY. You are
7  * welcome to redistribute it under certain conditions. For details, please
8  * see COPYING and LICENSE.
9  *
10  * The authors can be reached via e-mail at <crossfire@metalforge.org>.
11  */
12 
13 #ifndef RESOURCESMANAGER_H
14 #define RESOURCESMANAGER_H
15 
16 #include "global.h"
17 #include "object.h"
18 #include "quest.h"
19 #include "AssetsTracker.h"
20 #include <set>
21 #include <QObject>
22 #include "ModifiedAssetsManager.h"
23 #include "LicenseManager.h"
24 
28 #include "faces/FaceWrapper.h"
29 #include "faces/FacesetsWrapper.h"
31 #include "quests/QuestWrapper.h"
32 #include "regions/RegionWrapper.h"
38 #include "recipes/RecipeWrapper.h"
39 
40 class CREMapInformation;
42 class AssetWrapper;
43 
44 class ResourcesManager;
45 
46 template<class A, class W>
48 public:
49  W *wrap(A *asset, AssetWrapper *parent, ResourcesManager *resources) {
50  if (!myWrappedAssets.contains(asset)) {
51  myWrappedAssets[asset] = new W(parent, asset, resources);
52  }
53  return myWrappedAssets[asset];
54  }
55  void remove(A *asset) {
56  auto found = myWrappedAssets.find(asset);
57  if (found != myWrappedAssets.end()) {
58  delete found.value();
59  myWrappedAssets.erase(found);
60  }
61  }
62 private:
63  QHash<A *, W *> myWrappedAssets;
64 };
65 
73 };
74 
75 typedef std::function<bool(ArchetypeUse use, const archetype*, const treasurelist*, const CREMapInformation*, recipe*)> AssetUseCallback;
76 
80 class ResourcesManager : public QObject, AssetsTracker
81 {
82  Q_OBJECT
83 
84  public:
86  virtual ~ResourcesManager();
87 
88  void setMapInformationManager(CREMapInformationManager *mapInformationManager) {
89  myMapInformationManager = mapInformationManager;
90  }
93  }
94 
95  void load();
96 
97  int recipeMaxIngredients() const;
98  QStringList recipes(int count) const;
99  const recipe* getRecipe(int ingredients, const QString& name) const;
100 
101  virtual void assetDefined(const archetype *arch, const std::string &filename) override { myArchetypes.assetDefined(arch, filename); }
102  virtual void assetDefined(const quest_definition *asset, const std::string &filename) override { myQuests.assetDefined(asset, filename); }
103  virtual void assetDefined(const treasurelist *asset, const std::string &filename) override { myTreasures.assetDefined(asset, filename); }
104  virtual void assetDefined(const GeneralMessage *asset, const std::string &filename) override { myGeneralMessages.assetDefined(asset, filename); }
105  virtual void assetDefined(const artifact *asset, const std::string &filename) override { myArtifacts.assetDefined(asset, filename); }
106  virtual void assetDefined(const Face *asset, const std::string &filename) override { myFaces.assetDefined(asset, filename); }
107  virtual void assetDefined(const Animations *asset, const std::string &filename) override { myAnimations.assetDefined(asset, filename); }
108 
109  const std::map<std::string, std::set<const archetype*> >& origins() const { return myArchetypes.origins(); }
110  std::string originOf(const archetype *arch) const { return myArchetypes.originOf(arch); }
111  std::vector<std::string> archetypeFiles() const { return myArchetypes.files(); }
112 
113  const std::map<std::string, std::set<const quest_definition*> >& questOrigins() const { return myQuests.origins(); }
114  std::string originOfQuest(const quest_definition *quest) const { return myQuests.originOf(quest); }
115  std::vector<std::string> questFiles() const { return myQuests.files(); }
116 
117  std::vector<std::string> treasureFiles() const { return myTreasures.files(); }
118 
119  static void archetypeUse(const archetype* item, CREMapInformationManager* store, AssetUseCallback callback);
120 
121  std::string originOf(const Face *face) const { return myFaces.originOf(face); }
122  std::string originOf(const artifact *art) const { return myArtifacts.originOf(art); }
123 
124  bool hasPendingChanges() const {
125  return
131  ;
132  }
133 
134  ArchetypeWrapper *wrap(archetype *arch, AssetWrapper *parent) { return myWrappedArchetypes.wrap(arch, parent, this); }
135  ObjectWrapper *wrap(object *ob, AssetWrapper *parent) { return myWrappedObjects.wrap(ob, parent, this); }
136  AssetWrapper *wrap(Face *face, AssetWrapper *parent) { return myWrappedFaces.wrap(face, parent, this); }
137  AssetWrapper *wrap(Animations *anim, AssetWrapper *parent) { return myWrappedAnimations.wrap(anim, parent, this); }
138  AssetWrapper *wrap(treasurelist *tr, AssetWrapper *parent) { return myWrappedTreasureLists.wrap(tr, parent, this); }
139  AssetWrapper *wrap(treasure *tr, AssetWrapper *parent) { return myWrappedTreasures.wrap(tr, parent, this); }
140  AssetWrapper *wrap(region *reg, AssetWrapper *parent) { return myWrappedRegions.wrap(reg, parent, this); }
141  AssetWrapper *wrap(face_sets *fs, AssetWrapper *parent) { return myWrappedFacesets.wrap(fs, parent, this); }
142  AssetWrapper *wrap(GeneralMessage *message, AssetWrapper *parent) { return myWrappedMessages.wrap(message, parent, this); }
143  AssetWrapper *wrap(quest_definition *quest, AssetWrapper *parent) { return myWrappedQuests.wrap(quest, parent, this); }
144  AssetWrapper *wrap(quest_step_definition *step, AssetWrapper *parent) { return myWrappedQuestSteps.wrap(step, parent, this); }
145  AssetWrapper *wrap(artifactlist *al, AssetWrapper *parent) { return myWrappedArtifactLists.wrap(al, parent, this); }
146  AssetWrapper *wrap(artifact *art, AssetWrapper *parent) {
147  auto wrapper = myWrappedArtifacts.wrap(art, parent, this);
148  connect(wrapper, &AssetWrapper::modified, [wrapper, this] { myArtifacts.assetModified(wrapper->wrappedItem()); });
149  return wrapper;
150  }
151  AssetWrapper *wrap(recipelist *list, AssetWrapper *parent) { return myWrappedRecipeLists.wrap(list, parent, this); }
152  AssetWrapper *wrap(recipe *rc, AssetWrapper *parent) { return myWrappedRecipes.wrap(rc, parent, this); }
153  void remove(treasure *tr) { myWrappedTreasures.remove(tr); }
154 
156 
157  public slots:
158  void archetypeModified(archetype *arch);
159  void saveArchetypes();
160  void questModified(quest_definition *quest);
161  void saveQuests();
162  void treasureModified(treasurelist *treasure);
163  void saveTreasures();
164  void generalMessageModified(GeneralMessage *message);
165  void saveGeneralMessages();
166  void saveArtifacts();
167 
168  protected:
170  QList<QHash<QString, recipe*> > myRecipes;
194 };
195 
196 #endif /* RESOURCESMANAGER_H */
ResourcesManager::treasureModified
void treasureModified(treasurelist *treasure)
Definition: ResourcesManager.cpp:229
ResourcesManager::myQuests
ModifiedAssetsManager< quest_definition > myQuests
Definition: ResourcesManager.h:172
ResourcesManager::assetDefined
virtual void assetDefined(const Animations *asset, const std::string &filename) override
Definition: ResourcesManager.h:107
GeneralMessageWrapper.h
ModifiedAssetsManager::origins
const std::map< std::string, std::set< const T * > > & origins() const
Definition: ModifiedAssetsManager.h:27
ResourcesManager::myWrappedQuestSteps
AssetWrapperManager< quest_step_definition, QuestStepWrapper > myWrappedQuestSteps
Definition: ResourcesManager.h:188
ResourcesManager::licenseManager
LicenseManager * licenseManager()
Definition: ResourcesManager.h:155
ArtifactListWrapper.h
ResourcesManager::ResourcesManager
ResourcesManager()
Definition: ResourcesManager.cpp:44
ResourcesManager::myWrappedFaces
AssetWrapperManager< Face, FaceWrapper > myWrappedFaces
Definition: ResourcesManager.h:180
ResourcesManager::wrap
AssetWrapper * wrap(artifact *art, AssetWrapper *parent)
Definition: ResourcesManager.h:146
ResourcesManager::getRecipe
const recipe * getRecipe(int ingredients, const QString &name) const
Definition: ResourcesManager.cpp:129
ResourcesManager
Class managing all assets, tracking in which file they are, which are modified, and such.
Definition: ResourcesManager.h:80
ResourcesManager::saveArchetypes
void saveArchetypes()
Definition: ResourcesManager.cpp:217
ResourcesManager::questModified
void questModified(quest_definition *quest)
Definition: ResourcesManager.cpp:221
ResourcesManager::assetDefined
virtual void assetDefined(const quest_definition *asset, const std::string &filename) override
Definition: ResourcesManager.h:102
ResourcesManager::wrap
ArchetypeWrapper * wrap(archetype *arch, AssetWrapper *parent)
Definition: ResourcesManager.h:134
ResourcesManager::myArtifacts
ModifiedAssetsManager< artifact > myArtifacts
Definition: ResourcesManager.h:175
ModifiedAssetsManager::hasPendingChanges
bool hasPendingChanges() const
Definition: ModifiedAssetsManager.h:67
ResourcesManager::assetDefined
virtual void assetDefined(const archetype *arch, const std::string &filename) override
Definition: ResourcesManager.h:101
ResourcesManager::questFiles
std::vector< std::string > questFiles() const
Definition: ResourcesManager.h:115
ResourcesManager::myWrappedRecipeLists
AssetWrapperManager< recipelist, RecipeListWrapper > myWrappedRecipeLists
Definition: ResourcesManager.h:191
ResourcesManager::wrap
AssetWrapper * wrap(treasure *tr, AssetWrapper *parent)
Definition: ResourcesManager.h:139
ResourcesManager::myWrappedArtifacts
AssetWrapperManager< artifact, ArtifactWrapper > myWrappedArtifacts
Definition: ResourcesManager.h:190
ArchetypeUse
ArchetypeUse
Definition: ResourcesManager.h:66
ModifiedAssetsManager::files
std::vector< std::string > files() const
Definition: ModifiedAssetsManager.h:29
ObjectWrapper.h
ModifiedAssetsManager::originOf
std::string originOf(const T *asset) const
Definition: ModifiedAssetsManager.h:37
ResourcesManager::myWrappedMessages
AssetWrapperManager< GeneralMessage, GeneralMessageWrapper > myWrappedMessages
Definition: ResourcesManager.h:186
ResourcesManager::myLicenseManager
LicenseManager myLicenseManager
Definition: ResourcesManager.h:193
RecipeWrapper.h
ResourcesManager::archetypeUse
static void archetypeUse(const archetype *item, CREMapInformationManager *store, AssetUseCallback callback)
Definition: ResourcesManager.cpp:137
ResourcesManager::recipeMaxIngredients
int recipeMaxIngredients() const
Definition: ResourcesManager.cpp:114
DEATH_ANIM
@ DEATH_ANIM
Definition: ResourcesManager.h:68
ResourcesManager::originOf
std::string originOf(const artifact *art) const
Definition: ResourcesManager.h:122
ResourcesManager::saveQuests
void saveQuests()
Definition: ResourcesManager.cpp:225
ResourcesManager::myMapInformationManager
CREMapInformationManager * myMapInformationManager
Definition: ResourcesManager.h:169
AssetWrapperManager::wrap
W * wrap(A *asset, AssetWrapper *parent, ResourcesManager *resources)
Definition: ResourcesManager.h:49
ResourcesManager::treasureFiles
std::vector< std::string > treasureFiles() const
Definition: ResourcesManager.h:117
LicenseManager.h
ResourcesManager::myGeneralMessages
ModifiedAssetsManager< GeneralMessage > myGeneralMessages
Definition: ResourcesManager.h:174
ResourcesManager::getMapInformationManager
CREMapInformationManager * getMapInformationManager()
Definition: ResourcesManager.h:91
ResourcesManager::wrap
AssetWrapper * wrap(quest_step_definition *step, AssetWrapper *parent)
Definition: ResourcesManager.h:144
QuestWrapper.h
AssetWrapperManager::remove
void remove(A *asset)
Definition: ResourcesManager.h:55
ResourcesManager::saveArtifacts
void saveArtifacts()
Definition: ResourcesManager.cpp:264
CREMapInformation
Definition: CREMapInformation.h:27
ResourcesManager::originOf
std::string originOf(const archetype *arch) const
Definition: ResourcesManager.h:110
ResourcesManager::wrap
AssetWrapper * wrap(GeneralMessage *message, AssetWrapper *parent)
Definition: ResourcesManager.h:142
ResourcesManager::wrap
ObjectWrapper * wrap(object *ob, AssetWrapper *parent)
Definition: ResourcesManager.h:135
ResourcesManager::wrap
AssetWrapper * wrap(recipe *rc, AssetWrapper *parent)
Definition: ResourcesManager.h:152
ObjectWrapper
Definition: ObjectWrapper.h:36
ResourcesManager::origins
const std::map< std::string, std::set< const archetype * > > & origins() const
Definition: ResourcesManager.h:109
ResourcesManager::archetypeFiles
std::vector< std::string > archetypeFiles() const
Definition: ResourcesManager.h:111
ResourcesManager::originOf
std::string originOf(const Face *face) const
Definition: ResourcesManager.h:121
ResourcesManager::saveGeneralMessages
void saveGeneralMessages()
Definition: ResourcesManager.cpp:260
ResourcesManager::load
void load()
Definition: ResourcesManager.cpp:57
ResourcesManager::myRecipes
QList< QHash< QString, recipe * > > myRecipes
Definition: ResourcesManager.h:170
ResourcesManager::setMapInformationManager
void setMapInformationManager(CREMapInformationManager *mapInformationManager)
Definition: ResourcesManager.h:88
AssetWrapper
Base class for all assets that can be displayed or edited by CRE.
Definition: AssetWrapper.h:25
AnimationWrapper.h
ResourcesManager::myWrappedArtifactLists
AssetWrapperManager< artifactlist, ArtifactListWrapper > myWrappedArtifactLists
Definition: ResourcesManager.h:189
AssetUseCallback
std::function< bool(ArchetypeUse use, const archetype *, const treasurelist *, const CREMapInformation *, recipe *)> AssetUseCallback
Definition: ResourcesManager.h:75
ResourcesManager::wrap
AssetWrapper * wrap(artifactlist *al, AssetWrapper *parent)
Definition: ResourcesManager.h:145
FacesetsWrapper.h
ResourcesManager::questOrigins
const std::map< std::string, std::set< const quest_definition * > > & questOrigins() const
Definition: ResourcesManager.h:113
ResourcesManager::myFaces
ModifiedAssetsManager< Face > myFaces
Definition: ResourcesManager.h:176
ArchetypeWrapper.h
ResourcesManager::myWrappedArchetypes
AssetWrapperManager< archetype, ArchetypeWrapper > myWrappedArchetypes
Definition: ResourcesManager.h:178
ResourcesManager::recipes
QStringList recipes(int count) const
Definition: ResourcesManager.cpp:119
FaceWrapper.h
ResourcesManager::myWrappedTreasureLists
AssetWrapperManager< treasurelist, TreasureListWrapper > myWrappedTreasureLists
Definition: ResourcesManager.h:182
RegionWrapper.h
AssetWrapper::modified
void modified()
RecipeListWrapper.h
MAP_USE
@ MAP_USE
Definition: ResourcesManager.h:70
ResourcesManager::wrap
AssetWrapper * wrap(Face *face, AssetWrapper *parent)
Definition: ResourcesManager.h:136
ResourcesManager::assetDefined
virtual void assetDefined(const GeneralMessage *asset, const std::string &filename) override
Definition: ResourcesManager.h:104
ResourcesManager::wrap
AssetWrapper * wrap(region *reg, AssetWrapper *parent)
Definition: ResourcesManager.h:140
ResourcesManager::archetypeModified
void archetypeModified(archetype *arch)
Definition: ResourcesManager.cpp:213
ResourcesManager::myWrappedRegions
AssetWrapperManager< region, RegionWrapper > myWrappedRegions
Definition: ResourcesManager.h:184
AssetWrapperManager
Definition: ResourcesManager.h:47
ModifiedAssetsManager::assetModified
void assetModified(T *asset)
Definition: ModifiedAssetsManager.h:53
TREASURE_USE
@ TREASURE_USE
Definition: ResourcesManager.h:69
ResourcesManager::wrap
AssetWrapper * wrap(recipelist *list, AssetWrapper *parent)
Definition: ResourcesManager.h:151
ArchetypeWrapper
Definition: ArchetypeWrapper.h:25
ModifiedAssetsManager.h
ResourcesManager::myWrappedFacesets
AssetWrapperManager< face_sets, FacesetsWrapper > myWrappedFacesets
Definition: ResourcesManager.h:185
ResourcesManager::remove
void remove(treasure *tr)
Definition: ResourcesManager.h:153
ModifiedAssetsManager< archetype >
LicenseManager
Contains all information about licenses for faces.
Definition: LicenseManager.h:25
ModifiedAssetsManager::assetDefined
void assetDefined(const T *asset, const std::string &filename)
Definition: ModifiedAssetsManager.h:46
TreasureListWrapper.h
ResourcesManager::assetDefined
virtual void assetDefined(const artifact *asset, const std::string &filename) override
Definition: ResourcesManager.h:105
ResourcesManager::wrap
AssetWrapper * wrap(treasurelist *tr, AssetWrapper *parent)
Definition: ResourcesManager.h:138
ResourcesManager::myWrappedAnimations
AssetWrapperManager< Animations, AnimationWrapper > myWrappedAnimations
Definition: ResourcesManager.h:181
ALCHEMY_PRODUCT
@ ALCHEMY_PRODUCT
Definition: ResourcesManager.h:72
AssetWrapperManager::myWrappedAssets
QHash< A *, W * > myWrappedAssets
Definition: ResourcesManager.h:63
ResourcesManager::generalMessageModified
void generalMessageModified(GeneralMessage *message)
Definition: ResourcesManager.cpp:256
ArtifactWrapper.h
ResourcesManager::assetDefined
virtual void assetDefined(const Face *asset, const std::string &filename) override
Definition: ResourcesManager.h:106
ResourcesManager::myAnimations
ModifiedAssetsManager< Animations > myAnimations
Definition: ResourcesManager.h:177
RANDOM_MAP_FINAL_EXIT
@ RANDOM_MAP_FINAL_EXIT
Definition: ResourcesManager.h:71
ResourcesManager::myWrappedTreasures
AssetWrapperManager< treasure, TreasureWrapper > myWrappedTreasures
Definition: ResourcesManager.h:183
ResourcesManager::myArchetypes
ModifiedAssetsManager< archetype > myArchetypes
Definition: ResourcesManager.h:171
ResourcesManager::myWrappedRecipes
AssetWrapperManager< recipe, RecipeWrapper > myWrappedRecipes
Definition: ResourcesManager.h:192
ResourcesManager::myWrappedObjects
AssetWrapperManager< object, ObjectWrapper > myWrappedObjects
Definition: ResourcesManager.h:179
ResourcesManager::saveTreasures
void saveTreasures()
Definition: ResourcesManager.cpp:233
ResourcesManager::myTreasures
ModifiedAssetsManager< treasurelist > myTreasures
Definition: ResourcesManager.h:173
CREMapInformationManager
Definition: CREMapInformationManager.h:27
ResourcesManager::originOfQuest
std::string originOfQuest(const quest_definition *quest) const
Definition: ResourcesManager.h:114
ResourcesManager::hasPendingChanges
bool hasPendingChanges() const
Definition: ResourcesManager.h:124
ResourcesManager::assetDefined
virtual void assetDefined(const treasurelist *asset, const std::string &filename) override
Definition: ResourcesManager.h:103
TreasureWrapper.h
OTHER_ARCH
@ OTHER_ARCH
Definition: ResourcesManager.h:67
ResourcesManager::~ResourcesManager
virtual ~ResourcesManager()
Definition: ResourcesManager.cpp:49
ResourcesManager::wrap
AssetWrapper * wrap(face_sets *fs, AssetWrapper *parent)
Definition: ResourcesManager.h:141
ResourcesManager::wrap
AssetWrapper * wrap(Animations *anim, AssetWrapper *parent)
Definition: ResourcesManager.h:137
ResourcesManager::wrap
AssetWrapper * wrap(quest_definition *quest, AssetWrapper *parent)
Definition: ResourcesManager.h:143
ResourcesManager::myWrappedQuests
AssetWrapperManager< quest_definition, QuestWrapper > myWrappedQuests
Definition: ResourcesManager.h:187