Widget System
基本信息
| 属性 | 值 |
|---|---|
| 枚举 | WidgetType(surface/WidgetType.java) |
| 图元种类 | 12 |
| 源码规模 | surface/ 目录约 30 个文件,占全模组 98 个 .java 的近三分之一 |
OCGlasses 的 98 个 Java 文件中,绝大部分不是方块/物品逻辑,而是这套图元渲染框架——它让 Lua 脚本能在玩家眼前绘制 2D 与 3D 图元。
12 种图元
WidgetType 枚举把类型名映射到实现类:
| 枚举值 | 实现类 | 维度 |
|---|---|---|
SQUARE |
SquareWidget |
2D(face) |
TRIANGLE |
TriangleWidget |
2D |
DOT |
Dot |
2D |
TEXT |
Text |
2D |
QUAD |
Quad |
2D |
ITEMICON |
ItemIcon |
2D |
CUBE3D |
Cube3D |
3D(world) |
TRIANGLE3D |
Triangle3D |
3D |
QUAD3D |
Quad3D |
3D |
DOT3D |
Dot3D |
3D |
LINE3D |
Line3D |
3D |
FLOATINGTEXT |
FloatingText |
3D(世界空间) |
按源码包路径分为两组:surface/widgets/component/face/(6 个 2D 图元)与 surface/widgets/component/world/(6 个 3D 图元)。
getNewInstance() 用 clazz.newInstance() 反射实例化(无参构造)——故每个图元类必须有无参构造器。
属性系统
surface/widgets/core/attribute/ 定义了 10 个属性接口,图元通过组合实现:
| 接口 | 作用 |
|---|---|
IAlpha |
透明度 |
IColorizable |
颜色 |
IItemable |
物品(供 ITEMICON 用) |
ILookable |
朝向 |
IPositionable |
位置(2D) |
IResizable |
尺寸 |
I2DVertex |
2D 顶点 |
I3DPositionable |
位置(3D) |
I3DVertex |
3D 顶点 |
IAttribute |
通用属性标记 |
由 AttributeRegistry(surface/widgets/core/AttributeRegistry.java)统一管理。
渲染链路
| 文件 | 作用 |
|---|---|
surface/ClientSurface.java |
客户端渲染入口 |
surface/ServerSurface.java |
服务端图元状态 |
surface/GlassesGui.java |
覆盖层 GUI |
surface/GlassesContainer.java |
覆盖层容器 |
surface/IRenderableWidget.java |
可渲染图元接口 |
surface/Widget.java |
图元基类 |
surface/RenderType.java |
渲染类型 |
surface/widgets/rendering/ |
实际绘制 |
图元更新经 WidgetUpdatePacket(网络 ID 7,服务端→客户端)同步。
耗电与图元数量挂钩
耗电公式见 energyMultiplier 的配置描述(OpenGlasses.java:76-78):
PowerDrain = (NumberOfWidgets / 10) * energyMultiplier
即图元越多耗电越高,每 10 个图元为一个计费单位,乘以 energyMultiplier 系数。energyBuffer(默认 100)是缓冲容量。
见 Config。
相关条目
- Lua API - 30 个操作图元的函数
- AR Glasses - 承载图元的物品
- Glasses Terminal - 图元绑定目标
- Config - 能量参数