LayerRenderer
渲染器接口(按地图模组分发)
基本信息
| 属性 | 值 |
|---|---|
| 路径 | com.gtnewhorizons.navigator.api.model.layers.LayerRenderer |
| 行数 | 164 |
| 类型 | abstract class |
| 子类 | UniversalLayerRenderer、JMLayerRenderer、XaeroLayerRenderer |
四个字段(:29-33)
protected final LayerManager manager;
protected List<? extends RenderStep> renderSteps = new ArrayList<>();
protected final Int2ObjectMap<Long2ObjectMap<RenderStep>> dimCachedRenderSteps = new Int2ObjectOpenHashMap<>();
protected Long2ObjectMap<RenderStep> currentDimSteps;
| 字段 | 类型 | 说明 |
|---|---|---|
manager |
LayerManager |
final,回指所属图层 |
renderSteps |
List<? extends RenderStep> |
当前可见的渲染步骤 |
dimCachedRenderSteps |
Int2ObjectMap<Long2ObjectMap<RenderStep>> |
维度 → 坐标 → 步骤(fastutil,零装箱) |
currentDimSteps |
Long2ObjectMap<RenderStep> |
当前维度的快捷视图 |
⚠️ 两级 Int2ObjectMap<Long2ObjectMap<...>> 是性能关键:
refreshVisibleElements 每次都要按「维度 + 打包坐标」查已存在的步骤,
避免重复 generateRenderStep。
⚠️ currentDimSteps 非 final 且不缓存 ——
它指向 dimCachedRenderSteps 里当前维度那一层(引用共享),
不是拷贝。
构造器(:40-48)
public LayerRenderer(@Nonnull LayerManager manager, SupportedMods mod)
⚠️ manager 标 @Nonnull,但没有对 manager == null 做运行时检查。
SupportedMods mod 存入 getLayerMod()(:96-98)。
三个查询方法
| 方法 | 行 | 说明 |
|---|---|---|
getRenderSteps() |
:106-109 |
正序(绘制顺序) |
getReversedRenderSteps() |
:111-~130 |
倒序 |
getRenderStepsForInteraction() |
:101-104 |
供交互(命中测试)用 |
⚠️ 有两个方向的列表 —— 绘制要正序(底→顶),而命中测试通常要倒序(顶→底), 这样点在重叠元素上时选中最上层那个。
getRenderPriority(:147-153)
public int getRenderPriority() { ... }
渲染优先级,升序 = 先画 = 更靠下层。 NavigatorApi 的排序版本按它升序排。
⚠️ 基类实现给默认值(各子类覆写)。
UniversalLayerRenderer 的
getRenderPriority(:137)返回构造时 withRenderPriority 设的值。
两个可覆写钩子
| 方法 | 行 | 说明 |
|---|---|---|
updateVisibleElements(List<? extends ILocationProvider>) |
:155-159 |
可见集变化时回调(空实现) |
generateRenderStep(ILocationProvider) |
:91-94 |
protected @Nullable,为一个数据点造渲染步骤 |
generateRenderSteps(List<? extends ILocationProvider>) |
:161-~164 |
批量版本 |
⚠️ generateRenderStep 返回 @Nullable ——
数据点可以「这层不画」(如被过滤)。
⚠️ updateVisibleElements 在基类是空实现,
UniversalLayerRenderer 覆写了它
(见该条目)。
refreshVisibleElements(:50-89)—— 核心方法
按新的可见集刷新 renderSteps 与缓存:40 行体,
包含已存在步骤的复用(按 dimCachedRenderSteps 查)
与新数据点的 generateRenderStep 调用。
由 LayerManager 的
recacheMiniMap / recacheFullscreenMap 驱动。
相关
- LayerManager - 宿主
- UniversalLayerRenderer - 推荐的地图中立子类
- RenderStep - 渲染步骤接口
- JMLayerRenderer / XaeroLayerRenderer - 地图专用子类(JM5 已废弃)