diff --git a/code/datums/cache/crew.dm b/code/datums/cache/crew.dm
index f92bab9cf7a..8d53fe44a7a 100644
--- a/code/datums/cache/crew.dm
+++ b/code/datums/cache/crew.dm
@@ -1,7 +1,14 @@
GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
+/datum/repository/crew
+ var/static/list/heads
+ var/static/list/ert_jobs
+
/datum/repository/crew/New()
cache_data = list()
+ // These jobs are used to highlight those with a command ID. Stolen from nttc.dm
+ heads = heads || list("Captain", "Head of Personnel", "Nanotrasen Representative", "Blueshield", "Chief Engineer", "Chief Medical Officer", "Research Director", "Head of Security", "Magistrate", "AI")
+ ert_jobs = ert_jobs || list("Emergency Response Team Officer", "Emergency Response Team Engineer", "Emergency Response Team Medic", "Emergency Response Team Leader", "Emergency Response Team Member")
..()
/datum/repository/crew/proc/health_data(turf/T)
@@ -32,11 +39,13 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown")
crewmemberData["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job")
crewmemberData["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job")
+ crewmemberData["is_command"] = (crewmemberData["assignment"] in ert_jobs) || (crewmemberData["assignment"] in heads)
if(C.sensor_mode >= SUIT_SENSOR_BINARY)
- crewmemberData["dead"] = H.stat > UNCONSCIOUS
+ crewmemberData["dead"] = H.stat == DEAD
if(C.sensor_mode >= SUIT_SENSOR_VITAL)
+ crewmemberData["stat"] = H.stat
crewmemberData["oxy"] = round(H.getOxyLoss(), 1)
crewmemberData["tox"] = round(H.getToxLoss(), 1)
crewmemberData["fire"] = round(H.getFireLoss(), 1)
diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm
index e226a3009b8..6bca763bbc8 100644
--- a/code/modules/client/asset_cache.dm
+++ b/code/modules/client/asset_cache.dm
@@ -365,10 +365,10 @@ GLOBAL_LIST_EMPTY(asset_datums)
// Nanomaps
/datum/asset/simple/nanomaps
// It REALLY doesnt matter too much if these arent up to date
- // They are friggin huge
+ // They are relatively big
verify = FALSE
assets = list(
- "Cyberiad_nanomap_z1.png" = 'icons/_nanomaps/Cyberiad_nanomap_z1.png',
- "Delta_nanomap_z1.png" = 'icons/_nanomaps/Delta_nanomap_z1.png',
- "MetaStation_nanomap_z1.png" = 'icons/_nanomaps/MetaStation_nanomap_z1.png',
+ "Cyberiad_nanomap_z1.png" = 'icons/_nanomaps/Cyberiad_nanomap_z1.png',
+ "Delta_nanomap_z1.png" = 'icons/_nanomaps/Delta_nanomap_z1.png',
+ "MetaStation_nanomap_z1.png" = 'icons/_nanomaps/MetaStation_nanomap_z1.png',
)
diff --git a/icons/_nanomaps/Cyberiad_nanomap_z1.png b/icons/_nanomaps/Cyberiad_nanomap_z1.png
index 126f9021dac..fb87632863e 100644
Binary files a/icons/_nanomaps/Cyberiad_nanomap_z1.png and b/icons/_nanomaps/Cyberiad_nanomap_z1.png differ
diff --git a/icons/_nanomaps/Delta_nanomap_z1.png b/icons/_nanomaps/Delta_nanomap_z1.png
index f0f4e31bca3..23a31d17241 100644
Binary files a/icons/_nanomaps/Delta_nanomap_z1.png and b/icons/_nanomaps/Delta_nanomap_z1.png differ
diff --git a/icons/_nanomaps/MetaStation_nanomap_z1.png b/icons/_nanomaps/MetaStation_nanomap_z1.png
index 280e28a2bc3..77a34cd046a 100644
Binary files a/icons/_nanomaps/MetaStation_nanomap_z1.png and b/icons/_nanomaps/MetaStation_nanomap_z1.png differ
diff --git a/tgui/packages/tgui/components/NanoMap.js b/tgui/packages/tgui/components/NanoMap.js
index 48442e8212c..62147845d89 100644
--- a/tgui/packages/tgui/components/NanoMap.js
+++ b/tgui/packages/tgui/components/NanoMap.js
@@ -1,7 +1,16 @@
-import { Box, Icon, Tooltip } from '.';
import { Component } from 'inferno';
+import { Box, Icon, Tooltip } from '.';
import { useBackend } from "../backend";
+import { LabeledList } from './LabeledList';
+import { Slider } from './Slider';
+const pauseEvent = e => {
+ if (e.stopPropagation) { e.stopPropagation(); }
+ if (e.preventDefault) { e.preventDefault(); }
+ e.cancelBubble = true;
+ e.returnValue = false;
+ return false;
+};
export class NanoMap extends Component {
constructor(props) {
@@ -9,31 +18,29 @@ export class NanoMap extends Component {
// Auto center based on window size
const Xcenter = (window.innerWidth / 2) - 256;
+ const Ycenter = (window.innerHeight / 2) - 256;
this.state = {
- offsetX: Xcenter,
- offsetY: 0,
+ offsetX: 128,
+ offsetY: 48,
transform: 'none',
dragging: false,
originX: null,
originY: null,
+ zoom: 1,
};
+ // Dragging
this.handleDragStart = e => {
- document.body.style['pointer-events'] = 'none';
this.ref = e.target;
this.setState({
dragging: false,
originX: e.screenX,
originY: e.screenY,
});
- this.timer = setTimeout(() => {
- this.setState({
- dragging: true,
- });
- }, 250);
document.addEventListener('mousemove', this.handleDragMove);
document.addEventListener('mouseup', this.handleDragEnd);
+ pauseEvent(e);
};
this.handleDragMove = e => {
@@ -51,11 +58,10 @@ export class NanoMap extends Component {
}
return state;
});
+ pauseEvent(e);
};
this.handleDragEnd = e => {
- document.body.style['pointer-events'] = 'auto';
- clearTimeout(this.timer);
this.setState({
dragging: false,
originX: null,
@@ -63,28 +69,44 @@ export class NanoMap extends Component {
});
document.removeEventListener('mousemove', this.handleDragMove);
document.removeEventListener('mouseup', this.handleDragEnd);
+ pauseEvent(e);
};
+
+ this.handleZoom = (_e, value) => {
+ this.setState(state => {
+ const newZoom = Math.min(Math.max(value, 1), 8);
+ let zoomDiff = (newZoom - state.zoom) * 1.5;
+ state.zoom = newZoom;
+ state.offsetX = state.offsetX - 262 * zoomDiff;
+ state.offsetY = state.offsetY - 256 * zoomDiff;
+ if (props.onZoom) {
+ props.onZoom(state.zoom);
+ }
+ return state;
+ });
+ };
+
}
render() {
const { config } = useBackend(this.context);
- const { offsetX, offsetY } = this.state;
- const { children, zoom } = this.props;
+ const { dragging, offsetX, offsetY, zoom = 1 } = this.state;
+ const { children } = this.props;
+ const mapUrl = config.map + "_nanomap_z1.png?" + Date.now();
+ const mapSize = (512 * zoom) + 'px';
const newStyle = {
- width: '512px',
- height: '512px',
- "margin-top": offsetY + 'px',
- "margin-left": offsetX + 'px',
+ width: mapSize,
+ height: mapSize,
+ "margin-top": offsetY + "px",
+ "margin-left": offsetX + "px",
"overflow": "hidden",
"position": "relative",
- "padding": "0px",
- "background-image":
- "url(" + config.map + "_nanomap_z1.png)",
+ "background-image": "url(" + mapUrl + ")",
"background-size": "cover",
+ "background-repeat": "no-repeat",
"text-align": "center",
- "transform-origin": "center center",
- "transform": "scale(" + zoom + ")",
+ "cursor": dragging ? "move" : "auto",
};
return (
@@ -97,6 +119,7 @@ export class NanoMap extends Component {
{children}
+