From 5c3bd9b3802e2001a7e77baf2911386135a03839 Mon Sep 17 00:00:00 2001 From: notoraptor Date: Wed, 14 Aug 2019 12:22:22 -0400 Subject: [Web] Integrated new maps on the web interface - Fixed bug with incorrect dislodged unit on pure map - [python] Make sure dummy powers are registered only for standard maps. - Hardcoded supply centers into SVG files. - Removed supply centers CSS classes. - Update positions for units and dislodged units on all maps. - Converted SVGs to React. - Removed "sym" classes and hardcode related styles into symbol definitions. - Reordered map list (standard at top, then other ones in alphabetical order) - Displayed + button for all maps and disable it for maps without variants. - Minified generated code when converting SVG files to React. - [web] Added ability to hide/display map abbreviations. --- diplomacy/web/src/gui/maps/common/common.js | 83 +++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 diplomacy/web/src/gui/maps/common/common.js (limited to 'diplomacy/web/src/gui/maps/common/common.js') diff --git a/diplomacy/web/src/gui/maps/common/common.js b/diplomacy/web/src/gui/maps/common/common.js new file mode 100644 index 0000000..750f786 --- /dev/null +++ b/diplomacy/web/src/gui/maps/common/common.js @@ -0,0 +1,83 @@ +// ============================================================================== +// Copyright (C) 2019 - Philip Paquette, Steven Bocco +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU Affero General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +// details. +// +// You should have received a copy of the GNU Affero General Public License along +// with this program. If not, see . +// ============================================================================== + +export const ARMY = 'Army'; +export const FLEET = 'Fleet'; + +export function offset(floatString, offset) { + return "" + (parseFloat(floatString) + offset); +} + +export function setInfluence(classes, mapData, loc, power_name) { + const province = mapData.getProvince(loc); + if (!province) + throw new Error(`Unable to find province ${loc}`); + if (!['LAND', 'COAST'].includes(province.type)) + return; + const id = province.getID(classes); + if (!id) + throw new Error(`Unable to find SVG path for loc ${id}`); + classes[id] = power_name ? power_name.toLowerCase() : 'nopower'; +} + +export function getClickedID(event) { + let node = event.target; + if (!node.id && node.parentNode.id && node.parentNode.tagName === 'g') + node = node.parentNode; + let id = node.id; + return id ? id.substr(0, 3) : null; +} + +export function parseLocation(txt) { + if (txt.length > 2 && txt[1] === ' ' && ['A', 'F'].includes(txt[0])) + return txt.substr(2); + return txt; +} + +export function centerSymbolAroundUnit(coordinates, symbolSizes, loc, isDislodged, symbol) { + const key = isDislodged ? 'disl' : 'unit'; + const unitKey = ARMY; + const [unit_x, unit_y] = coordinates[loc][key]; + const unit_height = symbolSizes[unitKey].height; + const unit_width = symbolSizes[unitKey].width; + const symbol_height = symbolSizes[symbol].height; + const symbol_width = symbolSizes[symbol].width; + return [ + `${(parseFloat(unit_x) + parseFloat(unit_width) / 2 - parseFloat(symbol_width) / 2)}`, + `${(parseFloat(unit_y) + parseFloat(unit_height) / 2 - parseFloat(symbol_height) / 2)}` + ]; +} + +export function getUnitCenter(coordinates, symbolSizes, loc, isDislodged) { + const key = isDislodged ? 'disl' : 'unit'; + const unitKey = ARMY; + const [unit_x, unit_y] = coordinates[loc][key]; + const unit_height = symbolSizes[unitKey].height; + const unit_width = symbolSizes[unitKey].width; + return [ + `${parseFloat(unit_x) + parseFloat(unit_width) / 2}`, + `${parseFloat(unit_y) + parseFloat(unit_height) / 2}` + ]; +} + +export function plainStrokeWidth(symbolSizes) { + return parseFloat(symbolSizes.Stroke.height); +} + +export function coloredStrokeWidth(symbolSizes) { + return parseFloat(symbolSizes.Stroke.width); +} -- cgit v1.2.3