Add Director, director::CommandList, hk::Goal and fixups

* Simulator and Director are no longer singletons.
This commit is contained in:
2025-01-03 21:22:03 -04:00
parent bf2c73ed29
commit 6beda55971
6 changed files with 108 additions and 27 deletions
+72
View File
@@ -0,0 +1,72 @@
#ifndef DIRECTOR_COMMANDLIST_H
#define DIRECTOR_COMMANDLIST_H
#include <vector>
#include <cstdint>
#include <mentalEntity.h>
namespace director {
/**
* @brief Base class for all commands, storing a reference to a mental entity ID.
*
* Derived classes can extend this to include additional command-specific
* data and behavior.
*/
class Command
{
public:
Command(const MentalEntity::Id menty) : menty(menty) {}
public:
const MentalEntity::Id menty;
};
class CommandList
{
public:
CommandList() = default;
/**
* @brief Used by Director to point to the currently executing command.
*
* director::Director maintains an internal cursor. As it executes commands
* from its internal command list, it advances the cursor to the current
* command before executing it.
*/
class Cursor
{
public:
Cursor(CommandList& commandList)
: commandList(commandList), iter(commandList.commands.begin())
{}
void reset() { iter = commandList.commands.begin(); }
bool hasNext() const { return iter != commandList.commands.end(); }
Cursor next() { return Cursor(commandList, ++iter); }
private:
Cursor(
CommandList& commandList,
std::vector<Command>::iterator iter)
: commandList(commandList), iter(iter)
{}
public:
CommandList& commandList;
std::vector<Command>::iterator iter;
};
Cursor getCursor() { return Cursor(*this); }
void addCommand(const Command& command)
{
commands.push_back(command);
}
public:
std::vector<Command> commands;
};
} // namespace director
#endif // DIRECTOR_COMMANDLIST_H
+14
View File
@@ -0,0 +1,14 @@
#ifndef DIRECTOR_H
#define DIRECTOR_H
namespace director {
class Director {
public:
Director() = default;
~Director() = default;
};
} // namespace director
#endif // DIRECTOR_H
+10 -6
View File
@@ -1,13 +1,17 @@
#ifndef _GOAL_H
#define _GOAL_H
namespace thought {
#include <simulator/scene.h>
enum class Goal
{
DRIFT,
ASSOCIATE_CAUSAL_QUALE_WITH_INTRINSIC_MOTIVATORS,
RESPOND_TO_CAUSAL_QUALE
namespace hk {
class Goal {
public:
Goal(const simulator::Scene& scene) : scene(scene) {}
~Goal() = default;
private:
simulator::Scene scene;
};
}
+5 -5
View File
@@ -5,7 +5,7 @@
#include <cstdint>
#include <mentalEntity.h>
namespace scene {
namespace simulator {
/**
* @brief Base class for all commands, storing a reference to a mental entity ID.
@@ -30,9 +30,9 @@ public:
/**
* @brief Used by Scene to point to the currently executing command.
*
* scene::Scene maintains an internal cursor. As it executes commands from
* its internal command list, it advances the cursor to the current command
* before executing it.
* simulator::Scene maintains an internal cursor. As it executes commands
* from its internal command list, it advances the cursor to the current
* command before executing it.
*/
class Cursor
{
@@ -67,6 +67,6 @@ public:
std::vector<Command> commands;
};
} // namespace scene
} // namespace simulator
#endif // SIMULATOR_COMMANDLIST_H
+1 -1
View File
@@ -6,7 +6,7 @@
#include <mentalEntity.h>
#include <simulator/commandList.h>
namespace scene {
namespace simulator {
class Scene
{
+6 -15
View File
@@ -7,24 +7,15 @@ namespace simulator {
class Simulator {
public:
Simulator(const Simulator&) = delete;
void operator=(const Simulator&) = delete;
static Simulator& instance()
{
static Simulator instance;
return instance;
}
void initialize();
void loadScene(scene::Scene::Id sceneId, scene::Scene &scene);
private:
Simulator() = default;
~Simulator() = default;
scene::Scene::Id sceneId;
scene::Scene scene;
void initialize();
void loadScene(Scene::Id sceneId, Scene &scene);
private:
Scene::Id sceneId;
Scene scene;
};
}