InteractableLayerManager
可交互图层管理器
基本信息
| 属性 | 值 |
|---|---|
| 路径 | com.gtnewhorizons.navigator.api.model.layers.InteractableLayerManager |
| 行数 | 130 |
| 继承 | extends LayerManager |
在 LayerManager 之上加路点管理能力。
两个字段(:23-25)
protected final Map<SupportedMods, WaypointManager> waypointManagers = new EnumMap<>(SupportedMods.class);
protected Waypoint activeWaypoint = null;
| 字段 | 说明 |
|---|---|
waypointManagers |
每个地图模组一个路点管理器 |
activeWaypoint |
当前活动路点(初值 null) |
⚠️ EnumMap 的 key 仍是 SupportedMods ——
与 LayerManager 的 layerRenderer 同构,
所以两个 map 覆盖同一组地图模组。
addLayerRenderer 的桥接重载(:49-67)
| 方法 | 行 | 说明 |
|---|---|---|
addLayerRenderer(InteractableLayerManager, SupportedMods) |
:49-56 |
abstract,参数类型比父类更窄 |
addLayerRenderer(LayerManager, SupportedMods) |
:73-~80 |
final 桥接,把基类调用转发到上面那个 |
⚠️ 这是协变参数收窄 + final 桥接的手法:
父类声明 addLayerRenderer(LayerManager, SupportedMods)(abstract),
子类用 addLayerRenderer(InteractableLayerManager, SupportedMods) 重载
并另写一个 final 同名方法接父类签名,转发时强转。
⚠️ 若消费方在 LayerManager 引用上调用 addLayerRenderer,
走的是 final 桥接版 → 强转 InteractableLayerManager ——
若实际对象不是本类会 ClassCastException。
addWaypointManager(:58-67)
protected @Nullable WaypointManager addWaypointManager(InteractableLayerManager manager, SupportedMods mod)
非 abstract(有默认实现,返回 null 表示不支持),
返回 @Nullable。
⚠️ 与 addLayerRenderer 不同 —— 路点管理是可选的,
所以不给抽象实现,让子类只在需要时覆写。
三个路点状态方法
| 方法 | 行 | 说明 |
|---|---|---|
setActiveWaypoint(Waypoint) |
:82-92 |
设置活动路点(11 行) |
clearActiveWaypoint() |
:94-104 |
清除(11 行) |
hasActiveWaypoint() |
:106-112 |
查询 |
getWaypointManager(SupportedMods) |
:114-117 |
返回 @Nullable |
⚠️ set / clear 各有 11 行 —— 不是简单赋值,
会同步到所有已注册的 WaypointManager(遍历 waypointManagers 的值)。
⚠️ 缺 getActiveWaypoint() ——
与 WaypointManager 同样的不对称问题:
能 set / clear / has,但拿不到当前路点对象
(虽然有 protected activeWaypoint 字段可被子类读)。
updateElement 的两个重载(:69-71、:119-~123)
| 方法 | 行 | 签名 |
|---|---|---|
updateElement(IWaypointAndLocationProvider) |
:69-71 |
协变收窄的覆写 |
updateElement(ILocationProvider) |
:119-~123 |
final 桥接 |
与 addLayerRenderer 同样的手法。
ILocationProvider 版内部判断是否 instanceof IWaypointAndLocationProvider
再转发(:69-71 与 :119 的对照)。
子类
DirtyChunkLayerManager(100 行)—— ⚠️ 它继承的是 LayerManager 还是本类需看源码, 但它注册了 DirtyChunkButtonManager, 而按钮属于可交互体系。
相关
- LayerManager - 父类
- WaypointManager - 路点管理侧
- Waypoint - 活动路点类型
- UniversalInteractableRenderer - 渲染器