Files
simian/include/ModelManager.h
T
nick 28328cbc0d
CI / build-and-test (push) Successful in 2m5s
Sync Docs to Gitea Wiki / Sync docs to Gitea wiki (push) Failing after 23s
feat: editor improvements
2026-03-08 20:25:11 +13:00

65 lines
1.5 KiB
C++

#pragma once
#include "raylib.h"
#include <unordered_map>
#include <string>
enum class ModelSourceType {
None,
Path,
Cube,
Sphere,
Plane
};
struct ModelSource {
ModelSourceType type = ModelSourceType::None;
std::string path;
Vector3 size{1.0f, 1.0f, 1.0f};
float radius = 0.5f;
int rings = 16;
int slices = 16;
};
class ModelManager
{
public:
ModelManager();
~ModelManager();
// Load a model from a file
// Returns a unique ID for the model, or 0 on failure
unsigned int Load(const std::string& path);
// Load a model from a mesh
// Returns a unique ID for the model, or 0 on failure
unsigned int LoadFromMesh(Mesh mesh);
// Load a model from a generated cube mesh
unsigned int LoadCube(float width, float height, float length);
// Load a model from a generated sphere mesh
unsigned int LoadSphere(float radius, int rings, int slices);
// Load a model from a generated plane mesh
unsigned int LoadPlane(float width, float length, int resX, int resZ);
// Unload a model by ID
void Unload(unsigned int id);
// Get a model by ID (returns nullptr if not found)
Model* Get(unsigned int id);
// Get source metadata for a model if available
const ModelSource* GetSource(unsigned int id) const;
// Unload all models
void UnloadAll();
private:
std::unordered_map<unsigned int, Model> models;
std::unordered_map<unsigned int, ModelSource> modelSources;
unsigned int nextId;
bool unloaded;
};