use std::ptr::NonNull; use lyra_ecs::{World, Entity}; #[derive(Clone)] pub struct ScriptEntity(pub Entity); impl std::ops::Deref for ScriptEntity { type Target = Entity; fn deref(&self) -> &Self::Target { &self.0 } } #[derive(Clone)] pub struct ScriptWorldPtr { pub inner: NonNull, } impl ScriptWorldPtr { /// Creates a world pointer from a world borrow. pub fn from_ref(world: &World) -> Self { Self { inner: NonNull::from(world), } } /// Returns a borrow to the world from the ptr. pub fn as_ref(&self) -> &World { unsafe { self.inner.as_ref() } } /// Returns a mutable borrow to the world from the ptr. pub fn as_mut(&mut self) -> &mut World { unsafe { self.inner.as_mut() } } } impl std::ops::Deref for ScriptWorldPtr { type Target = NonNull; fn deref(&self) -> &Self::Target { &self.inner } }