SusMinimap

Universal minimap — tile grid, free texture, or node graph; unit / POI markers, zoom, fog, camera frustum.
Package
SusGame · Molecules (commercial)
Props
| Name | Type | Default | |
|---|---|---|---|
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() |
Slots
| Name |
|---|
(default) |
frameOverlay |
cornerTopLeft |
cornerTopRight |
cornerBottomLeft |
cornerBottomRight |
Events
| Name | Field | Payload |
|---|---|---|
CellClicked | OnCellClicked | Vector2 |
UnitClicked | OnUnitClicked | int |
PoiClicked | OnPoiClicked | string |
NodeClicked | OnNodeClicked | string |
ZoomChanged | OnZoomChanged | float |
Style hooks
USS class contract — override appearance without touching C#. States toggle via these classes:
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
Usage
Pick RenderMode (grid | free | node), then fill list props from C# (TerrainData / MinimapTexture / NodeData+EdgeData). Markers and clicks are list-driven — not XML lists.
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 | Role |
|---|---|
RenderMode | grid | free | node |
MapWidth · MapHeight | Grid dimensions (default 30) |
TerrainData | List<MinimapCell> — grid tiles (regenerates texture) |
MinimapTexture | Pre-made texture (free / skip generate) |
ShowGrid · CurrentFloorLevel | Grid chrome / multi-floor |
UnitData · PoiData | Marker lists |
NodeData · EdgeData | Graph (node mode) |
CameraTexture · ShowCameraIndicator · CameraBounds · FollowCamera | Frustum |
Zoom · ZoomCenter · MinZoom · MaxZoom | Zoom |
MaskShape | square | circle |
FrameVisible · FrameTitle | Frame chrome |
ShowFogOfWar · FogMask | Fog overlay |
Interactive | Click / zoom input |
AutoResize · MinSize · MaxSize | Host size clamp |
MapBounds | World bounds (free World↔minimap) |
default / frameOverlay / corner* slots | Overlay content |
RegenerateTerrainTexture · FocusOn · ResetZoom · Toggle | Helpers |
OnCellClicked · OnUnitClicked · OnPoiClicked · OnNodeClicked · OnZoomChanged | Events |
Modes
RenderMode | Source |
|---|---|
grid | TerrainData cells → generated texture |
free | MinimapTexture (+ MapBounds) |
node | NodeData + EdgeData (nested MinimapNodeState / MinimapEdgeState) |
Nested types live on SusMinimap (MinimapCell, MinimapUnitMarker, MinimapPOIMarker, MinimapNode, MinimapEdge, MinimapBounds, MinimapCameraRect) — see .sharq for fields.
Notes
- HUD chrome wrapper (placeholder / size): SusHudMinimapFrame — inject this atom via
SetContentor the default slot. - List / texture / bounds props are C#-driven; XML binds the scalar chrome props above.
ComponentApiextract may omit list props without[CreateProperty]— use the table /.sharqas source of truth.