SusMinimap

通用小地图 — 瓦片网格、自由贴图或节点图;单位 / POI 标记、缩放、战争迷雾、摄像机视锥。
包
SusGame · 原子(商业)
属性
| 名称 | 类型 | 默认值 | |
|---|---|---|---|
RenderMode | Prop<string> | "grid" | |
MapWidth | Prop<int> | 30 | |
MapHeight | Prop<int> | 30 | |
MinimapTexture | Prop<Texture2D> | null | |
ShowGrid | Prop<bool> | true | |
CurrentFloorLevel | Prop<int> | 0 | |
ShowPlayer | Prop<bool> | false | |
PlayerPosition | Prop<Vector2> | new Vector2(0.5f, 0.5f) | |
PlayerForward | Prop<Vector2> | new Vector2(0f, 1f) | |
PlayerMode | Prop<string> | "center" | |
ViewConeAngle | Prop<float> | 70f | |
CameraTexture | Prop<Texture2D> | null | |
ShowCameraIndicator | Prop<bool> | true | |
CameraBounds | Prop<MinimapCameraRect> | new MinimapCameraRect() | |
Zoom | Prop<float> | 1f | |
ZoomCenter | Prop<Vector2> | new Vector2(0.5f, 0.5f) | |
FollowCamera | Prop<bool> | true | |
MinZoom | Prop<float> | 0.5f | |
MaxZoom | Prop<float> | 3f | |
ZoomStep | Prop<float> | 0.25f | |
ShowZoomControls | Prop<bool> | false | |
RotationMode | Prop<string> | "north-up" | |
ShowCompass | Prop<bool> | false | |
ShowEdgeIndicators | Prop<bool> | true | |
MaxEdgeIndicators | Prop<int> | 6 | |
LabelMode | Prop<string> | "selected" | |
MaskShape | Prop<string> | "square" | |
FrameVisible | Prop<bool> | true | |
FrameTitle | Prop<string> | "" | |
ShowFogOfWar | Prop<bool> | false | |
FogMask | Prop<Texture2D> | null | |
Interactive | Prop<bool> | true | |
AutoResize | Prop<bool> | true | |
MinSize | Prop<float> | 128f | |
MaxSize | Prop<float> | 512f | |
MapBounds | Prop<MinimapBounds> | new MinimapBounds() |
插槽
| 名称 |
|---|
(默认) |
frameOverlay |
cornerTopLeft |
cornerTopRight |
cornerBottomLeft |
cornerBottomRight |
事件
| 名称 | 字段 | 载荷 |
|---|---|---|
CellClicked | OnCellClicked | Vector2 |
UnitClicked | OnUnitClicked | int |
PoiClicked | OnPoiClicked | string |
NodeClicked | OnNodeClicked | string |
ZoomChanged | OnZoomChanged | float |
样式钩子
USS 类契约 — 无需改 C# 即可覆盖外观。状态通过这些类切换:
sus-minimapsus-minimap__camerasus-minimap__compasssus-minimap__compass-labelsus-minimap__compass-label--esus-minimap__compass-label--nsus-minimap__compass-label--ssus-minimap__compass-label--wsus-minimap__containersus-minimap__cornersus-minimap__corner--blsus-minimap__corner--brsus-minimap__corner--tlsus-minimap__corner--trsus-minimap__edge-countersus-minimap__edge-indicatorsus-minimap__edge-layersus-minimap__fogsus-minimap__framesus-minimap__labelsus-minimap__nodesus-minimap__node--appearsus-minimap__node--currentsus-minimap__node-iconsus-minimap__node-labelsus-minimap__nodessus-minimap__overlay-slotsus-minimap__player-arrowsus-minimap__player-conesus-minimap__player-layersus-minimap__poisus-minimap__poi--kind-lootsus-minimap__poi--kind-objectivesus-minimap__poi--pulsesus-minimap__poi-iconsus-minimap__poi-labelsus-minimap__poissus-minimap__terrainsus-minimap__titlesus-minimap__unitsus-minimap__unit--kind-lootsus-minimap__unit--kind-objectivesus-minimap__unit--selectedsus-minimap__unit-dirsus-minimap__unit-hpsus-minimap__unit-hp-fillsus-minimap__unitssus-minimap__zoom-btnsus-minimap__zoom-controlssus-minimap--fitsus-minimap--frame-visiblesus-minimap--freesus-minimap--gridsus-minimap--interactivesus-minimap--mask-circlesus-minimap--mask-squaresus-minimap--node
用法
选择 RenderMode(grid | free | node),然后从 C# 填充列表属性(TerrainData / MinimapTexture / NodeData+EdgeData)。标记和点击由列表驱动 — 不是 XML 列表。
csharp
var map = new SusMinimap();
map.RenderMode.Value = "grid";
map.MapWidth.Value = 30;
map.MapHeight.Value = 30;
map.MaskShape.Value = "circle";
map.FrameTitle.Value = "Floor 1";
map.ShowGrid.Value = true;
map.Interactive.Value = true;
map.TerrainData.Value = new List<SusMinimap.MinimapCell>
{
new() { X = 0, Z = 0, Type = 1, FloorLevel = 0, Visibility = 2 },
};
map.UnitData.Value = new List<SusMinimap.MinimapUnitMarker>
{
/* … */
};
map.OnCellClicked += cell => { /* Vector2 grid coords */ };
map.OnUnitClicked += idx => { /* marker index */ };
map.OnPoiClicked += id => { /* … */ };
map.OnNodeClicked += id => { /* … */ };
map.OnZoomChanged += z => { /* … */ };
// Helpers
// map.FocusOn(new Vector2(0.5f, 0.5f), zoom: 1.5f);
// map.ResetZoom();
// map.RegenerateTerrainTexture();xml
<template>
<sus:SusMinimap :RenderMode="Mode.Value"
:MapWidth="W.Value"
:MapHeight="H.Value"
:ShowGrid="Grid.Value"
:CurrentFloorLevel="Floor.Value"
:MaskShape="Mask.Value"
:FrameVisible="Frame.Value"
:FrameTitle="Title.Value"
:ShowFogOfWar="Fog.Value"
:Interactive="Ix.Value"
:Zoom="Zoom.Value"
:MinZoom="MinZ.Value"
:MaxZoom="MaxZ.Value"
:FollowCamera="Follow.Value"
:ShowCameraIndicator="Cam.Value"
:AutoResize="Auto.Value"
:MinSize="MinS.Value"
:MaxSize="MaxS.Value"
@cell-clicked="OnCell"
@unit-clicked="OnUnit"
@poi-clicked="OnPoi"
@node-clicked="OnNode"
@zoom-changed="OnZoom" />
</template>
<script>
public Prop<string> Mode = new("grid");
public Prop<int> W = new(30);
public Prop<int> H = new(30);
public Prop<bool> Grid = new(true);
public Prop<int> Floor = new(0);
public Prop<string> Mask = new("circle");
public Prop<bool> Frame = new(true);
public Prop<string> Title = new("Floor 1");
public Prop<bool> Fog = new(false);
public Prop<bool> Ix = new(true);
public Prop<float> Zoom = new(1f);
public Prop<float> MinZ = new(0.5f);
public Prop<float> MaxZ = new(3f);
public Prop<bool> Follow = new(true);
public Prop<bool> Cam = new(true);
public Prop<bool> Auto = new(true);
public Prop<float> MinS = new(128f);
public Prop<float> MaxS = new(512f);
void OnCell(Vector2 cell) { /* … */ }
void OnUnit(int index) { /* … */ }
void OnPoi(string id) { /* … */ }
void OnNode(string id) { /* … */ }
void OnZoom(float z) { /* … */ }
// Fill TerrainData / UnitData / PoiData / NodeData / EdgeData /
// MinimapTexture / FogMask / CameraBounds / MapBounds from C#.
</script>| Prop / API | 作用 |
|---|---|
RenderMode | grid | free | node |
MapWidth · MapHeight | 网格尺寸(默认 30) |
TerrainData | List<MinimapCell> — 网格瓦片(会重新生成贴图) |
MinimapTexture | 预制贴图(free / 跳过生成) |
ShowGrid · CurrentFloorLevel | 网格外观 / 多楼层 |
UnitData · PoiData | 标记列表 |
NodeData · EdgeData | 图(node 模式) |
CameraTexture · ShowCameraIndicator · CameraBounds · FollowCamera | 视锥 |
Zoom · ZoomCenter · MinZoom · MaxZoom | 缩放 |
MaskShape | square | circle |
FrameVisible · FrameTitle | 边框外观 |
ShowFogOfWar · FogMask | 战争迷雾遮罩 |
Interactive | 点击 / 缩放输入 |
AutoResize · MinSize · MaxSize | 宿主尺寸限制 |
MapBounds | 世界边界(free 世界↔小地图) |
default / frameOverlay / corner* 插槽 | 覆盖层内容 |
RegenerateTerrainTexture · FocusOn · ResetZoom · Toggle | 辅助方法 |
OnCellClicked · OnUnitClicked · OnPoiClicked · OnNodeClicked · OnZoomChanged | 事件 |
模式
RenderMode | 来源 |
|---|---|
grid | TerrainData 格子 → 生成的贴图 |
free | MinimapTexture(+ MapBounds) |
node | NodeData + EdgeData(嵌套的 MinimapNodeState / MinimapEdgeState) |
嵌套类型位于 SusMinimap 上(MinimapCell、MinimapUnitMarker、MinimapPOIMarker、MinimapNode、MinimapEdge、MinimapBounds、MinimapCameraRect)— 字段请参见 .sharq。
备注
- HUD 外观包装器(占位符 / 尺寸):SusHudMinimapFrame — 通过
SetContent或默认插槽注入该原子组件。 - 列表 / 贴图 / 边界属性由 C# 驱动;XML 绑定上面的标量外观属性。
ComponentApi提取可能会遗漏没有[CreateProperty]的列表属性 — 请以表格 /.sharq为准。