aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-10-31 18:40:45 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-10-31 18:40:45 +0100
commit35ef3ba91ce9e00466508f2388f4c1dd2321b505 (patch)
treef51fa33fec8ecee4a77d0d37d3d440968d473814
parent314354fda83f7f0e4ef11b13322e84997b4ccee0 (diff)
minor script system fixes
-rw-r--r--src/crepe/ScriptSystem.cpp1
-rw-r--r--src/crepe/api/Transform.cpp2
-rw-r--r--src/crepe/api/Transform.h2
-rw-r--r--src/example/script.cpp31
4 files changed, 24 insertions, 12 deletions
diff --git a/src/crepe/ScriptSystem.cpp b/src/crepe/ScriptSystem.cpp
index d00d474..171b490 100644
--- a/src/crepe/ScriptSystem.cpp
+++ b/src/crepe/ScriptSystem.cpp
@@ -37,6 +37,7 @@ forward_list<Script *> ScriptSystem::get_scripts() {
for (auto behavior_script_ref : behavior_scripts) {
BehaviorScript & behavior_script = behavior_script_ref.get();
+ if (!behavior_script.active) continue;
Script * script = behavior_script.script.get();
if (script == nullptr) continue;
scripts.push_front(script);
diff --git a/src/crepe/api/Transform.cpp b/src/crepe/api/Transform.cpp
index 626cd67..3b218bc 100644
--- a/src/crepe/api/Transform.cpp
+++ b/src/crepe/api/Transform.cpp
@@ -8,7 +8,7 @@
using namespace crepe::api;
-Transform::Transform(uint32_t game_id, Point & point, double rot, double scale)
+Transform::Transform(uint32_t game_id, const Point & point, double rot, double scale)
: Component(game_id), position(point), rotation(rot), scale(scale) {
dbg_trace();
}
diff --git a/src/crepe/api/Transform.h b/src/crepe/api/Transform.h
index c69ec61..c451c16 100644
--- a/src/crepe/api/Transform.h
+++ b/src/crepe/api/Transform.h
@@ -14,7 +14,7 @@ class Transform : public Component {
// works similar (or the same) as those found in GLSL?
public:
- Transform(uint32_t id, Point &, double, double);
+ Transform(uint32_t id, const Point &, double, double);
~Transform();
//! Translation (shift)
Point position;
diff --git a/src/example/script.cpp b/src/example/script.cpp
index 43f1c22..cda9591 100644
--- a/src/example/script.cpp
+++ b/src/example/script.cpp
@@ -17,27 +17,38 @@ using namespace crepe;
using namespace crepe::api;
using namespace std;
+// Unrelated stuff that is not part of this POC
+int _ = [] () {
+ // Show dbg_trace() output
+ auto & cfg = api::Config::get_instance();
+ cfg.log.level = util::LogLevel::TRACE;
+
+ return 0; // satisfy compiler
+}();
+
+
+
+// User-defined script:
class MyScript : public Script {
void update() {
+ // Retrieve component from the same GameObject this script is on
Transform & test = get_component<Transform>();
dbg_logf("Transform(%.2f, %.2f)", test.position.x, test.position.y);
}
};
int main() {
- auto & cfg = api::Config::get_instance();
- cfg.log.level = util::LogLevel::TRACE;
-
+ // Create game object with Transform and BehaviorScript components
auto obj = GameObject(0, "name", "tag", 0);
- Point point = {
- .x = 1.2,
- .y = 3.4,
- };
- obj.add_component<Transform>(point, 0, 0);
+ obj.add_component<Transform>(Point { .x = 1.2, .y = 3.4, }, 0, 0);
obj.add_component<BehaviorScript>().set_script<MyScript>();
+ // Get ScriptSystem singleton instance (this would normally be done from the
+ // game loop)
auto & sys = ScriptSystem::get_instance();
- sys.update(); // -> MyScript::update
+ // Update all scripts. This should result in MyScript::update being called
+ sys.update();
- return 0;
+ return EXIT_SUCCESS;
}
+