initial commit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
#ifndef HYDRAACTORMANAGER
|
||||
#define HYDRAACTORMANAGER
|
||||
#include "../engine/HydraObject.h"
|
||||
|
||||
#include "../task/HydraTask.h"
|
||||
#include "HydraActor.h"
|
||||
#include <GLMIncludes.h>
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
#include <deque>
|
||||
#include <queue>
|
||||
|
||||
|
||||
// #include <assimp/Importer.hpp> // C++ importer interface
|
||||
// #include <assimp/scene.h> // Output data structure
|
||||
// #include <assimp/postprocess.h> // Post processing flags
|
||||
|
||||
|
||||
class CLASS_DEFINE HydraActorManager : public HydraObject
|
||||
{
|
||||
private:
|
||||
std::mutex m_mutex;
|
||||
std::vector<HydraActor*> m_actors;
|
||||
std::deque<HydraID> m_available_actor_ids;
|
||||
std::deque<HydraID> m_actors_waiting_for_init;
|
||||
std::deque<HydraID> m_actors_waiting_for_delete;
|
||||
size_t m_max_actors;
|
||||
HydraID _SaveActor(HydraActor* actor);
|
||||
void _RemoveActorFromWaiting(HydraID actorID);
|
||||
void _RemoveActorFromTickFixed(HydraID actorID);
|
||||
void _SetActorDeleted(HydraID actorID);
|
||||
public:
|
||||
void Initialise(size_t max_actors);
|
||||
template<class T> HydraID CreateActor();
|
||||
HydraID LoadActor(std::string filename);
|
||||
|
||||
void DeleteActor(HydraID actorID);
|
||||
HydraActor* const GetActor(HydraID actorID);
|
||||
std::vector<HydraID>& GetChildren(HydraID actor_id);
|
||||
|
||||
void TickActors(float delta_t);
|
||||
void InitialiseActor(HydraID actorID);
|
||||
|
||||
void Shutdown();
|
||||
|
||||
void RotateActor(HydraID actorID, float euler_x, float euler_y, float euler_z);
|
||||
|
||||
void SetPosition(HydraID actorID, glm::dvec3 position);
|
||||
void SetOrientation(HydraID actorID, float x, float y, float z);
|
||||
void SetScale(HydraID actor_id, glm::dvec3 scaling);
|
||||
|
||||
void TranslateActor(HydraID actorID, glm::dvec3 translation);
|
||||
|
||||
void SetRelationship(HydraID parent_id, HydraID child_id);
|
||||
void AddComponentType(HydraID actorID, uint32_t component_type);
|
||||
bool HasComponentType(HydraID actorID, uint32_t component_type);
|
||||
void RemoveComponentType(HydraID actorID, uint32_t component_type);
|
||||
|
||||
HydraID GetParent(HydraID actor_id);
|
||||
HydraID GetRoot(HydraID actor_id);
|
||||
|
||||
glm::mat4 GetActorPose(HydraID actorID);
|
||||
glm::dvec3 GetActorPosition(HydraID actorID);
|
||||
glm::vec3 GetActorOrientation(HydraID actorID);
|
||||
glm::vec3 GetActorVelocity(HydraID actorID);
|
||||
|
||||
};
|
||||
|
||||
template<class T>
|
||||
inline HydraID HydraActorManager::CreateActor()
|
||||
{
|
||||
T* actorType = new T();
|
||||
HydraActor* actor = dynamic_cast<HydraActor*>(actorType);
|
||||
if (actor != nullptr)
|
||||
{
|
||||
HydraID actor_id = INVALID_HYDRA_ID;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
actor_id = _SaveActor(actor);
|
||||
}
|
||||
if(actor_id != INVALID_HYDRA_ID)
|
||||
{
|
||||
|
||||
actor->InitialiseComponents();
|
||||
}
|
||||
return actor_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
return INVALID_HYDRA_ID;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* HYDRAACTORMANAGER */
|
||||
Reference in New Issue
Block a user