1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use crate::on_asset_change;
use bevy::prelude::*;
use bevy_mod_scripting::{asset::ScriptAsset, core::event::ScriptCallbackEvent};
use std::borrow::Cow;
#[derive(Component, Reflect)]
pub struct N9Var(Cow<'static, str>);
pub(crate) fn plugin(app: &mut App) {
app
//.register_type::<N9Var>()
// .add_systems(PostStartup, set_vars)
.add_systems(PreUpdate, set_vars.run_if(on_asset_change::<ScriptAsset>()));
// .add_systems(PreUpdate, set_vars.run_if(on_event::<OnScriptLoaded>));
}
impl N9Var {
pub fn new(name: impl Into<Cow<'static, str>>) -> Self {
N9Var(name.into())
}
}
/// Sends initialization event
fn set_vars(_writer: MessageWriter<ScriptCallbackEvent>, query: Query<(Entity, &N9Var)>) {
for (_id, _var) in &query {
warn!("Need to impl set_vars().");
// todo!();
// writer.send(ScriptCallbackEvent::new_for_all(
// call::SetGlobal,
// vec![ScriptValue::String(var.0.clone()),
// // ScriptValue::Reference(Arc::new(Mutex::new(N9Entity { entity: id,
// // drop: DropPolicy::Nothing }))).into()
// ScriptValue::Reference(LuaValue::UserData(AnyUserData::wrap(N9Entity { entity: id,
// drop: DropPolicy::Nothing })))
// ]));
// events.send(
// LuaEvent {
// hook_name: "_set_global".to_owned(),
// args: {
// let mut args = Variadic::new();
// args.push(N9Arg::String(var.0.to_string()));
// // args.push(N9Arg::Entity(id));
// args.push(N9Arg::N9Entity(Arc::new(N9Entity {
// entity: id,
// drop: DropPolicy::Nothing,
// })));
// args
// },
// recipients: Recipients::All,
// },
// 0,
// );
}
}