Built up instances and default assets.
This commit is contained in:
@@ -18,6 +18,8 @@ impl<S: Asset> DefaultAsset<S> {
|
|||||||
|
|
||||||
pub trait Class {
|
pub trait Class {
|
||||||
fn new(entity: &mut EntityWorldMut) -> AnyInstance;
|
fn new(entity: &mut EntityWorldMut) -> AnyInstance;
|
||||||
|
fn load(entity: &mut EntityWorldMut) -> AnyInstance { Self::new(entity) }
|
||||||
|
fn reload(entity: &mut EntityWorldMut) {}
|
||||||
fn add_fields<T, F: LuaUserDataFields<T>>(_fields: &mut F) {}
|
fn add_fields<T, F: LuaUserDataFields<T>>(_fields: &mut F) {}
|
||||||
fn add_methods<T, F: LuaUserDataMethods<T>>(_methods: &mut F) {}
|
fn add_methods<T, F: LuaUserDataMethods<T>>(_methods: &mut F) {}
|
||||||
fn class_name() -> &'static str {"Instance"}
|
fn class_name() -> &'static str {"Instance"}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ use std::ops::Deref;
|
|||||||
use bevy::asset::AsyncReadExt;
|
use bevy::asset::AsyncReadExt;
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use bevy::asset::{io::Reader, AssetLoader, LoadContext};
|
use bevy::asset::{io::Reader, AssetLoader, LoadContext};
|
||||||
|
use bevy::ecs::system::SystemId;
|
||||||
|
use mlua::Lua;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
use crate::duck::instance::*;
|
use crate::duck::instance::*;
|
||||||
|
|
||||||
@@ -43,9 +45,23 @@ impl Class for Script {
|
|||||||
fn new(entity: &mut EntityWorldMut) -> AnyInstance {
|
fn new(entity: &mut EntityWorldMut) -> AnyInstance {
|
||||||
let handle = DefaultAsset::<ScriptAsset>::clone(entity.world());
|
let handle = DefaultAsset::<ScriptAsset>::clone(entity.world());
|
||||||
entity.entry().or_insert(Script(handle));
|
entity.entry().or_insert(Script(handle));
|
||||||
|
let world = entity.world();
|
||||||
|
Self::run(entity);
|
||||||
AnyInstance::Script(Instance::new(entity))
|
AnyInstance::Script(Instance::new(entity))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl Script {
|
||||||
|
fn run(entity: &mut EntityWorldMut) {
|
||||||
|
let lua = &entity.world().get_resource::<DefaultScriptContext>().unwrap().0;
|
||||||
|
let script_assets = entity.get_resource::<Assets<ScriptAsset>>().unwrap();
|
||||||
|
let script_asset_handle = &entity.get::<Script>().unwrap().0;
|
||||||
|
let script = script_assets.get(script_asset_handle).unwrap();
|
||||||
|
lua.load(script.source.clone()).exec().unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Resource)]
|
||||||
|
struct DefaultScriptContext(Lua);
|
||||||
|
|
||||||
pub fn startup(
|
pub fn startup(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
@@ -54,6 +70,7 @@ pub fn startup(
|
|||||||
DefaultAsset::new(&mut commands,script_assets.add(ScriptAsset {
|
DefaultAsset::new(&mut commands,script_assets.add(ScriptAsset {
|
||||||
source: "print(\"Hello world!\")".into()
|
source: "print(\"Hello world!\")".into()
|
||||||
}));
|
}));
|
||||||
|
commands.insert_resource(DefaultScriptContext(Lua::new()));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn setup(app: &mut App) {
|
pub fn setup(app: &mut App) {
|
||||||
|
|||||||
Reference in New Issue
Block a user