KHistory: KPlugin 可视化插件模块 / 自定义插件


【直播预告】eBPF 到底是可观测领域的神器 or 鸡肋?

KPlugin Module - 插件模块 / 自定义插件

背景: 为了增加可玩性 给KHistory开发一个插件模快KPlugin, 让更多的人能根据自己的使用环境和需求定制/开发按键可视化插件

KPlugin 是KHistory的插件模块, 为其提供基础的插件功能和插件的扩展能力

一、功能特性

  • 插件基本功能 - 用户可根据场景自由切换插件进行按键可视化(如: 按键/游戏手柄...)
  • Mini插件框架PluginBase - 提供标准接口和后台自动完成按键事件处理和布局(按键状态)更新功能
  • 插件自动注册功能 - 把插件放置kplugin/auto-register目录即可在编译期自动注册
  • 基础插件及插件扩展 - 已提供键盘和手柄基础插件及格斗游戏扩展插件, 用户无需了解C++/Imgui也可自己开发插件
    • 自定义按键布局
    • 重映射按键名
    • 按键高亮颜色自定义
    • 其他

二、使用说明

在KHistory的控制模块, 用户可以通过Next按钮或插件的下拉菜单中选择合适的插件, 如下图

三、插件示例

基础插件

Plugin Base - Keyboard - 基础键盘插件

Plugin Base - Gamepad - 基础手柄插件

扩展插件

Plugin Base - Keyboard Fighting Game - 键盘格斗游戏插件

Plugin Base - Gamepad - Fighting Game - 2468 - 手柄格斗游戏2468插件

 

四、插件开发/扩展

KPlugin的扩展和开发是极其容易的

通过PluginBase提供的标准&统一的接口和自动注册机制, 极大的简化了插件的开发

不需要 插件开发者 了解C++/imgui等知识, 只需具备程序的编译能力即可轻松开发一个自己的 按键可视化插件

基本流程

  • 1.在kplugin/auto-register目录创建YourPluginName.kplugin.hpp插件文件(或者直接复制HelloWorld.kplugin.hpp并重命名)

  • 2.继承插件基础接口 - PluginBase

  • 3.实现按键布局 - keyLayoutImpl

  • 4.自定义按键颜色(可选) - keyColorTableRemap

  • 5.自定义按键名(可选) - keyNameTableRemap

  • 6.xmake重新构建项目, 自动完成插件注册

流程/开发过程说明 - 基于插件模板 HelloWorld

 

1.创建插件文件

kplugin/auto-register目录创建以.kplugin.hpp后缀的插件文件(或者直接复制HelloWorld.kplugin.hpp并重命名). 文件名的格式如下:

YourPluginName.kplugin.hpp
||
 插件的名字插件标识

所以HelloWorld插件对应的文件名就是 HelloWorld.kplugin.hpp

注意: 这个插件名, 也是后面插件的class名, 他们需要保持一致

2.继承插件基础接口

继承PluginBase并通过_mPluginName对插件进行命名

实现keyLayoutImpl布局接口,这样就完成了一个最小插件的开发, 但它的布局里并不显示任何东西


#include "PluginBase.hpp"

namespace khistory {

class HelloWorld : public PluginBase {
public:
HelloWorld() {
// 通过_mPluginName对插件进行命名
_mPluginName += " - HelloWorld";
}
public: // 接口实现
virtual void keyLayoutImpl(float layoutWidth, float layoutHeight) {

}
};

} // namespace khistory end

3.实现按键布局

keyLayoutImpl 的layoutWidth, layoutHeight 参数表示可布局区域布局/画布的 宽和高, 示意图如下:

+---------------> layoutWidth / X
|
|Hello World!
|
V
layoutHeight / Y

我们可以根据这个信息, 去设计按键在可布局区域的位置 如下将显示一个空格键:

  • 宽为layoutWidth的一半
  • 高为 按键宽的 1/6
  • 绘制起始坐标为 (startPosX, startPosY) 即 (layoutWidth / 4, 0)
  • 按键中字体大小为系统字体的0.8倍

virtual void keyLayoutImpl(float layoutWidth, float layoutHeight) override {
float buttonWidth = layoutWidth / 2;
float buttonHeight = buttonWidth / 6;
float startPosX = layoutWidth / 4;
float startPosY = 0;

_drawKey(
KeyCode::KEYBOARD_SPACE,// keycode
startPosX, startPosY, // cursorPosX, cursorPosY
buttonWidth, buttonHeight,// key/button width, height
0.8 // font scale
);
}

_drawKey绘制按键 - 参数说明

  • keycode: 统一的按键码 参考 PluginBase::KeyCode
  • cursorPosX: 绘制的X坐标, -1表示使用默认值
  • cursorPosY: 绘制的Y坐标, -1表示使用默认值
  • width: 按键的宽, 0表示使用默认值
  • height: 按键的宽, 0表示使用默认值
  • fontScale: 字体的缩放倍数, 0表示使用默认值
void _drawKey(int keycode, float cursorPosX = -1, float cursorPosY = -1, float width = 0, float height = 0, float fontScale = 0)

4.自定义按键颜色(可选) - 实现keyColorTableRemap

这是个可选的功能, 如下就是就是给按键颜色表中空格键配置为红色

