Initial commit: DayZ memory C++ port with DMA backend and overlay

This commit is contained in:
67
2026-06-16 15:18:44 +08:00
commit f04e38b8ae
163 changed files with 163380 additions and 0 deletions
+134
View File
@@ -0,0 +1,134 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>DayZ Web Map</title>
<link rel="stylesheet" href="/style.css">
</head>
<body>
<button class="settings-toggle" id="settingsToggle" type="button" aria-label="Open filters"></button>
<div class="top-right-toggles">
<button class="players-toggle" id="labelSettingsToggle" type="button" aria-label="Open label settings">Labels</button>
<button class="players-toggle" id="playersToggle" type="button" aria-label="Open players">Players</button>
<button class="loot-toggle" id="lootToggle" type="button" aria-label="Open loot">Loot</button>
</div>
<aside class="label-settings-panel" id="labelSettingsPanel">
<div class="label-settings-header">
<div>
<strong>Label Settings</strong>
<div class="label-settings-subtitle">Tune ordinary loot label placement without touching filters.</div>
</div>
<div class="label-settings-actions">
<button class="collapse-button" id="labelSettingsReset" type="button">Reset</button>
<button class="collapse-button" id="labelSettingsClose" type="button" aria-label="Close label settings"></button>
</div>
</div>
<div class="label-settings-body" id="labelSettingsBody">
<label class="setting-card" for="ordinaryLootSpread">
<span class="setting-title">Ordinary loot spread</span>
<span class="setting-value" id="ordinaryLootSpreadValue">2.0x</span>
<input type="range" id="ordinaryLootSpread" min="1" max="4" step="0.1" value="2">
<span class="setting-help">Controls how far regular loot labels may move away from the point to avoid collisions.</span>
</label>
<label class="setting-card" for="groupedLootSpread">
<span class="setting-title">Grouped loot spread</span>
<span class="setting-value" id="groupedLootSpreadValue">2.0x</span>
<input type="range" id="groupedLootSpread" min="1" max="4" step="0.1" value="2">
<span class="setting-help">Controls how far merged same-name loot labels may sit from the cluster center.</span>
</label>
<label class="setting-card" for="sameLootMergeRadius">
<span class="setting-title">Same-name merge radius</span>
<span class="setting-value" id="sameLootMergeRadiusValue">110 px</span>
<input type="range" id="sameLootMergeRadius" min="20" max="240" step="5" value="110">
<span class="setting-help">Items with the same name inside this screen radius share one text label with multiple connector lines.</span>
</label>
<label class="setting-card" for="lineAnchorMode">
<span class="setting-title">Line anchor on text</span>
<select id="lineAnchorMode">
<option value="auto-nearest">Auto nearest</option>
<option value="top-left">Top left</option>
<option value="bottom-center">Bottom center</option>
<option value="top-center">Top center</option>
<option value="top-right">Top right</option>
<option value="middle-left">Middle left</option>
<option value="middle-right">Middle right</option>
<option value="bottom-left">Bottom left</option>
<option value="bottom-right">Bottom right</option>
</select>
<span class="setting-help">Chooses from which corner or side midpoint of the text the connector line starts. Auto nearest selects the closest standard point on the text rectangle to the item point.</span>
</label>
<label class="setting-card toggle-setting">
<span class="setting-title">Merge same-name loot labels</span>
<input type="checkbox" id="mergeSameLootLabels" checked>
<span class="setting-help">When enabled, nearby ordinary loot with the same name is shown as one label with several lines.</span>
</label>
</div>
</aside>
<aside class="players-panel" id="playersPanel">
<div class="players-panel-header">
<strong>Players</strong>
<button class="collapse-button" id="playersClose" type="button" aria-label="Close players"></button>
</div>
<div class="players-server" id="serverInfo">Server: loading...</div>
<div class="players-list" id="playersList"></div>
</aside>
<aside class="loot-panel" id="lootPanel">
<div class="players-panel-header">
<strong>Ground Loot</strong>
<button class="collapse-button" id="lootClose" type="button" aria-label="Close loot"></button>
</div>
<div class="players-server" id="lootInfo">Loot: loading...</div>
<div class="loot-list" id="lootList"></div>
</aside>
<div class="shell">
<aside class="panel" id="settingsPanel">
<div class="panel-header">
<div>
<h1>DayZ Web Map</h1>
<div id="status">Connecting...</div>
<div id="serverBadge" class="server-badge">Server: loading...</div>
</div>
<button class="collapse-button" id="collapseButton" type="button" aria-label="Hide filters"></button>
</div>
<div class="panel-body" id="settingsPanelBody">
<div class="group">
<div class="group-title">Controls</div>
<label class="toggle-row"><input type="checkbox" id="followPlayer"><span>Follow player</span></label>
<label class="toggle-row"><input type="checkbox" id="showLabels" checked><span>Global labels</span></label>
<label class="toggle-row"><input type="checkbox" id="showLoot" checked><span>All loot</span></label>
</div>
<div class="group">
<div class="group-title">Entity Filters</div>
<div id="entityFilterList" class="filter-list"></div>
</div>
<div class="group">
<div class="group-title">Loot Filters</div>
<div id="lootFilterList" class="filter-list"></div>
</div>
<div class="group">
<div class="group-title">Display</div>
<label class="range-row" for="distanceFilter"><span>Distance filter</span><input type="range" id="distanceFilter" min="0" max="5000" step="50" value="2000"></label>
<div id="distanceValue">2000 m</div>
<label class="range-row" for="textSize"><span>Default text size</span><input type="range" id="textSize" min="10" max="24" step="1" value="14"></label>
<div id="textSizeValue">14 px</div>
</div>
<div class="hint">Drag to move. Use wheel or pinch to zoom. Open a filter card to tune color, marker size, text size and labels.</div>
</div>
</aside>
<main class="viewport" id="viewport">
<div class="canvas" id="canvas">
<div id="tiles"></div>
<svg id="paths"></svg>
<div id="itemLabels"></div>
<div id="markers"></div>
</div>
</main>
</div>
<script src="/app.js"></script>
</body>
</html>