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 驱动。

相关