From 326c5a09f6e2897aa81d4ce52b051fa2a5682493 Mon Sep 17 00:00:00 2001 From: christianlincoln Date: Fri, 30 Jan 2026 00:45:51 +0000 Subject: [PATCH] Built up instances and default assets. --- src/duck/instance.rs | 40 +++++++++++++++++++++++++--------------- src/duck/part.rs | 32 +++++++++++++++++++------------- src/duck/script.rs | 30 ++++++++++++++---------------- 3 files changed, 58 insertions(+), 44 deletions(-) diff --git a/src/duck/instance.rs b/src/duck/instance.rs index ffe39b3..447ecc5 100644 --- a/src/duck/instance.rs +++ b/src/duck/instance.rs @@ -1,16 +1,29 @@ +use std::marker::PhantomData; use bevy::prelude::*; use mlua::prelude::*; use crate::duck::part::*; use crate::duck::script::*; -pub trait Class { - fn new(entity: EntityWorldMut) -> AnyInstance; - fn add_fields>(_fields: &mut F) {} - fn add_methods>(_methods: &mut F) {} +#[derive(Component,Resource)] +pub struct DefaultAsset(Handle); +impl DefaultAsset { + pub fn clone(world: &World) -> Handle { + world.get_resource::>().unwrap().0.clone() + } + pub fn new(commands: &mut Commands, handle: Handle) { + commands.insert_resource(DefaultAsset(handle)); + } } -pub struct Instance(pub S); +pub trait Class { + fn new(entity: &mut EntityWorldMut) -> AnyInstance; + fn add_fields>(_fields: &mut F) {} + fn add_methods>(_methods: &mut F) {} + fn class_name() -> &'static str {"Instance"} +} + +pub struct Instance(Entity,PhantomData); impl LuaUserData for Instance { fn add_fields>(fields: &mut F) { @@ -25,8 +38,13 @@ impl Instance { fn new_entity(world: &mut World) -> Entity { let mut entity = world.spawn_empty(); entity.entry().or_insert(Name::new("Instance")); - entity.insert(AnyInstance {sub: S::new(entity)}); - return entity.id(); + let instance = S::new(&mut entity); + entity.entry().or_insert(instance); + entity.id() + } + + pub(crate) fn new(entity: &mut EntityWorldMut) -> Instance { + Instance(entity.id(),PhantomData) } } @@ -35,14 +53,6 @@ pub enum AnyInstance { Script(Instance