Make TGUINanoMap actually somewhat as good as old NanoMap

This commit is contained in:
ShadowLarkens
2020-07-02 22:19:21 -07:00
parent 9ba80312f9
commit 07adb888e2
12 changed files with 133 additions and 38 deletions

View File

@@ -1,5 +1,6 @@
/datum/tgui_module/crew_monitor /datum/tgui_module/crew_monitor
name = "Crew monitor" name = "Crew monitor"
var/mapZoom = 1
/datum/tgui_module/crew_monitor/tgui_act(action, params) /datum/tgui_module/crew_monitor/tgui_act(action, params)
if(..()) if(..())
@@ -18,6 +19,10 @@
if(hassensorlevel(H, SUIT_SENSOR_TRACKING)) if(hassensorlevel(H, SUIT_SENSOR_TRACKING))
AI.ai_actual_track(H) AI.ai_actual_track(H)
return TRUE return TRUE
if("changeZoom")
var/newZoom = params["newZoom"]
mapZoom = newZoom
return TRUE
/datum/tgui_module/crew_monitor/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state) /datum/tgui_module/crew_monitor/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
@@ -51,4 +56,8 @@
for(var/zlevel in map_levels) for(var/zlevel in map_levels)
data["crewmembers"] += crew_repository.health_data(zlevel) data["crewmembers"] += crew_repository.health_data(zlevel)
data["zoomLevels"] = list(1, 1.25, 1.5, 1.75, 2)
data["mapZoom"] = mapZoom
return data return data

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 561 KiB

After

Width:  |  Height:  |  Size: 383 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1,29 +1,102 @@
import { Box, Icon, Tooltip } from '.'; import { Box, Icon, Tooltip } from '.';
import { Component } from 'inferno';
import { useBackend } from "../backend"; import { useBackend } from "../backend";
export const NanoMap = (props, context) => { export class NanoMap extends Component {
const { config } = useBackend(context); constructor(props) {
const { onClick } = props; super(props);
return (
<Box className="NanoMap__container"> this.state = {
<Box offsetX: 0,
as="img" offsetY: 0,
src={config.map+"_nanomap_z"+config.mapZLevel+".png"} transform: 'none',
style={{ dragging: false,
width: '600px', originX: null,
height: '600px', originY: null,
'margin-top': '-91px', };
'-ms-interpolation-mode': 'nearest-neighbor',
}} this.handleDragStart = e => {
onClick={onClick} /> document.body.style['pointer-events'] = 'none';
</Box> 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);
};
this.handleDragMove = e => {
this.setState(prevState => {
const state = { ... prevState };
const newOffsetX = e.screenX - state.originX;
const newOffsetY = e.screenY - state.originY;
if (prevState.dragging) {
state.offsetX += newOffsetX;
state.offsetY += newOffsetY;
state.originX = e.screenX;
state.originY = e.screenY;
} else {
state.dragging = true;
}
return state;
});
};
this.handleDragEnd = e => {
document.body.style['pointer-events'] = 'auto';
clearTimeout(this.timer);
this.setState({
dragging: false,
originX: null,
originY: null,
});
document.removeEventListener('mousemove', this.handleDragMove);
document.removeEventListener('mouseup', this.handleDragEnd);
};
}
render() {
const { config } = useBackend(this.context);
const { offsetX, offsetY } = this.state;
const { children, zoom } = this.props;
const newStyle = {
width: 508 * zoom + 'px',
height: 508 * zoom + 'px',
"margin-top": offsetY + 'px',
"margin-left": offsetX + 'px',
"overflow": "hidden",
"position": "relative",
"padding": "0px",
"background-image":
"url("+config.map+"_nanomap_z"+config.mapZLevel+".png)",
"background-size": "cover",
};
return (
<Box className="NanoMap__container">
<Box
style={newStyle}
onMouseDown={this.handleDragStart}>
{ children }
</Box>
</Box>
);
}
}
const NanoMapMarker = props => { const NanoMapMarker = props => {
const { const {
x, x,
y, y,
zoom,
icon, icon,
tooltip, tooltip,
color, color,
@@ -32,8 +105,8 @@ const NanoMapMarker = props => {
<Box <Box
position="absolute" position="absolute"
className="NanoMap__marker" className="NanoMap__marker"
top={(((263 - y) * 2) + 2) + 'px'} top={((255 - y) * 2 * zoom) - 8 + 'px'}
left={((x * 2) + 1) + 'px'}> left={((x * 2 * zoom)) - 8 + 'px'} >
<Icon <Icon
name={icon} name={icon}
color={color} color={color}

View File

@@ -21,21 +21,30 @@ export const CrewMonitor = (props, context) => {
"mapZLevel": level, "mapZLevel": level,
})} /> })} />
))} ))}
{crew {data.zoomLevels.map(zoomLevel => (
.filter(x => <Button
(x.sensor_type === 3 && ~~x.realZ === ~~config.mapZLevel) key={zoomLevel}
) selected={Number(data.mapZoom) === Number(zoomLevel)}
.map(crewmember => ( content={zoomLevel}
<NanoMap.Marker onClick={() => act("changeZoom", { "newZoom": zoomLevel })} />
key={crewmember.ref} ))}
x={crewmember.x} <NanoMap zoom={data.mapZoom}>
y={crewmember.y} {crew
icon="circle" .filter(x =>
tooltip={crewmember.name} (x.sensor_type === 3 && ~~x.realZ === ~~config.mapZLevel)
color={crewmember.dead ? 'red' : 'green'} )
/> .map(crewmember => (
))} <NanoMap.Marker
<NanoMap /> key={crewmember.ref}
x={crewmember.x}
y={crewmember.y}
zoom={data.mapZoom}
icon="circle"
tooltip={crewmember.name}
color={crewmember.dead ? 'red' : 'green'}
/>
))}
</NanoMap>
<Box className="NanoMap__contentOffset"> <Box className="NanoMap__contentOffset">
<Box bold m={2}> <Box bold m={2}>
<Table> <Table>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -6,6 +6,8 @@ $color-background: rgba(0, 0, 0, 0.33) !default;
bottom: 0; bottom: 0;
left: 524px; left: 524px;
right: 0; right: 0;
padding: 0px;
margin: 0px;
background-color: $color-background; background-color: $color-background;
overflow-y: scroll; overflow-y: scroll;
} }
@@ -20,4 +22,6 @@ $color-background: rgba(0, 0, 0, 0.33) !default;
.NanoMap__marker { .NanoMap__marker {
z-index: 10; z-index: 10;
padding: 0px;
margin: 0px;
} }