1 个不稳定版本

0.0.0 2022年1月25日

#98 in #语义

MIT/Apache

36KB
879

Keybee

Keybee是一个语义输入绑定库。 它目前是一个从更大的游戏项目中提取出来的早期概念验证,经过修改,测试不充分。

Keybee围绕简单的核心原语构建

  • Session 存储应用的所有状态
  • Action 定义玩家可以执行的操作,例如跳跃或移动
  • ActionSet 将相关操作组合在一起
  • Bindings 将输入分配给操作

特性

  • winit: 启用对winit事件的支撑
  • gilrs: 启用对gil-rs事件的支撑

入门指南

use keybee::{Session, ButtonAction, Clamped, Axis2dAction};

let session = keybee::Session::new();

let gameplay = session.create_action_set("gameplay");
let jump = gameplay.create_action::<ButtonAction>("jump");
let movement = gameplay.create_action::<Clamped<Axis2dAction>>("movement");

// Keybee will have support for deserializing bindings from files, but for now,
// this isn't quite done.
session.use_bindings(todo!("load bindings from somewhere"));

loop {
    // With the `winit` feature enabled:
    // session.handle_winit_event::<()>(todo!("pass winit events"));

    // With the `gilrs` feature enabled:
    // session.handle_gilrs_event(todo!("pass gil-rs events"));

    if jump.get() {
        println!("Player jumped!");
    }

    let translate = movement.get();
    if translate != (0.0, 0.0) {
        println!("Player movement vector: {:?}", translate);
    }

    // At the end of every game tick, run `end_update` to reset relative axis
    // movements and button presses.
    session.end_update();
}

未来改进

  • 支持多玩家
  • 其他后端:SDL,其他

许可证

根据您选择的以下任一项进行许可

任选其一。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可证的定义,应按上述方式进行双重许可,没有任何附加条款或条件。

依赖

~1–4MB
~84K SLoC