mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-08 17:57:02 +08:00
- Extract `ModelID` and `Model` struct to new `model.hpp` - Replace `std::unordered_map` with `tbb::concurrent_hash_map` for thread safety - Add `get_model(ModelID)`, `get_model_id`, `get_model_name` methods - Parse model names in `namespace:name` format to construct asset paths - Update `load_model` to accept `string_view` and use ID-based management
33 lines
1.1 KiB
C++
33 lines
1.1 KiB
C++
#pragma once
|
|
#include "Cubed/gameplay/model.hpp"
|
|
#include "Cubed/render/model_node.hpp"
|
|
#include "Cubed/tools/model_loader.hpp"
|
|
|
|
#include <tbb/concurrent_hash_map.h>
|
|
namespace Cubed {
|
|
class ModelManager {
|
|
public:
|
|
ModelManager();
|
|
ModelManager(const ModelManager&) = delete;
|
|
ModelManager(ModelManager&&) = delete;
|
|
ModelManager& operator=(const ModelManager&) = delete;
|
|
ModelManager& operator=(ModelManager&&) = delete;
|
|
~ModelManager();
|
|
const ModelNode& get_model(const std::string& model_name);
|
|
const ModelNode& get_model(ModelID id);
|
|
ModelID get_model_id(const std::string& name);
|
|
const std::string& get_model_name(ModelID id);
|
|
void init();
|
|
|
|
private:
|
|
ModelLoader m_loader;
|
|
ModelID m_next = 0;
|
|
using ModelMap = tbb::concurrent_hash_map<ModelID, ModelNode>;
|
|
using IDMap = tbb::concurrent_hash_map<std::string, ModelID>;
|
|
using NameMap = tbb::concurrent_hash_map<ModelID, std::string>;
|
|
ModelMap m_models;
|
|
IDMap m_id_map;
|
|
NameMap m_name_map;
|
|
const ModelNode& load_model(std::string_view model_name);
|
|
};
|
|
} // namespace Cubed
|