#abstraction-layer #applications #ecs #building #logger #legion #penguin

penguin-application

基于legion ECS构建应用程序的应用程序构建器和抽象层

2个版本

0.1.1 2021年12月23日
0.1.0 2021年12月22日

#802 in 调试

MIT 许可证

21KB
466

企鹅应用

企鹅应用是一个应用程序构建器和抽象层,用于在 winitlegion ecsfern logger 上构建循环应用程序。它还向legion添加了一个类似于 bevy 的插件实现。

该软件包还包括一个可选功能,添加了时间资源插件,可以轻松访问deltatime。

依赖关系

Cargo.toml

[dependencies]
penguin-application = { version = "0.1" }
penguin-config = { version = "0.1" }

配置

创建一个类似下面的 app-config.json 文件,并将其放入项目根目录。可用的日志级别为 ["error", "warning", "info", "debug", "trace"],按重要性递减。

app-config.json

{
  "logger_config": {
    "output_path": "logs/output.log",
    "debug_message_severity": "debug"
  },
  "window_config": {
    "width": 640,
    "height": 400
  }
}

用法

日志记录

日志消息使用标准的 log 函数调用生成,例如 log::error!("message")

应用程序

use penguin_config::PenguinConfig;
use penguin_app::{App, config::AppConfig};

fn main() {
    App::builder(AppConfig::read_config())
        .add_plugin(penguin_app::time_plugin::TimePlugin)
        .run()
        .unwrap();
}

插件

use penguin_app::ecs::*;
use penguin_app::time_plugin::Time;


pub struct MeasureTimePlugin;

impl Plugin for MeasureTimePlugin {
    fn startup(&mut self, resources: &mut Resources) -> Vec<Step> {
        resources.insert(PassedTimeResource::default());
        vec![]
    }

    fn run() -> Vec<Step> {
        Schedule::builder()
            .add_system(measure_time_system())
            .build()
            .into_vec()
    }

    fn shutdown() -> Vec<Step> {
        vec![] 
    }
}


#[derive(Default)]
struct PassedTimeResource(f32);

#[system]
fn measure_time(#[resource] passed_time: &mut PassedTimeResource, #[resource] time: &Time) {
    passed_time.0 += time.delta();
    log::info!("Time passed: {}", passed_time.0);
}

依赖关系

~10–21MB
~297K SLoC