Built up instances and default assets.

This commit is contained in:
2026-01-30 20:33:15 +00:00
parent 326c5a09f6
commit ae91008c59
2 changed files with 19 additions and 0 deletions

View File

@@ -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"}

View File

@@ -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) {