Start implementing resource changes

This commit is contained in:
hodasemi 2025-04-05 09:22:26 +02:00
parent fa35adbcc7
commit d8bebf69df
8 changed files with 20 additions and 11 deletions

View file

@ -6,7 +6,7 @@ use super::vulkancore::VulkanCore;
#[cfg(feature = "sound")]
use audio::SoundHandler;
use ecs::World;
use ecs::{Resource, World, resources::Resource as ResourceTrait};
use crate::prelude::*;
use anyhow::Result;
@ -22,6 +22,7 @@ use std::rc::Rc;
use std::sync::{Arc, Mutex, MutexGuard, RwLock, RwLockReadGuard, RwLockWriteGuard};
use std::time::{Duration, Instant};
#[derive(Resource)]
pub struct Context {
core: VulkanCore,
pub(crate) presentation: PresentationCore,
@ -59,7 +60,7 @@ impl Context {
pub fn next_frame<'a, C, F>(&mut self, world: &mut World, mut f: F) -> Result<bool>
where
C: Send + Sync + 'static,
C: ResourceTrait + Send + Sync + 'static,
F: FnMut(&mut World, &mut C, Event<'_>) -> Result<()> + Send + Sync + 'a,
{
let render_core = self.render_core.clone();

View file

@ -3,11 +3,13 @@ use crate::prelude::*;
use anyhow::Result;
use asset::*;
use assetpath::AssetPath;
use ecs::Resource;
use std::collections::HashMap;
use std::sync::{Arc, RwLock};
use std::thread;
#[derive(Resource)]
pub struct AssetManager {
gltf_directory: AssetPath,

View file

@ -6,6 +6,7 @@ use super::engine_settings::EngineSettings;
use anyhow::Result;
use assetpath::AssetPath;
use context::prelude::cgmath::vec3;
use ecs::{Resource, resources::Resource as ResourceTrait};
use crate::assets::asset_manager::AssetManager;
use crate::prelude::*;
@ -13,6 +14,7 @@ use crate::prelude::*;
use std::collections::HashMap;
use std::sync::Arc;
#[derive(Resource)]
pub struct GuiHandlerRenderer;
impl TScene for GuiHandlerRenderer {
@ -44,12 +46,13 @@ impl TScene for GuiHandlerRenderer {
}
}
#[derive(Resource)]
pub struct Engine {
pub(crate) resource_base_path: String,
}
impl Engine {
pub fn new<T: EventConsumer>(
pub fn new<T: ResourceTrait + EventConsumer>(
#[allow(unused)] mut create_info: EngineCreateInfo<'_>,
world: &mut WorldBuilder,
) -> Result<()> {
@ -248,7 +251,7 @@ impl Engine {
}
impl Engine {
fn main_system<T: EventConsumer>(world: &mut World) -> Result<bool> {
fn main_system<T: ResourceTrait + EventConsumer>(world: &mut World) -> Result<bool> {
let gui_handler = world.resources.get_mut_unchecked::<GuiHandler>();
let input_map = world.resources.get_unchecked::<InputMap>();
let context = world.resources.get_unchecked::<Context>();

View file

@ -1,5 +1,6 @@
use crate::prelude::*;
use anyhow::Result;
use ecs::Resource;
use std::collections::HashMap;
#[derive(Debug)]
@ -31,6 +32,7 @@ pub trait EventConsumer: Send + Sync + 'static {
fn event(&mut self, world: &mut World, event: EngineEvent<'_>) -> Result<()>;
}
#[derive(Resource)]
pub struct InputMap {
pub direction_mapping: HashMap<Keycode, GuiDirection>,
}

View file

@ -1,5 +1,6 @@
use anyhow::{Result, bail};
use assetpath::AssetPath;
use ecs::Resource;
use crate::prelude::*;
@ -71,7 +72,7 @@ pub struct AssetDirectories {
pub tile_file_directory: AssetPath,
}
#[derive(Debug)]
#[derive(Debug, Resource)]
pub struct EngineSettings {
current_controller_type: RwLock<Option<ControllerType>>,

View file

@ -67,10 +67,9 @@ impl Location {
Ok(entity.get_component_mut::<Self>()?)
}
pub fn setup(mut multi_mut: MultiMut<'_>) -> Result<()> {
let location = multi_mut.get::<Location>()?;
let draw = multi_mut.get::<Draw>().ok();
let audio = multi_mut.get::<Audio>().ok();
pub fn setup(entity: &mut EntityObject) -> Result<()> {
let (location, draw, audio): (&mut Location, &mut Draw, &mut Audio) =
entity.get_components_mut()?;
if let Some(draw) = draw {
location.set_draw_callback(draw);

View file

@ -23,6 +23,7 @@ use std::time::Instant;
use std::sync::Arc;
use std::time::Duration;
#[derive(Resource)]
pub struct Scene {
screen_width: f32,
screen_height: f32,

View file

@ -1,4 +1,4 @@
use ecs::World;
use ecs::{World, resources::Resource};
use ui::prelude::*;
use vulkan_rs::prelude::*;
@ -11,7 +11,7 @@ use std::sync::Arc;
use crate::prelude::*;
pub trait TScene: Send + Sync + 'static {
pub trait TScene: Resource + Send + Sync + 'static {
fn process(
&mut self,
buffer_recorder: &mut CommandBufferRecorder<'_>,