DYTSrouce/src/entities/EntitiesManager.h

55 lines
1.4 KiB
C
Raw Normal View History

2025-01-04 04:12:51 +00:00
#pragma once
#include <unordered_map>
#include <QObject>
#include "app/Singleton.h"
#include "xml/tinyxml2.h"
class Entity;
2025-11-01 13:30:06 +00:00
class WorkSpace;
2025-01-04 04:12:51 +00:00
class EntitiesManager : public QObject, public Singleton<EntitiesManager> {
Q_OBJECT
public:
explicit EntitiesManager(QObject* parent = nullptr);
~EntitiesManager();
void OnDestory();
2025-11-01 13:30:06 +00:00
// Initialize entity factory
void Initialize();
2025-01-04 04:12:51 +00:00
bool Contains(const QString& name) const;
bool Parse(const tinyxml2::XMLElement* element, class WorkSpace* workspce);
2025-11-01 13:30:06 +00:00
// Legacy methods (for backward compatibility)
2025-01-04 04:12:51 +00:00
Entity* Create(const QString& name);
Entity* CreateMesh(const QString& mesh);
2025-11-01 13:30:06 +00:00
// New factory methods
Entity* CreateEntity(const QString& type, WorkSpace* workspace = nullptr);
2025-11-01 16:02:20 +00:00
Entity* CreateEntityWithComponents(const QString& type, const QString& mesh, bool useLabel, WorkSpace* workspace = nullptr);
2025-11-01 13:30:06 +00:00
// Get supported entity types
QStringList GetSupportedEntityTypes() const;
QString GetEntityDisplayName(const QString& type) const;
QString GetEntityDescription(const QString& type) const;
2025-01-04 04:12:51 +00:00
bool DeleteEntity(Entity* entity);
Entity* GetEntity(const QString& uuid);
Entity* Create(const tinyxml2::XMLElement* element, Entity* parent, WorkSpace* workspce);
protected:
void AddEntity(Entity* entity);
void RemoveEntity(Entity* entity);
private:
std::unordered_map<QString, Entity*> entities_;
2025-11-01 13:30:06 +00:00
bool initialized_{false};
2025-01-04 04:12:51 +00:00
};