根据需求可在这个函数中对多个按键的颜色进行 配置/自定义

格式:_mkeyColorTable[KeyCode] = { R, G, B, T }; 其中 0.0f <= R/G/B/T <= 1.0f

virtual void keyColorTableRemap() override {
// reset keyboard space highlight colorR/红 G/绿B/蓝T/透明度
_mkeyColorTable[KeyCode::KEYBOARD_SPACE] = { 1.0f, 0.0f, 0.0f, 0.5f };
}

5.自定义按键名(可选) - 实现keyNameTableRemap

同上这也是个可选的功能, 如下是给空格键重新命名为Hello World!

格式:_mkeyNameTable[KeyCode] = "KeyCode::Key's KeyName"; 其中 0.0f << R/G/B/T << 1.0f

virtual void keyNameTableRemap() override {
_mkeyNameTable[KeyCode::KEYBOARD_SPACE] = "Hello World!";
}

6.xmake重新构建项目, 自动完成插件注册

需要有xmake环境

xmake
xmake r

五、贡献与更多有意思的插件

欢迎大家把有意思的插件晒到这个讨论中 - KPlugin - 有意思的插件讨论

六、相关链接

  • KHistory 项目主页
  • Github
  • DSVisual
  • DStruct

相關推薦

2023-03-22

性以及极低的使用和维护成本。 Apinto Dashboard 作为配套可视化控制台项目,相比于 Apinto Dashboard v1.x 版本,它提供了优秀的用户体验,更加友好的交互体验,更加简洁的配置流程,操作简单,上手难度极低,更好地帮助用户和企

2022-09-08

,插件开发者可以获得更优的体验。从插件定义,分发到可视化管理都全面提升。开发者除了可以使用 YAML 方式来定义插件以外,如果希望更灵活的组合插件包括的资源和更高级的参数化控制,开发者可以完全使用 CUE 来完成插

2022-10-21

bsp; ThingsPanel今天发布了0.4版本,实现了协议、设备、可视化三类插件体系,并包括专用于厂商设备的解析脚本,与规则引擎脚本,总共五类“拿来主义”的部分,使得物联网项目开发速度,预增10倍。 协议纷繁复杂怎么办

2023-01-15

/ 购物车 / 下单页 平台后台管理 丰富的功能插件 可视化模板编辑 / DIY 页面布局  更新内容 新增拼团模块数据表默认值 新增拼团模块默认24小时未成团的设为过期 新增批发价格传值刷选 新增用户提现到微信

2023-07-14

pc 端,移动端均支持自定义增加新页面,增加新页面 diy 可视化组件编辑页面,发布新的页面。 7. 优惠券新增领券页面,增加作废操作 ... ... ... PC 端预览 商家管理预览 自定义页面装修预览 演示体验 后台体验:&

2023-03-02

/ 购物车 / 下单页 平台后台管理 丰富的功能插件 可视化模板编辑 / DIY 页面布局  更新内容 新增API接口(获取库存预警商品列表) 新增采集商品模块支持采集本站商品(复制站内商品) 新增API接口(获取采

2023-03-02

模型训练完成后下发模型即可使用,十分灵活快捷。 可视化规则创建: 管理控制台中集成了可视化规则编辑器 Flow Editor。用户使用免费的 eKuiper manager 管理控制台时,可通过可视化拖拽 UI 进行规则的新建和编辑。 更灵活

2023-07-13

个实验版本。 Notebook 是一种交互式工具,能够将代码、可视化和文本组合到单个文档中。在 Notebook 中,开发者可以在一个地方编写并运行代码段(单元)、查看结果,以及记录思维过程。Notebook 已在快速原型设计、分析和数据

2023-03-18

工作。   Postcat 核心功能: API 文档管理:可视化 API 设计,生成 API 文档 API 测试:自动生成测试参数,自动生成测试用例,可视化数据编辑 插件拓展:众多插件扩展产品功能,打造属于你和团队的 API 开

2023-04-02

量迁移导出的数据做直接读取校验。 3 业务建模 支持可视化算子操作和编辑,sql语句的预览和运行,数据可视化和生成报表,它作为DataKit的可插拔插件开发。主要功能: 提供拖拽、连线的操作方式完成数据流算子的组

2023-01-18

ts版本由5.4.0升级至5.4.1; DataGear是一款开源免费的数据可视化分析平台,支持自由制作任何您想要的数据可视化看板。 系统特点: 友好接入的数据源 支持运行时接入任意提供 JDBC 驱动的数据库,包括 MySQL、Oracle、Postg

2023-03-10

和测试功能。   核心功能: API 文档管理,可视化 API 设计,生成 API 文档 API 测试, 自动生成测试参数,自动生成测试用例,可视化数据编辑 Mock,根据文档自动生成 Mock,或创建自定义 Mock 满足复杂场景

2022-10-13

/ 购物车 / 下单页 平台后台管理 丰富的功能插件 可视化模板编辑 / DIY 页面布局    

2023-04-29

求、页面异步加载。 前端的页面全新改版,更新页面 DIY 可视化装修、IM 客服系统等内容。 移动端预览: 平台后台预览 PC端预览 商家管理预览 自定义页面装修预览   演示体验 后台体验: https://v4.shopwind