diff --git a/doc/prod/historique/traque_14_12_25/compte_rendu.txt b/doc/prod/historique/traque_14_12_25/compte_rendu.txt index 3ba4aa2..ff24559 100644 --- a/doc/prod/historique/traque_14_12_25/compte_rendu.txt +++ b/doc/prod/historique/traque_14_12_25/compte_rendu.txt @@ -11,9 +11,9 @@ Problèmes [ ] Une équipe perdait sans arrêt la connection avec le serveur [ ] La position en arrière plan, téléphone éteint par exemple, n'avait pas l'air de fonctionner (une équipe n'avait pas de notif) [ ] La photo d'une des équipes ne parvenait pas jusqu'au serveur. Tout semblait normal pour l'équipe. -[ ] Le focus sur une équipe dans la page principale des admins est à revoir. Par exemple, le zoom seul devrait désactiver le focus +[x] Le focus sur une équipe dans la page principale des admins est à revoir. Par exemple, le zoom seul devrait désactiver le focus automatique. -[ ] Il est pas évident de voir qu'elles équipes sont encore en jeu sur la page principale admin. Notamment, on voudrait que les +[x] Il est pas évident de voir qu'elles équipes sont encore en jeu sur la page principale admin. Notamment, on voudrait que les voyants des équipes encore en jeu soit mis en avant. [x] La visibilité des éléments de la map en calque satellite est mauvaise. Il faut revoir les couleurs. [ ] Les zones polygonales s'affichent mal sur la version prod de l'app mobile. Les anciennes n'ont pas l'air de disparaitre. diff --git a/doc/prod/historique/traque_20_09_25/compte_rendu.txt b/doc/prod/historique/traque_20_09_25/compte_rendu.txt index f9e6f7a..c8a3c39 100644 --- a/doc/prod/historique/traque_20_09_25/compte_rendu.txt +++ b/doc/prod/historique/traque_20_09_25/compte_rendu.txt @@ -16,9 +16,9 @@ qu'un seul téléphone connecté. [ ] La photo d'une des équipes ne parvenait pas jusqu'au serveur. Tout semblait normal pour l'équipe. [ ] Il y a apparement eu un problème de synchronisation de l'affichage entre admin concernant les zones de départs. Il s'est résolu de lui même. Peut être un problème passager de connection. -[ ] Le focus sur une équipe dans la page principale des admins est à revoir. Par exemple, le zoom seul devrait désactiver le focus +[x] Le focus sur une équipe dans la page principale des admins est à revoir. Par exemple, le zoom seul devrait désactiver le focus automatique. -[ ] Il est pas évident de voir qu'elles équipes sont encore en jeu sur la page principale admin. Notamment, on voudrait que les +[x] Il est pas évident de voir qu'elles équipes sont encore en jeu sur la page principale admin. Notamment, on voudrait que les voyants des équipes encore en jeu soit mis en avant. [x] La visibilité des éléments de la map en calque satellite est mauvaise. Il faut revoir les couleurs. [ ] Les zones polygonales s'affichent mal sur la version prod de l'app mobile. Les anciennes n'ont pas l'air de disparaitre. diff --git a/traque-app/app.json b/traque-app/app.json index 99bd0db..0d6bf8e 100644 --- a/traque-app/app.json +++ b/traque-app/app.json @@ -29,7 +29,7 @@ "android" ], "android": { - "package": "com.anonymous.traqueapp", + "package": "net.rezel.traque", "permissions": [ "ACCESS_FINE_LOCATION", "ACCESS_COARSE_LOCATION", @@ -48,7 +48,7 @@ } }, "ios": { - "bundleIdentifier": "com.anonymous.traqueapp", + "bundleIdentifier": "net.rezel.traque", "infoPlist": { "UIBackgroundModes": [ "location" diff --git a/traque-app/app/display.js b/traque-app/app/display.js index b2d8fb6..f1f1088 100644 --- a/traque-app/app/display.js +++ b/traque-app/app/display.js @@ -131,7 +131,7 @@ export default function Display() { if (!Number.isInteger(time)) return "Inconnue"; if (time < 0) time = 0; const hours = Math.floor(time / 3600); - const minutes = Math.floor(time / 60); + const minutes = Math.floor(time / 60 % 60); const seconds = Math.floor(time % 60); return String(hours).padStart(2,"0") + ":" + String(minutes).padStart(2,"0") + ":" + String(seconds).padStart(2,"0"); } diff --git a/traque-app/context/socketContext.jsx b/traque-app/context/socketContext.jsx index 9e24033..ebd3899 100644 --- a/traque-app/context/socketContext.jsx +++ b/traque-app/context/socketContext.jsx @@ -1,9 +1,8 @@ import { createContext, useContext, useMemo } from "react"; import { io } from "socket.io-client"; -import { URLS } from "../util/urls" -const SOCKET_URL = `wss://${URLS.HOST}/player`; -const SERVER_URL = `https://${URLS.HOST}/back`; +const SOCKET_URL = `ws://172.16.1.180/player`; +const SERVER_URL = `http://172.16.1.180/back`; export const teamSocket = io(SOCKET_URL, { path: "/back/socket.io", diff --git a/traque-app/util/urls.js b/traque-app/util/urls.js deleted file mode 100644 index faf3e06..0000000 --- a/traque-app/util/urls.js +++ /dev/null @@ -1,3 +0,0 @@ -export const URLS = { - HOST: 'traque.rezel.net' -} diff --git a/traque-front/app/admin/components/liveMap.jsx b/traque-front/app/admin/components/liveMap.jsx index 1186604..e1908c2 100644 --- a/traque-front/app/admin/components/liveMap.jsx +++ b/traque-front/app/admin/components/liveMap.jsx @@ -10,7 +10,6 @@ export default function LiveMap({ selectedTeamId, onSelected, isFocusing, setIsF const [timeLeftNextZone, setTimeLeftNextZone] = useState(null); const [isFullScreen, setIsFullScreen] = useState(false); - useEffect(() => { if (nextZoneDate) { const updateTime = () => { @@ -38,13 +37,13 @@ export default function LiveMap({ selectedTeamId, onSelected, isFocusing, setIsF switch (zoneType) { case ZoneTypes.CIRCLE: return (<> - - + + ); case ZoneTypes.POLYGON: return (<> - - + + ); default: return null; @@ -55,14 +54,14 @@ export default function LiveMap({ selectedTeamId, onSelected, isFocusing, setIsF
{isFocusing && } - setIsFocusing(false)}/> + setIsFocusing(false)} onWheel={() => setIsFocusing(false)} /> {teams.map((team) => team && - + - - onSelected(team.id)} display={!team.captured}> + + onSelected(team.id)} display={!team.captured}> )} diff --git a/traque-front/app/admin/components/teamViewer.jsx b/traque-front/app/admin/components/teamViewer.jsx index d4b561d..8a0d4db 100644 --- a/traque-front/app/admin/components/teamViewer.jsx +++ b/traque-front/app/admin/components/teamViewer.jsx @@ -1,6 +1,7 @@ import { List } from '@/components/list'; import useAdmin from '@/hook/useAdmin'; import { getStatus } from '@/util/functions'; +import { useMemo } from 'react'; function TeamViewerItem({ team }) { const { gameState } = useAdmin(); @@ -8,7 +9,7 @@ function TeamViewerItem({ team }) { const NO_VALUE = "XX"; return ( -
+
0 ? "green" : "red"}.png`} className="w-4 h-4" /> @@ -27,8 +28,16 @@ function TeamViewerItem({ team }) { export default function TeamViewer({selectedTeamId, onSelected}) { const { teams } = useAdmin(); + // Uncaptured teams first + const sortedTeams = useMemo(() => { + return [...teams].sort((a,b) => { + if (a.captured === b.captured) return 0; + return a.captured ? 1 : -1; + }); + }, [teams]); + return ( - + {(team) => ( )} diff --git a/traque-front/components/layer.jsx b/traque-front/components/layer.jsx index fd61bce..3ef4da4 100644 --- a/traque-front/components/layer.jsx +++ b/traque-front/components/layer.jsx @@ -3,13 +3,18 @@ import { Marker, Tooltip, CircleMarker, Circle, Polygon, useMap } from "react-le import "leaflet/dist/leaflet.css"; import 'leaflet-polylinedecorator'; -export function Node({position, nodeSize = 5, color = 'black', display = true}) { +export function Node({position, color = 'black', display = true}) { + const nodeSize = 5; + const fillOpacity = 1; + return ( - display && position && + display && position && ); } -export function Label({position, label, color, size = 24, display = true}) { +export function Label({position, label = "", color = "black", display = true}) { + const size = 24; + const labelIcon = L.divIcon({ html: `
${label || ""}
`, + ">${label}
`, className: 'custom-label-icon', iconSize: [size, size], iconAnchor: [size / 2, size / 2] @@ -29,13 +34,19 @@ export function Label({position, label, color, size = 24, display = true}) { ); } -export function Tag({text, display = true}) { +export function Tag({text = "", display = true}) { + const offset = [0.5, -15]; + const opacity = 1; + return ( - display && {text || ""} + display && {text} ); } -export function CircleZone({circle, color, opacity = '0.1', border = 3, display = true, children}) { +export function CircleZone({circle, color = "black", display = true, children}) { + const opacity = '0.1'; + const border = 3; + return ( display && circle && @@ -44,7 +55,10 @@ export function CircleZone({circle, color, opacity = '0.1', border = 3, display ); } -export function PolygonZone({polygon, color, opacity = '0.1', border = 3, display = true, children}) { +export function PolygonZone({polygon, color = "black", display = true, children}) { + const opacity = '0.1'; + const border = 3; + return ( display && polygon && polygon.length >= 3 && @@ -53,7 +67,7 @@ export function PolygonZone({polygon, color, opacity = '0.1', border = 3, displa ); } -export function Position({position, color, onClick, display = true, children}) { +export function Position({position, color = "blue", onClick = () => {}, display = true, children}) { const positionIcon = new L.Icon({ iconUrl: `/icons/marker/${color}.png`, @@ -71,7 +85,10 @@ export function Position({position, color, onClick, display = true, children}) { ); } -export function Arrow({ pos1, pos2, color = 'black', weight = 5, arrowSize = 20, insetPixels = 25, display = true }) { +export function Arrow({ pos1, pos2, color = 'black', display = true }) { + const weight = 5; + const arrowSize = 20; + const insetPixels = 25; const map = useMap(); const [insetPositions, setInsetPositions] = useState(null); diff --git a/traque-front/components/map.jsx b/traque-front/components/map.jsx index 2ae445d..f181106 100644 --- a/traque-front/components/map.jsx +++ b/traque-front/components/map.jsx @@ -15,7 +15,7 @@ export function MapPan({center, zoom, animate=false}) { return null; } -export function MapEventListener({ onLeftClick, onRightClick, onMouseMove, onDragStart }) { +export function MapEventListener({ onLeftClick, onRightClick, onMouseMove, onDragStart, onWheel }) { const map = useMap(); // TODO use useMapEvents instead of this + detect when zoom @@ -93,6 +93,17 @@ export function MapEventListener({ onLeftClick, onRightClick, onMouseMove, onDra map.off('dragstart', onDragStart); } }, [onDragStart]); + + useEffect(() => { + if (!onWheel) return; + + const container = map.getContainer(); + container.addEventListener('wheel', onWheel); + + return () => { + container.removeEventListener('wheel', onWheel); + } + }, [onWheel]); // Prevent right click context menu useEffect(() => { diff --git a/traque-front/util/configurations.js b/traque-front/util/configurations.js index 645f60b..69e6394 100644 --- a/traque-front/util/configurations.js +++ b/traque-front/util/configurations.js @@ -12,11 +12,21 @@ export const mapZooms = { export const mapStyles = { default: { url: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", - attribution: '© OpenStreetMap' + attribution: '© OpenStreetMap', + arrowColor: "black", + currentZoneColor: "red", + nextZoneColor: "green", + placementZoneColor: "blue", + playerColor: "blue" }, satellite: { url: "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}", - attribution: 'Tiles © Esri' + attribution: 'Tiles © Esri', + arrowColor: "white", + currentZoneColor: "red", + nextZoneColor: "#0F0", + placementZoneColor: "#0FF", + playerColor: "blue" }, }