aboutsummaryrefslogtreecommitdiff
path: root/src/lua_api.rs
diff options
context:
space:
mode:
authorLibravatar Silas Bartha <silas@exvacuum.dev>2024-10-11 16:03:43 -0400
committerLibravatar GitHub <noreply@github.com>2024-10-11 16:03:43 -0400
commit535436e2e9164f9880e507d7057a8cdbf261608e (patch)
treedb370db8e0caea99a9e6e3c501c7ea7e3b6dd708 /src/lua_api.rs
parentebc3ccfea4027a3eb0c80f6a3d64b6425d32d1ef (diff)
parent16c1574e400d73198713336e18975ff37ab78290 (diff)
Merge pull request #1 from exvacuum/navigation
Navigation
Diffstat (limited to 'src/lua_api.rs')
-rw-r--r--src/lua_api.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/lua_api.rs b/src/lua_api.rs
new file mode 100644
index 0000000..cda2486
--- /dev/null
+++ b/src/lua_api.rs
@@ -0,0 +1,53 @@
+use bevy::prelude::*;
+use bevy_scriptum::{runtimes::lua::{BevyEntity, BevyVec3, LuaRuntime, LuaScriptData}, ScriptingRuntimeBuilder, Runtime};
+
+pub fn trigger_update(
+ mut scripted_entities: Query<(Entity, &mut LuaScriptData)>,
+ scripting_runtime: Res<LuaRuntime>,
+ time: Res<Time>,
+) {
+ let delta = time.delta_seconds();
+ for (entity, mut script_data) in scripted_entities.iter_mut() {
+ if let Err(e) = scripting_runtime.call_fn("on_update", &mut script_data, entity, (delta, )) {
+ error!("Encountered lua scripting error: {:?}", e);
+ }
+ }
+}
+
+// ACTUAL API STUFF BELOW THIS POINT {{{
+
+macro_rules! register_fns {
+ ($runtime:expr, $($function:expr),+) => {
+ {
+ $runtime$(.add_function(stringify!($function).to_string(), $function))+
+ }
+ };
+}
+
+pub fn register(runtime: ScriptingRuntimeBuilder<LuaRuntime>) -> ScriptingRuntimeBuilder<LuaRuntime> {
+ register_fns!(runtime, translate, rotate)
+}
+
+fn translate(
+ In((BevyEntity(entity), BevyVec3(translation))): In<(BevyEntity, BevyVec3)>,
+ mut transform_query: Query<&mut Transform>,
+) {
+ if let Ok(mut transform) = transform_query.get_mut(entity) {
+ transform.translation += translation;
+ }
+}
+
+fn rotate(
+ In((BevyEntity(entity), BevyVec3(axis), angle)): In<(BevyEntity, BevyVec3, f32)>,
+ mut transform_query: Query<&mut Transform>,
+) {
+ if let Ok(mut transform) = transform_query.get_mut(entity) {
+ if let Ok(direction) = Dir3::new(axis) {
+ transform.rotate_axis(direction, angle);
+ } else {
+ warn!("Provided axis was not a valid direction!");
+ }
+ }
+}
+
+// }}}