{"version":3,"sources":["fonts/Orbitron/Orbitron-VariableFont_wght.ttf","metadata/types.ts","metadata/agent-ids.ts","metadata/location-data.ts","room/ButtonGroup.tsx","room/game-context.tsx","room/redux-hook-adapters.tsx","metadata/space-station-data.ts","metadata/index.ts","room/modal/modal.tsx","room/actions.ts","room/modal/TriangleButton.tsx","room/modal/SpaceStationModal.tsx","room/SpaceStation.tsx","room/modal/MessageModal.tsx","room/ResourcePanel.tsx","room/modal/RebalanceResourceModal.tsx","time-format-utils.ts","room/modal/EndGameStatsModal.tsx","room/modal/AbortGameModal.tsx","room/modal/ConfirmMoveModal.tsx","room/modal/SuccessMissionModal.tsx","room/Clock.tsx","room/modal/ConfirmAbortMissionModal.tsx","room/modal/WaitModal.tsx","room/modal/OutOfResourceModal.tsx","room/modal/TimeOutModal.tsx","room/modal/OutOfO2Modal.tsx","room/GameBoard.tsx","config.ts","room/index.tsx","admin/Login.tsx","axios-client.ts","admin/styles.tsx","admin/RoomListPage.tsx","admin/LobbyListPage.tsx","admin/index.tsx","join/index.tsx","Landing.tsx","App.tsx","index.tsx"],"names":["module","exports","SocketMessages","LobbyStatus","LocationType","RescueResource","GameStatus","GEMINI_1","GEMINI_2","metadata","location","id","type","BeaconStar","spaceStationName","neighbors","pixelPosition","left","top","HyperGate","TimePortal","ButtonGroupBackground","styled","div","props","position","NextMoveButton","selected","Gemini1Button","Gemini2Button","Gemini12Button","locationData","onMouseEnter","setShowTimePortalRoute","onMouseLeave","shipReachability","IDs","data-testid","gemini1NextMove","gemini2NextMove","onClick","setGemini1NextMove","setGemini2NextMove","context","createContext","useSelector","selector","useContext","GameContext","gameState","useDispatch","action","socket","emit","Types","Action","JSON","stringify","locationMetadata","spaceStationData","message","asset","note","technology","title","paragraphs","text","sideNote","ModalBackground","undefined","zIndex","BaseModalBackground","BaseModalImageBackground","backgroundImage","process","BaseModalTextBackground","BaseModal","Modal","ExtraModal","StyledModal","Header","Body","StyledButton","DismissButton","onClose","className","dropOffRescueResource","data","payload","transferEnergyCells","transferLifeSupportPacks","transferRescueResource","disabled","StationName","TextInfo","ModalWrapper","Column","SupplyGroup","Resource","LeftPanelTriangle","Triangle","Divider","StationPanel","supplyReceiverId","resourceReceiverId","state","station","spaceStations","gemini_1","spaceships","gemini_2","dispatch","showResources","timePortalRoute","length","map","paragraph","i","key","number","energyCells","lifeSupportPacks","style","transform","from","to","width","margin","rescueResources","resource","canPickUp","SpaceshipName","h1","RightPanelTriangle","ResourceRightAlign","Gemini1Panel","Gemini2Panel","spaceStationLocation","gemini1AtStation","gemini2AtStation","StationInformationButton","button","visited","spaceStation","StationPosition","useState","showModal","setShowModal","SpaceStationModal","Note","StyledExtraModal","StyledDismissButton","StyledDismissButtonForImageModal","Number","Gemini1Energy","Gemini2Energy","Gemini1LifeSupport","Gemini2LifeSupport","Time","Gemini1Resource","Gemini2Resource","gemini1","gemini2","float","time","Gemini","img","ResourceName","ResourceCount","ResourceCountInput","input","incorrect","LeftPanelInput","handleKeyDown","onSubmit","setIncorrectFunction","event","handleInput","_","setStateFunction","target","value","trimmed","replace","verifyInput","max","count","parseInt","NaN","energyCellsInput","setEnergyCellsInput","energyCellsIncorrect","setEnergyCellsIncorrect","lifeSupportPacksInput","setLifeSupportPacksInput","lifeSupportPacksIncorrect","setLifeSupportPacksIncorrect","energyCellSubmit","lifeSupportPacksSubmit","src","placeholder","onChange","onKeyDown","RightPanelInput","pad","n","digits","copy","Math","floor","formatTime","minutes","seconds","localeTimeString","timeMS","Date","toLocaleString","Wrapper","Title","ColumnHalf","DataPoint","StatName","StatValue","stats","gameStats","status","MissionSucceeded","scientistsRemaining","endTime","startTime","accumulatedTime","dropOffTimes","O2ReplacementCells","OxygenRepairTeam","WaterRepairTeam","FoodRepairTeam","EndGameStatsModal","GeminiImage","ActionButton","ConfirmButton","CancelButton","day","nextMoves","travelTogether","costs","cost","fontFamily","color","moveSpaceship","SuccessModalBackground","Clock","countdown","gameDuration","duration","AbortButton","marginTop","WaitMessage","GameBoard","GeminiShip","Gemini1","Gemini2","Gemini12","ConfirmMoveButton","noMove","MoveResourceButton","TerminateGameButton","canvasRef","useRef","messages","setMessages","showRebalanceModal","setShowRebalanceModal","showConfirmMoveModal","setShowConfirmMoveModal","showAbortMissionModal","setShowAbortMissionModal","showTimePortalRoute","useLayoutEffect","useEffect","concat","selectedMove","gemini1CurrentLocation","gemini2CurrentLocation","gemini1Location","gemini2Location","position1","position2","canRebalanceResource","popMessageModal","remainingMessages","slice","pop","drawLine","start","end","beginPath","moveTo","lineTo","strokeStyle","lineWidth","stroke","drawLineWithRoute","currentLocation","forEach","point","canvas","current","getContext","clearRect","Object","entries","index","ButtonGroup","SpaceStation","MessageModal","RebalanceResourceModal","NotStarted","WaitModal","MissionAborted","AbortGameModal","ConfirmMoveModal","ResourcePanel","ref","height","SuccessMissionModal","OutOfResource","OutOfResourceModal","MissionTimeOut","TimeOutModal","OxygenProblem","OutOfO2Modal","dotenv","config","API_BASE_URL","GlobalStyle","createGlobalStyle","SocketError","queryString","parse","search","lobby","room","setSocket","setGameState","setGameDuration","a","newSocket","SocketIOClient","path","query","on","StateUpdate","TimeUpdate","d","setup","Provider","Global","Jumbotron","username","password","handleUsernameChange","bind","handlePasswordChange","handleFormSubmit","this","setState","e","error","axios","post","localStorage","setItem","token","history","push","response","textAlign","marginBottom","InputGroup","Prepend","Text","backgroundColor","FormControl","Button","block","React","Component","client","create","interceptors","use","res","err","alert","window","href","StyledLink","Link","PortalGlobal","NavBar","Navbar","fixed","bg","variant","Nav","removeItem","LobbyControls","span","code","useParams","setDuration","countdownMinutes","setCountdownMinutes","countdownSeconds","setCountdownSeconds","createTime","setCreateTime","rooms","setRooms","setStatus","notFound","setNotFound","startGameStatus","setStartGameStatus","configCountdownStatus","setConfigCountdownStatus","restartModal","setRestartModal","stateRef","setGameCountdown","countdownInSeconds","put","headers","Authorization","getItem","then","setTimeout","catch","get","LobbyUpdate","keys","updatedRooms","newRooms","name","Badge","fontSize","size","Waiting","isNaN","isInteger","onFocus","select","min","step","lines","reduce","accumulator","strings","MedicalRepairTeam","join","blob","Blob","endings","fileSave","saveAs","values","Started","Table","striped","bordered","hover","game","padding","Finished","show","onHide","closeButton","Footer","TableCell","td","HighlightableRow","tr","highlight","useHistory","lobbies","setLobbies","deleteModal","setDeleteModal","newLobby","setNewLobby","newLobbyDisplayTimeout","setNewLobbyDisplayTimeout","loadLobbies","clearTimeout","timeout","timeString","delete","rel","integrity","crossOrigin","match","url","component","RoomListPage","exact","LobbyListPage","Login","roomName","setRoomName","lobbyCode","setLobbyCode","showReconnectModal","setShowReconnectModal","setError","joinRoom","redirectToRoom","Row","Col","Room","Admin","Join","Landing","ReactDOM","render","StrictMode","App","document","getElementById"],"mappings":"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","file":"static/js/main.078faa22.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/Orbitron-VariableFont_wght.c641d3e9.ttf\";","export enum SocketMessages {\n StateUpdate = '@GameUpdate',\n Action = '@GameAction',\n TimeUpdate = '@TimeUpdate',\n LobbyUpdate = '@LobbyUpdate',\n}\n\nexport enum LobbyStatus {\n Waiting = 'Waiting',\n Started = 'In Progress',\n Finished = 'Ended',\n}\n\nexport interface LobbyState {\n status: LobbyStatus,\n gameDuration: GameDuration,\n updatedRooms: {\n [name: string]: GameState\n }\n};\n\nexport enum LocationType {\n BeaconStar,\n HyperGate,\n TimePortal,\n};\n\nexport type PixelPosition = {\n left: number,\n top: number,\n}\n\nexport default interface Location {\n id: string,\n type: LocationType,\n spaceStationName?: string,\n};\n\nexport type LocationMetadata = { [id: string]: {\n location: Location,\n neighbors: string[],\n pixelPosition: { left: number, top: number }\n}};\n\nexport type SpaceStationMetadata = { [id: string]: {\n location: string,\n message: Message,\n}}\n\nexport interface SpaceshipNextMoves {\n [location: string]: { [id: string]: {\n cost: {\n energyCells: number,\n lifeSupportPacks: number,\n }\n }}\n};\n\nexport enum RescueResource {\n O2ReplacementCells = 'Cellules de remplacement d’O2',\n FoodRepairTeam = 'Équipe de restauration alimentaire',\n WaterRepairTeam = 'Équipe de restauration de l’eau',\n MedicalRepairTeam = 'Équipe médicale',\n OxygenRepairTeam = 'Équipe de restauration de l’oxygène',\n AITechnology = 'Technologie d’IA',\n};\n\nexport interface PlainSpaceship {\n location: string,\n energyCells: number,\n lifeSupportPacks: number,\n rescueResources: RescueResource[],\n timePortalRoute: string[],\n};\n\nexport interface PlainSpaceStation {\n visited: boolean,\n location: string,\n energyCells: number,\n lifeSupportPacks: number,\n rescueResources: RescueResource[],\n canPickUp: { [resource: string]: boolean },\n};\n\nexport interface Message {\n asset?: string,\n note?: string,\n paragraphs: {\n text: string,\n number?: number,\n }[],\n sideNote?: string,\n technology?: string,\n title: string,\n};\n\nexport enum GameStatus {\n NotStarted = 'Waiting',\n Started = 'Started',\n MissionSucceeded = 'Mission Complete',\n MissionTimeOut = 'Mission Time Out',\n MissionAborted = 'Mission Aborted',\n OutOfResource = 'Out Of Resources',\n OxygenProblem = 'Out of Oxygen',\n};\n\nexport interface GameState {\n spaceships: {\n [id: string]: PlainSpaceship,\n },\n nextMoves: SpaceshipNextMoves,\n spaceStations: {\n [id: string]: PlainSpaceStation,\n },\n messages: Message[],\n time: number,\n accumulatedTime: number,\n startTime: number,\n endTime?: number,\n gameStats: {\n scientistsRemaining: number,\n dropOffTimes: {\n [resource: string]: number\n }\n },\n status: GameStatus,\n};\n\nexport interface GameDuration {\n countdown: number,\n duration: number,\n}\n\nexport interface Transfer {\n from: string,\n to: string,\n}\n\nexport interface TransferWithCount extends Transfer {\n count: number,\n}\n\nexport interface TransferWithResourceType extends Transfer {\n type: RescueResource,\n}\n\nexport const MOVE_SPACESHIP = '@GameAction/moveSpaceship';\nexport interface MoveSpaceshipAction {\n type: string,\n payload: { [id: string]: string },\n};\n\n\nexport const PICK_UP_SUPPLY_RESOURCE = '@GameAction/pickUpSupplyResource';\nexport interface PickUpSupplyResourceAction {\n type: string,\n payload: Transfer,\n};\n\nexport const PICK_UP_RESCUE_RESOURCE = '@GameAction/pickUpRescueResource';\nexport interface PickUpRescueResourceAction {\n type: string,\n payload: TransferWithResourceType,\n};\n\nexport const DROP_OFF_RESCUE_RESOURCE = '@GameAction/dropOffRescueResource';\nexport interface DropOffRescueResourceAction {\n type: string,\n payload: TransferWithResourceType,\n};\n\nexport const TRANSFER_ENERGY_CELLS = '@GameAction/transferEnergyCells';\nexport interface TransferEnergyCellsAction {\n type: string,\n payload: TransferWithCount,\n};\n\nexport const TRANSFER_LIFE_SUPPORT_PACKS = '@GameAction/transferLifeSupportPacks';\nexport interface TransferLifeSupportPacksAction {\n type: string,\n payload: TransferWithCount,\n};\n\nexport const TRANSFER_RESCUE_RESOURCE = '@GameAction/transferRescueResource';\nexport interface TransferRescueResourceAction {\n type: string,\n payload: TransferWithResourceType,\n};\n\nexport const ABORT_MISSION = '@GameAction/abortMission';\nexport interface AbortMissionAction {\n type: string,\n};\n\nexport type GameAction = MoveSpaceshipAction\n | PickUpSupplyResourceAction\n | PickUpRescueResourceAction\n | DropOffRescueResourceAction\n | TransferEnergyCellsAction\n | TransferLifeSupportPacksAction\n | TransferRescueResourceAction\n | AbortMissionAction\n;\n","export const GEMINI_1 = 'gemini_1';\nexport const GEMINI_2 = 'gemini_2';\nexport const SAGITTARIUS = 'sagittaire';\nexport const CASSIOPEIA = 'cassiopée';\nexport const ANDROMEDA = 'andromède';\nexport const ORION = 'orion';\nexport const AQUARIUS = 'verseau';\nexport const CAPRICORN = 'capricorne';\nexport const BOREALIS = 'borealis';","import { LocationType, LocationMetadata } from './types';\n\nconst metadata: LocationMetadata = {\n 'sagittaire': {\n location: {\n id: 'sagittaire',\n type: LocationType.BeaconStar,\n spaceStationName: 'sagittaire',\n },\n neighbors: [\n 't1',\n 'b3',\n ],\n pixelPosition: { left: 487, top: 594 },\n },\n 'cassiopée': {\n location: {\n id: 'cassiopée',\n type: LocationType.BeaconStar,\n spaceStationName: 'cassiopée',\n },\n neighbors: [\n 'b6',\n 'b35',\n 'h2',\n ],\n pixelPosition: { left: 803, top: 695 },\n },\n 'andromède': {\n location: {\n id: 'andromède',\n type: LocationType.BeaconStar,\n spaceStationName: 'andromède',\n },\n neighbors: [\n 'b27',\n 'h4',\n ],\n pixelPosition: { left: 1027, top: 184 },\n },\n 'b2': {\n location: {\n id: 'b2',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b3',\n 'b21',\n ],\n pixelPosition: { left: 435, top: 417 },\n },\n 'b3': {\n location: {\n id: 'b3',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b2',\n 'b4',\n 'h1',\n 'sagittaire',\n ],\n pixelPosition: { left: 593, top: 511 },\n },\n 'b4': {\n location: {\n id: 'b4',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b3',\n 'b19',\n 'b35',\n 'b16',\n ],\n pixelPosition: { left: 657, top: 592 },\n },\n 'b6': {\n location: {\n id: 'b6',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b7',\n 'cassiopée',\n ],\n pixelPosition: { left: 928, top: 737 },\n },\n 'b8': {\n location: {\n id: 'b8',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b25',\n 'b34',\n ],\n pixelPosition: { left: 846, top: 237 },\n },\n 'b7': {\n location: {\n id: 'b7',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b6',\n 't5',\n ],\n pixelPosition: { left: 1088, top: 744 },\n },\n 'b9': {\n location: {\n id: 'b9',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b10',\n 't5',\n ],\n pixelPosition: { left: 1289, top: 509 },\n },\n 'b10': {\n location: {\n id: 'b10',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b9',\n 'b11',\n 'b33',\n ],\n pixelPosition: { left: 1267, top: 409 },\n },\n 'b11': {\n location: {\n id: 'b11',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b10',\n 'b33',\n 't2',\n ],\n pixelPosition: { left: 1297, top: 238 },\n },\n 'b12': {\n location: {\n id: 'b12',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b18',\n 'b20',\n 'b30',\n ],\n pixelPosition: { left: 639, top: 279 },\n },\n 'b13': {\n location: {\n id: 'b13',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b14',\n 't3',\n ],\n pixelPosition: { left: 956, top: 424 },\n },\n 'b14': {\n location: {\n id: 'b14',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b13',\n 'b17',\n 'b32',\n 'b15',\n 'h2',\n ],\n pixelPosition: { left: 1003, top: 509 },\n },\n 'b15': {\n location: {\n id: 'b15',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b14',\n 't5',\n ],\n pixelPosition: { left: 1084, top: 584 },\n },\n 'b16': {\n location: {\n id: 'b16',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b4',\n 'b17',\n ],\n pixelPosition: { left: 780, top: 534 },\n },\n 'b17': {\n location: {\n id: 'b17',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b14',\n 'b16',\n ],\n pixelPosition: { left: 875, top: 533 },\n },\n 'b18': {\n location: {\n id: 'b18',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b12',\n 'b34',\n ],\n pixelPosition: { left: 744, top: 229 },\n },\n 'b19': {\n location: {\n id: 'b19',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b4',\n 't3',\n ],\n pixelPosition: { left: 691, top: 475 },\n },\n 'b20': {\n location: {\n id: 'b20',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b12',\n 't3',\n ],\n pixelPosition: { left: 722, top: 348 },\n },\n 'b21': {\n location: {\n id: 'b21',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b2',\n 't4',\n ],\n pixelPosition: { left: 436, top: 237 },\n },\n 'b23': {\n location: {\n id: 'b23',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'h3',\n 't4',\n ],\n pixelPosition: { left: 660, top: 33 },\n },\n 'b24': {\n location: {\n id: 'b24',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b25',\n 'b28',\n 'h3',\n ],\n pixelPosition: { left: 878, top: 102 },\n },\n 'b25': {\n location: {\n id: 'b25',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b8',\n 'b24',\n 'b29',\n ],\n pixelPosition: { left: 947, top: 235 },\n },\n 'b27': {\n location: {\n id: 'b27',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'andromède',\n 't2',\n ],\n pixelPosition: { left: 1152, top: 171 },\n },\n 'b28': {\n location: {\n id: 'b28',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b24',\n 't2',\n ],\n pixelPosition: { left: 984, top: 37 },\n },\n 'b29': {\n location: {\n id: 'b29',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b25',\n 'b33',\n ],\n pixelPosition: { left: 1015, top: 338 },\n },\n 'b30': {\n location: {\n id: 'b30',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b12',\n 'b31',\n ],\n pixelPosition: { left: 659, top: 135 },\n },\n 'b31': {\n location: {\n id: 'b31',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b30',\n 't4',\n ],\n pixelPosition: { left: 562, top: 201 },\n },\n 'b32': {\n location: {\n id: 'b32',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b14',\n 'b33',\n ],\n pixelPosition: { left: 1101, top: 489 },\n },\n 'b33': {\n location: {\n id: 'b33',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b32',\n 'b29',\n 'b10',\n 'b11',\n 'h4',\n ],\n pixelPosition: { left: 1141, top: 400 },\n },\n 'b34': {\n location: {\n id: 'b34',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b18',\n 'b8',\n ],\n pixelPosition: { left: 787, top: 144 },\n },\n 'b35': {\n location: {\n id: 'b35',\n type: LocationType.BeaconStar,\n },\n neighbors: [\n 'b4',\n 'cassiopée',\n ],\n pixelPosition: { left: 677, top: 688 },\n },\n 'h1': {\n location: {\n id: 'h1',\n type: LocationType.HyperGate,\n },\n neighbors: [\n 'h2',\n 'h3',\n 'h4',\n 'b3',\n 't4',\n 't3',\n ],\n pixelPosition: { left: 625, top: 397 },\n },\n 'h2': {\n location: {\n id: 'h2',\n type: LocationType.HyperGate,\n },\n neighbors: [\n 'h1',\n 'h3',\n 'h4',\n 'b14',\n 'cassiopée',\n 't5',\n ],\n pixelPosition: { left: 932, top: 637 },\n },\n 'h3': {\n location: {\n id: 'h3',\n type: LocationType.HyperGate,\n },\n neighbors: [\n 'b23',\n 'b24',\n 'h1',\n 'h2',\n 'h4',\n ],\n pixelPosition: { left: 794, top: 50 },\n },\n 'h4': {\n location: {\n id: 'h4',\n type: LocationType.HyperGate,\n },\n neighbors: [\n 'h1',\n 'h2',\n 'h3',\n 'andromède',\n 't2',\n 'b33',\n ],\n pixelPosition: { left: 1132, top: 310 },\n },\n 't1': {\n location: {\n id: 't1',\n type: LocationType.TimePortal,\n },\n neighbors: [\n 'sagittaire',\n 't2',\n 't3',\n 't4',\n 't5',\n ],\n pixelPosition: { left: 569, top: 731 },\n },\n 't2': {\n location: {\n id: 't2',\n type: LocationType.TimePortal,\n spaceStationName: 'orion',\n },\n neighbors: [\n 'b11',\n 'b27',\n 'b28',\n 'h4',\n 't1',\n 't3',\n 't4',\n 't5',\n ],\n pixelPosition: { left: 1246, top: 110 },\n },\n 't3': {\n location: {\n id: 't3',\n type: LocationType.TimePortal,\n spaceStationName: 'verseau',\n },\n neighbors: [\n 'b20',\n 'b19',\n 'b13',\n 'h1',\n 't1',\n 't2',\n 't4',\n 't5',\n ],\n pixelPosition: { left: 849, top: 365 },\n },\n 't4': {\n location: {\n id: 't4',\n type: LocationType.TimePortal,\n spaceStationName: 'capricorne',\n },\n neighbors: [\n 'b21',\n 'b31',\n 'b23',\n 'h1',\n 't1',\n 't2',\n 't3',\n 't5',\n ],\n pixelPosition: { left: 505, top: 110 },\n },\n 't5': {\n location: {\n id: 't5',\n type: LocationType.TimePortal,\n spaceStationName: 'borealis',\n },\n neighbors: [\n 'b7',\n 'b15',\n 'b9',\n 'h2',\n 't1',\n 't2',\n 't3',\n 't4',\n ],\n pixelPosition: { left: 1254, top: 695 },\n },\n}\n\nexport default metadata;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { PixelPosition } from '../metadata/types';\nimport * as IDs from '../metadata/agent-ids';\nimport locationData from '../metadata/location-data';\n\nconst ButtonGroupBackground = styled.div`\n position: absolute;\n background-color: rgba(18, 92, 112, 0.8);\n width: 60px;\n height: 20px;\n line-height: 20px;\n border-radius: 25%;\n top: ${(props: { position: PixelPosition }) => `${props.position.top + 25}px`};\n left: ${(props: { position: PixelPosition }) => `${props.position.left - 28}px`};\n text-align: center;\n`;\n\nconst NextMoveButton = styled.div`\n width: 12px;\n height: 12px;\n display: inline-block;\n margin: 0 3px;\n box-shadow: ${(props: { selected: boolean }) => \n props.selected ?\n '0px 0px 10px 2px #FFFFFF': 'none'\n };\n`;\n\nconst Gemini1Button = styled(NextMoveButton)`\n background-color: #fcc409;\n border-radius: 50%;\n &:hover {\n cursor: pointer;\n }\n`;\nconst Gemini2Button = styled(NextMoveButton)`\n background-color: #46b3e8;\n border-radius: 50%;\n &:hover {\n cursor: pointer;\n }\n`;\nconst Gemini12Button = styled(NextMoveButton)`\n background-image: linear-gradient(135deg, #fcc409 50%, #46b3e8 50%);\n border-radius: 50%;\n &:hover {\n cursor: pointer;\n }\n`;\n\ninterface Props {\n id: string,\n shipReachability: { [id: string]: {\n cost: {\n energyCells: number,\n lifeSupportPacks: number,\n }\n }},\n gemini1NextMove: boolean,\n gemini2NextMove: boolean,\n setGemini1NextMove: (Gemini1NextMove: string) => void,\n setGemini2NextMove: (Gemini2NextMove: string) => void,\n setShowTimePortalRoute: (showTimePortalRoute: boolean) => void,\n}\n\nexport default function(props: Props) {\n const position = locationData[props.id].pixelPosition;\n return <>\n {props.setShowTimePortalRoute(true)}} \n onMouseLeave={() => {props.setShowTimePortalRoute(false)}}\n position={position}\n >\n {\n props.shipReachability[IDs.GEMINI_1] ? \n {\n props.setGemini1NextMove(props.id)\n }}\n /> : <>\n }\n {\n props.shipReachability[IDs.GEMINI_2] ? \n {\n props.setGemini2NextMove(props.id)\n }}\n /> : <>\n }\n {\n props.shipReachability[IDs.GEMINI_1] && props.shipReachability[IDs.GEMINI_2] ? \n {\n props.setGemini1NextMove(props.id)\n props.setGemini2NextMove(props.id)\n }}\n /> : <>\n }\n \n ;\n}\n","import { createContext } from 'react';\nimport { GameDuration, GameState } from '../metadata/types';\n\ninterface Context {\n socket?: SocketIOClient.Socket,\n gameState?: GameState,\n gameDuration?: GameDuration,\n}\n\nconst defaultValue: Context = {};\n\nconst context = createContext(defaultValue);\n\nexport default context;","import { useContext } from 'react';\nimport GameContext from './game-context';\nimport * as Types from '../metadata/types';\n\nexport function useSelector(\n selector: (state: Types.GameState) => TSelected\n): TSelected {\n const context = useContext(GameContext);\n const state = context.gameState!;\n return selector(state);\n}\n\nexport function useDispatch() {\n const context = useContext(GameContext);\n return (action: Types.GameAction) => {\n context.socket?.emit(Types.SocketMessages.Action, JSON.stringify(action));\n }\n}","import { SpaceStationMetadata } from './types';\n\nconst metadata: SpaceStationMetadata = {\n 'andromède': {\n location: 'andromède',\n message: {\n asset: 'modals/Andromeda_Information_Card.jpg',\n note: \"DES RESSOURCES DE SAUVETAGE SONT DISPONIBLES DANS CETTE STATION – ELLES PEUVENT ÊTRE RÉCUPÉRÉES À L’AIDE DE STARWAY\",\n technology: \"Équipe de restauration alimentaire\",\n title: 'Équipe de restauration alimentaire',\n paragraphs:[\n {text: 'L’équipe de restauration alimentaire est actuellement en mission. Elle ne reviendra pas sur Andromède avant le Jour 14.'}\n ],\n sideNote: \"disponible le Jour 14\",\n }\n },\n 'verseau': {\n location: 't3',\n message: {\n asset: 'modals/Aquarius_Information_Card.jpg',\n note: \"DES RESSOURCES DE SAUVETAGE SONT DISPONIBLES DANS CETTE STATION – ELLES PEUVENT ÊTRE RÉCUPÉRÉES À L’AIDE DE STARWAY\",\n technology: \"Équipe de restauration de l’eau\",\n title: 'Nourriture sur Orion',\n paragraphs: [\n {text: 'Les systèmes de transformation des aliments ont été détruits.'},\n {text: 'Les réserves alimentaires d’urgence s’épuisent et des personnes commenceront à mourir au Jour 24, à moins que les systèmes soient réparés.'},\n {text: 'Une équipe de restauration alimentaire deviendra disponible sur Andromède.'},\n ],\n }\n },\n 'borealis': {\n location: 't5',\n message: {\n asset: 'modals/Borealis_Information_Card.jpg',\n note: \"DES RESSOURCES DE SAUVETAGE SONT DISPONIBLES DANS CETTE STATION – ELLES PEUVENT ÊTRE RÉCUPÉRÉES À L’AIDE DE STARWAY\",\n technology: \"Équipe de restauration de l’oxygène\",\n title: 'Restauration de l’O2 sur Orion',\n paragraphs: [\n {text: 'L’équipe de restauration de l’O2 peut rétablir immédiatement l’O2 sur ORION dès son arrivée sur place. Cette restauration sera définitive.'},\n {text: 'Elle ne peut toutefois quitter Borealis avant que la technologie d’IA de Capricorne vienne la remplacer.'},\n {text: 'Si l’équipe de restauration de l’O2 quitte Borealis avant ce moment, elle mettra la vie de 200 scientifiques de cette station en danger.'},\n ],\n }\n },\n 'capricorne': {\n location: 't4',\n message: {\n asset: 'modals/Capricorn_Information_Card.jpg',\n note: \"DES RESSOURCES DE SAUVETAGE SONT DISPONIBLES DANS CETTE STATION – ELLES PEUVENT ÊTRE RÉCUPÉRÉES À L’AIDE DE STARWAY\",\n technology: \"Technologie d’IA\",\n title: 'Blessures sur Orion',\n paragraphs: [\n {text: 'Trois personnes ont subi des blessures lorsque les dommages se sont produits.'},\n {text: 'Les blessures s’aggravent progressivement, et les trois personnes mourront au Jour 25 si aucun traitement médical spécialisé n’est fourni.'},\n {text: 'L’équipe médicale est actuellement disponible sur Cassiopée.'},\n ]\n }\n },\n 'cassiopée': {\n location: 'cassiopée',\n message: {\n asset: 'modals/Cassiopeia_Information_Card.jpg',\n note: \"DES RESSOURCES DE SAUVETAGE SONT DISPONIBLES DANS CETTE STATION – ELLES PEUVENT ÊTRE RÉCUPÉRÉES À L’AIDE DE STARWAY\",\n technology: \"Équipe médicale\",\n title: 'Approvisionnement d’eau sur Orion',\n paragraphs: [\n {text: 'Le système de traitement de l’eau s’est arrêté lorsque les dommages sont survenus.'},\n {text: 'Il y a suffisamment d’eau en réserve pour garder les scientifiques en vie jusqu’au Jour 23, au plus tard. Des pertes de vies sont à prévoir, à moins que les systèmes de traitement de l’eau de la station soient définitivement réparés.'},\n {text: 'Une équipe de réparation des systèmes de traitement de l’eau est disponible sur Aquarius.'},\n ]\n }\n },\n 'orion': {\n location: 't2',\n message: {\n asset: 'modals/Orion_Information_Card.jpg',\n title: 'O2 sur Orion',\n paragraphs: [\n {text: 'Les provisions d’oxygène de la station spatiale Orion s’épuisent rapidement, et les scientifiques risquent d’en manquer.'},\n {text: 'Les cellules de remplacement d’O2 qui sont à bord de votre vaisseau représentent une solution temporaire au problème de génération d’oxygène. Cette solution est valable jusqu’au Jour 21.'},\n {text: 'Des décès se produiront si aucune solution permanente pour la génération d’oxygène n’est mise en place avant le Jour 21.'},\n ]\n }\n },\n 'sagittaire': {\n location: 'sagittaire',\n message: {\n asset: 'modals/Sagittarius_Information_Card.jpg',\n title: 'Dommages subis par la station spatiale Orion',\n paragraphs: [\n {text: 'La principale source de génération d’oxygène d’Orion a été gravement touchée.'},\n {text: 'La station n’a des réserves d’oxygène que pour 6 jours avant que des décès surviennent.'},\n {text: 'Sans réparations, la production d’oxygène s’arrêtera complètement dans 21 jours.'},\n ]\n }\n },\n};\n\nexport default metadata;\n","import locationMetadata from './location-data';\nimport spaceStationMetadata from './space-station-data';\n\nexport const locationData = locationMetadata;\n\nexport const spaceStationData = spaceStationMetadata;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport const ModalBackground = styled.div`\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n position: absolute;\n margin: 0 auto;\n background-color: rgba(10, 10, 10, 0.2);\n z-index: ${(props: {zIndex?: Number|undefined }) => props.zIndex !== undefined ? `${props.zIndex}`: '10'};\n`;\n\nexport const BaseModalBackground = styled.div`\n position: absolute;\n padding: 30px;\n top: 80px;\n width: 700px;\n left: 50%;\n transform: translate(-50%, 0);\n`;\n\nexport const BaseModalImageBackground = styled(BaseModalBackground)`\n height: 500px;\n background-size: cover;\n background-image: ${(props: {backgroundImage: string|undefined }) => props.backgroundImage !== undefined ? `url(\"${process.env.PUBLIC_URL}/${props.backgroundImage}\")`: 'none'};\n`;\n\nexport const BaseModalTextBackground = styled(BaseModalBackground)`\n`;\n\nexport const BaseModal = styled.div`\n background-color: white;\n padding: 30px;\n background-color: rgb(197, 205, 233);\n border-bottom: 5px solid #b62021;\n font-family: 'roboto';\n`;\n\nexport const Modal = styled(BaseModal)`\n clip-path: polygon(25px 0, 100% 0, 100% calc(100% - 25px), calc(100% - 25px) 100%, 25% 100%, 0 100%, 0 25px);\n margin-bottom: 20px;\n`;\n\nexport const ExtraModal = styled(BaseModal)`\n clip-path: polygon(0 0, calc(100% - 25px) 0, 100% 25px, 100% 100%, 25px 100%, 0 calc(100% - 25px), 0 0);\n`;\n\nexport const StyledModal = styled(Modal)`\n padding: 30px;\n`;\n\nexport const Header = styled.div`\n height: 40px;\n line-height: 40px;\n font-weight: bold;\n font-size: 28px;\n text-align: center;\n color: #b62021;\n font-family: Orbitron;\n`;\n\nexport const Body = styled.div`\n font-family: 'Roboto' sans-serif;\n font-size: 20px;\n font-weight: 500;\n`;\n\nexport const StyledButton = styled.div`\n font-family: 'Roboto' sans-serif;\n cursor: pointer;\n background-size: cover;\n width: 130px;\n height: 65px;\n background-image: url(${`\"${process.env.PUBLIC_URL}/buttons/Map Buttons_outlines_Dismiss.png\"`});\n`;\n\nexport function DismissButton(props: {\n onClose?: () => void,\n className?: string,\n}) {\n return ;\n}\n","import * as Types from '../metadata/types';\n\nexport function moveSpaceship(nextMoves: {\n [id: string]: string\n}): Types.MoveSpaceshipAction {\n return {\n type: Types.MOVE_SPACESHIP,\n payload: nextMoves,\n };\n}\n\nexport function pickUpSupplyResource(data: Types.Transfer): Types.PickUpSupplyResourceAction {\n return {\n type: Types.PICK_UP_SUPPLY_RESOURCE,\n payload: data,\n };\n}\n\nexport function pickUpRescueResource(data: Types.TransferWithResourceType): Types.PickUpRescueResourceAction {\n return {\n type: Types.PICK_UP_RESCUE_RESOURCE,\n payload: data,\n };\n}\n\nexport function dropOffRescueResource(data: Types.TransferWithResourceType): Types.DropOffRescueResourceAction {\n return {\n type: Types.DROP_OFF_RESCUE_RESOURCE,\n payload: data,\n };\n}\n\nexport function transferEnergyCells(data: Types.TransferWithCount): Types.TransferEnergyCellsAction {\n return {\n type: Types.TRANSFER_ENERGY_CELLS,\n payload: data,\n };\n}\n\nexport function transferLifeSupportPacks(data: Types.TransferWithCount): Types.TransferLifeSupportPacksAction {\n return {\n type: Types.TRANSFER_LIFE_SUPPORT_PACKS,\n payload: data,\n };\n}\n\nexport function transferRescueResource(data: Types.TransferWithResourceType): Types.TransferRescueResourceAction {\n return {\n type: Types.TRANSFER_RESCUE_RESOURCE,\n payload: data,\n };\n}\n\nexport function abortMission(): Types.AbortMissionAction {\n return {\n type: Types.ABORT_MISSION,\n };\n}\n","import styled from 'styled-components';\n\nexport default styled.div`\n width: 0;\n height: 0;\n text-indent: -9999px;\n border-top: 12px solid transparent;\n border-left: ${(props: { disabled?: boolean }) => \n props.disabled ?\n '36px solid grey' : '36px solid red'\n };\n \n border-bottom: 12px solid transparent;\n cursor: pointer;\n`;","import React from 'react';\nimport styled from 'styled-components';\nimport { useSelector, useDispatch } from '../redux-hook-adapters';\nimport {\n BaseModalTextBackground,\n Modal,\n ModalBackground,\n DismissButton,\n} from './modal';\nimport { GameState } from '../../metadata/types';\nimport * as IDs from '../../metadata/agent-ids';\nimport {\n pickUpSupplyResource,\n pickUpRescueResource,\n dropOffRescueResource\n} from '../actions';\nimport { Message } from '../../metadata/types';\nimport Triangle from './TriangleButton';\n\nconst StationName = styled.div`\n font-family: Orbitron;\n text-align: center;\n font-size: 40px;\n margin-bottom: 20px;\n text-transform: uppercase;\n`;\n\nconst TextInfo = styled.div`\n font-family: 'Roboto' sans-serif;\n text-align: center;\n font-weight: 500;\n font-size: 18px;\n margin-top: 10px;\n margin-bottom: 5px;\n position: relative;\n text-align: left;\n`;\nconst ModalWrapper = styled(BaseModalTextBackground)`\n width: 1200px;\n padding: 0;\n text-align: center;\n`;\nconst Column = styled.div`\n display: inline-block;\n overflow: auto;\n vertical-align: top;\n position: relative;\n`;\nconst StyledModal = styled(Modal)`\n position: relative;\n height: 560px;\n`;\nconst StyledButton = styled(DismissButton)`\n position: absolute;\n left: 0px;\n bottom: 10px;\n`;\n\nconst Header = styled.div`\n font-weight: bold;\n font-size: 22px;\n text-align: center;\n color: #b62021;\n font-family: Orbitron;\n`;\n\nconst Body = styled.div`\n font-family: 'Roboto' sans-serif;\n font-size: 16px;\n font-weight: 500;\n`;\n\nconst SupplyGroup = styled.div`\n position: relative;\n`;\n\nconst Resource = styled.div`\n font-family: 'Roboto' sans-serif;\n text-align: center;\n font-weight: 500;\n font-size: 20px;\n margin-top: 10px;\n margin-bottom: 5px;\n position: relative;\n`;\n\nconst LeftPanelTriangle = styled(Triangle)`\n position: absolute;\n right: 5px;\n top: 0;\n`;\n\nconst Divider = styled.div`\n border-bottom: 1px solid grey;\n margin: 10px 0;\n`;\n\nfunction StationPanel(props: {\n id: string,\n message: Message,\n}) {\n const gameState = useSelector((state: GameState) => state);\n const station = gameState.spaceStations[props.id];\n const gemini_1 = gameState.spaceships[IDs.GEMINI_1];\n const gemini_2 = gameState.spaceships[IDs.GEMINI_2];\n const dispatch = useDispatch();\n\n const showResources = gemini_1.location === station.location || gemini_2.location === station.location;\n let supplyReceiverId: string;\n let resourceReceiverId: string;\n if (gemini_1.location === station.location) {\n supplyReceiverId = IDs.GEMINI_1;\n if (gemini_1.timePortalRoute.length === 0) {\n resourceReceiverId = IDs.GEMINI_1;\n }\n } else if (gemini_2.location === station.location) {\n supplyReceiverId = IDs.GEMINI_2;\n if (gemini_2.timePortalRoute.length === 0) {\n resourceReceiverId = IDs.GEMINI_2;\n }\n }\n\n return <>\n \n {props.id}\n \n \n
\n {props.message.title}\n
\n \n {\n props.message.paragraphs.map((paragraph, i) => {\n return

\n {paragraph.number}\n {paragraph.text}\n

;\n })\n }\n \n
\n {\n showResources ?\n <>\n \n \n \n Cellules énergétiques: {station.energyCells}\n \n \n Équipements de survie: {station.lifeSupportPacks}\n \n {\n if (station.energyCells > 0) {\n dispatch(pickUpSupplyResource({\n from: props.id,\n to: supplyReceiverId,\n }));\n }\n }}\n disabled={station.energyCells === 0}\n />\n \n \n {\n station.rescueResources.map((resource, i) => \n \n {resource}\n {\n if (resourceReceiverId && station.canPickUp[resource]) {\n dispatch(pickUpRescueResource({\n from: props.id,\n to: resourceReceiverId,\n type: resource,\n }));\n }\n }}\n disabled={!resourceReceiverId || !station.canPickUp[resource]}\n />\n \n )\n }\n : <>\n }\n \n}\n\nconst SpaceshipName = styled.h1`\n font-family: Orbitron;\n text-align: center;\n margin-bottom: 30px;\n`;\n\nexport const RightPanelTriangle = styled(Triangle)`\n position: absolute;\n left: 5px;\n top: 0;\n transform: rotate(180deg);\n`;\n\nconst ResourceRightAlign = styled(Resource)`\n text-align: right;\n margin-top: 10px;\n`;\n\nfunction Gemini1Panel(props: {\n id: string\n}) {\n const gemini_1 = useSelector((state: GameState) => state.spaceships[IDs.GEMINI_1]);\n const dispatch = useDispatch();\n\n return <>\n Gemini 1\n \n Cellules énergétiques: {gemini_1.energyCells}\n \n \n Équipements de survie: {gemini_1.lifeSupportPacks}\n \n \n {\n gemini_1.rescueResources.map((resource, i) => \n \n {resource}\n 0}\n onClick={() => {\n if (gemini_1.timePortalRoute.length === 0) {\n dispatch(dropOffRescueResource({\n from: IDs.GEMINI_1,\n to: props.id,\n type: resource,\n }));\n }\n }}\n />\n \n )\n }\n \n}\n\nfunction Gemini2Panel(props: {\n id: string\n}) {\n const gemini_2 = useSelector((state: GameState) => state.spaceships[IDs.GEMINI_2]);\n const dispatch = useDispatch();\n return <>\n Gemini 2\n \n Cellules énergétiques: {gemini_2.energyCells}\n \n \n Équipements de survie: {gemini_2.lifeSupportPacks}\n \n \n {\n gemini_2.rescueResources.map((resource, i) => \n \n {resource}\n 0}\n onClick={() => {\n if (gemini_2.timePortalRoute.length === 0) {\n dispatch(dropOffRescueResource({\n from: IDs.GEMINI_2,\n to: props.id,\n type: resource,\n }));\n }\n }}\n />\n \n )\n }\n \n}\n\nexport default (props: {\n onClose?: () => void,\n id: string,\n message: Message,\n}) => {\n\n const gameState = useSelector((state: GameState) => state);\n const spaceStationLocation = gameState.spaceStations[props.id].location;\n const gemini1AtStation = gameState.spaceships[IDs.GEMINI_1].location === spaceStationLocation;\n const gemini2AtStation = gameState.spaceships[IDs.GEMINI_2].location === spaceStationLocation;\n\n return \n \n \n \n \n \n \n \n \n {\n gemini1AtStation ?\n <>\n \n \n \n \n \n \n \n :\n null\n }\n {\n gemini2AtStation ?\n <>\n \n \n \n \n \n \n \n :\n null\n }\n \n ;\n}","import React, { useState } from 'react';\nimport { useSelector } from './redux-hook-adapters';\nimport styled from 'styled-components';\nimport { PixelPosition } from '../metadata/types';\nimport locationData from '../metadata/location-data';\nimport { spaceStationData } from '../metadata';\nimport SpaceStationModal from './modal/SpaceStationModal';\nimport { GameState } from '../metadata/types';\n\nconst StationInformationButton = styled.button`\n position: absolute; \n font-family: 'Grandstander', cursive;\n top: ${(props: { position: PixelPosition }) => `${props.position.top}px`};\n left: ${(props: { position: PixelPosition }) => `${props.position.left - 80}px`};\n height: 30px;\n width: 30px;\n border-radius: 15px;\n line-height: 30px;\n font-size: 20px;\n &:hover {\n cursor: pointer;\n }\n`;\n\nexport default (props: {\n id: string,\n}) => {\n\n const visited = useSelector((state: GameState) => state.spaceStations[props.id].visited);\n\n const spaceStation = spaceStationData[props.id];\n const StationPosition = locationData[spaceStation.location].pixelPosition;\n const [showModal, setShowModal] = useState(false);\n\n return <>\n {\n visited ?\n <>\n
\n setShowModal(true)}\n >\n i\n \n
\n \n {\n showModal ?\n setShowModal(false)}\n id={props.id}\n message={spaceStation.message}\n /> : <>\n }\n : null\n }\n ;\n}","import React from 'react';\nimport styled from 'styled-components';\n\nimport {\n BaseModalTextBackground,\n BaseModalImageBackground,\n ExtraModal,\n Modal,\n ModalBackground,\n DismissButton,\n Header,\n} from './modal';\nimport { Message } from '../../metadata/types';\n\nconst Body = styled.div`\n font-family: 'Roboto' sans-serif;\n font-size: 20px;\n font-weight: bold;\n`;\n\nconst Note = styled.div`\n font-family: Orbitron;\n font-size: 20px;\n text-align: center;\n color: #b62021;\n`;\n\nconst StyledModal = styled(Modal)`\n padding: 30px;\n`;\n\nexport const StyledExtraModal = styled(ExtraModal)`\n padding: 20px;\n`;\n\nexport const StyledDismissButton = styled(DismissButton)`\n display: flex;\n margin-left: auto;\n`;\n\nexport const StyledDismissButtonForImageModal = styled(DismissButton)`\n position: absolute;\n right: 40px;\n bottom: 65px;\n width: 180px;\n height: 90px;\n`;\n\nexport default (props: {\n message?: Message,\n onClose?: () => void,\n}) => {\n\n return \n {\n !props.message?.asset ?\n \n \n \n
\n {props.message?.title}\n
\n \n {\n props.message?.paragraphs.map((paragraph, i) => {\n return

\n {paragraph.text}\n

;\n })\n }\n \n
\n {props.message?.technology?\n \n {props.message?.note}\n
{props.message?.technology}
\n {\n props.message?.sideNote? {props.message?.sideNote} : <>\n }\n
: <>\n }\n
:\n \n \n \n }\n
;\n}","import React from 'react';\nimport styled from 'styled-components';\nimport { PlainSpaceship } from '../metadata/types';\n\nconst ENERGY_OFFSET = 48;\nconst LIFE_SUPPORT_OFFSET = 168;\nconst GEMINI1_RESOURCE_OFFSET = 265;\nconst GEMINI2_RESOURCE_OFFSET = 492;\nconst GEMINI_TOP_OFFSET = 205;\nconst GEMINI2_TOP_OFFSET = 435;\n\nconst Number = styled.div`\n display: inline-block;\n position: absolute;\n color: white;\n font-size: 25px;\n font-weight: bold;\n text-align: center;\n width: 120px;\n`;\nconst Gemini1Energy = styled(Number)`\n top: ${GEMINI_TOP_OFFSET}px;\n left: ${ENERGY_OFFSET}px;\n`;\nconst Gemini2Energy = styled(Number)`\n top: ${GEMINI2_TOP_OFFSET}px;\n left: ${ENERGY_OFFSET}px;\n`;\nconst Gemini1LifeSupport = styled(Number)`\n top: ${GEMINI_TOP_OFFSET}px;\n left: ${LIFE_SUPPORT_OFFSET}px;\n`;\nconst Gemini2LifeSupport = styled(Number)`\n top: ${GEMINI2_TOP_OFFSET}px;\n left: ${LIFE_SUPPORT_OFFSET}px;\n`;\nconst Time = styled(Number)`\n top: 20px;\n left: 178px;\n font-size: 40px;\n`\n\nconst Resource = styled.div`\n position: absolute;\n width: 240px;\n height: 62px;\n text-align: center;\n color: white;\n font-weight: bold;\n overflow-wrap: normal;\n word-wrap: break-word;\n font-size: 11px;\n margin: 0px;\n > p {\n margin: 2px;\n }\n`;\nconst Gemini1Resource = styled(Resource)`\n top: ${GEMINI1_RESOURCE_OFFSET}px;\n left: ${ENERGY_OFFSET}px;\n`;\nconst Gemini2Resource = styled(Resource)`\n top: ${GEMINI2_RESOURCE_OFFSET}px;\n left: ${ENERGY_OFFSET}px;\n`;\n\ninterface Props {\n gemini1: PlainSpaceship,\n gemini2: PlainSpaceship,\n time: number,\n}\n\nexport default function(props: Props) {\n return (\n <>\n {props.gemini1.energyCells}\n {props.gemini2.energyCells}\n {props.gemini1.lifeSupportPacks}\n {props.gemini2.lifeSupportPacks}\n \n {\n props.gemini1.rescueResources.map((resource, i) => {\n if (i % 2 === 0) {\n return

{resource}

\n }\n else {\n return

{resource}

\n }\n })\n }\n
\n \n {\n props.gemini2.rescueResources.map((resource, i) => {\n if (i % 2 === 0) {\n return

{resource}

\n }\n else {\n return

{resource}

\n }\n })\n }\n
\n \n \n );\n}\n","import React, {\n ChangeEvent,\n KeyboardEvent,\n Dispatch,\n SetStateAction,\n useState,\n} from 'react';\nimport styled from 'styled-components';\nimport { useSelector, useDispatch } from '../redux-hook-adapters';\n\nimport {\n BaseModalTextBackground,\n Modal,\n ModalBackground,\n DismissButton,\n} from './modal';\nimport { GameState } from '../../metadata/types';\nimport * as IDs from '../../metadata/agent-ids';\nimport {\n transferEnergyCells,\n transferRescueResource,\n transferLifeSupportPacks,\n} from '../actions';\nimport Triangle from './TriangleButton';\n\nconst Gemini = styled.img`\n width: 120px;\n position: absolute;\n top: 0;\n left: 10px;\n`;\n\nconst ModalWrapper = styled(BaseModalTextBackground)`\n width: 1000px;\n padding: 0;\n`;\n\nconst StyledModal = styled(Modal)`\n position: relative;\n height: 520px;\n`;\n\nconst StyledButton = styled(DismissButton)`\n position: absolute;\n right: 10px;\n top: 10px;\n`;\n\nconst Column = styled.div`\n display: inline-block;\n overflow: auto;\n vertical-align: top;\n position: relative;\n`;\n\nconst SpaceshipName = styled.h1`\n font-family: Orbitron;\n text-align: center;\n margin-bottom: 30px;\n`;\n\nconst ResourceName = styled.div`\n font-family: 'Roboto' sans-serif;\n text-align: center;\n font-weight: 500;\n font-size: 24px;\n margin-top: 10px;\n margin-bottom: 5px;\n position: relative;\n`;\n\nconst ResourceCount = styled.div`\n font-family: 'Roboto' sans-serif;\n text-align: center;\n font-weight: bold;\n font-size: 40px;\n position: relative;\n`;\n\nconst Divider = styled.div`\n border-bottom: 1px solid grey;\n margin-top: 10px;\n`;\n\nconst LeftPanelTriangle = styled(Triangle)`\n position: absolute;\n right: 5px;\n top: 0;\n`;\n\nconst ResourceCountInput = styled.input`\n position: absolute;\n bottom: 0;\n font-size: 36px;\n width: 80px;\n text-align: center;\n background-color: transparent;\n border-radius: 5px;\n border: none;\n ${(props: { incorrect: boolean }) => props.incorrect ?\n `background-color: rgba(255, 0, 0, 0.5);`\n :\n `border-bottom: 1px solid grey;`\n }\n\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n /* Firefox */\n &[type=number] {\n -moz-appearance: textfield;\n }\n`;\n\nconst LeftPanelInput = styled(ResourceCountInput)`\n right: 0;\n`;\n\nfunction handleKeyDown(onSubmit: () => void, setIncorrectFunction: Dispatch>): (event: KeyboardEvent) => void {\n return (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n onSubmit();\n } else {\n setIncorrectFunction(false);\n }\n };\n}\n\nfunction handleInput(_: string, setStateFunction: Dispatch>)\n : (event: ChangeEvent) => void {\n return (event: ChangeEvent) => {\n const input = event.target.value;\n if (input.length > 3) { return; }\n const trimmed = input.replace(/\\D/g, '');\n setStateFunction(trimmed);\n };\n}\n\n// If bad input, return -1\nfunction verifyInput(max: number, input: string): number {\n if (input.length === 0) { return 0; }\n const count = Number.parseInt(input);\n if (count === Number.NaN) { return -1; }\n if (count > max - 1) { return -1; }\n return count;\n}\n\nfunction Gemini1Panel() {\n\n const gemini_1 = useSelector((state: GameState) => state.spaceships[IDs.GEMINI_1]);\n const dispatch = useDispatch();\n\n const [energyCellsInput, setEnergyCellsInput] = useState('');\n const [energyCellsIncorrect, setEnergyCellsIncorrect] = useState(false);\n const [lifeSupportPacksInput, setLifeSupportPacksInput] = useState('');\n const [lifeSupportPacksIncorrect, setLifeSupportPacksIncorrect] = useState(false);\n\n function energyCellSubmit() {\n const count = verifyInput(gemini_1.energyCells, energyCellsInput);\n if (count === -1) {\n setEnergyCellsIncorrect(true);\n return;\n }\n setEnergyCellsInput('');\n dispatch(transferEnergyCells({\n from: IDs.GEMINI_1,\n to: IDs.GEMINI_2,\n count: count,\n }));\n }\n\n function lifeSupportPacksSubmit() {\n const count = verifyInput(gemini_1.lifeSupportPacks, lifeSupportPacksInput);\n if (count === -1) {\n setLifeSupportPacksIncorrect(true);\n return;\n }\n setLifeSupportPacksInput('');\n dispatch(transferLifeSupportPacks({\n from: IDs.GEMINI_1,\n to: IDs.GEMINI_2,\n count: count,\n }));\n }\n\n return <>\n \n Gemini 1\n \n Cellules énergétiques\n \n \n \n {gemini_1.energyCells}\n \n \n \n Équipements de survie \n \n \n \n {gemini_1.lifeSupportPacks}\n \n \n \n {\n gemini_1.rescueResources.map((resource, i) => \n \n {resource}\n {\n dispatch(transferRescueResource({\n from: IDs.GEMINI_1,\n to: IDs.GEMINI_2,\n type: resource,\n }));\n }}\n />\n \n )\n }\n ;\n}\n\n\nconst RightPanelInput = styled(ResourceCountInput)`\n left: 0;\n`;\n\nconst RightPanelTriangle = styled(Triangle)`\n position: absolute;\n left: 5px;\n top: 0;\n transform: rotate(180deg);\n`;\n\nfunction Gemini2Panel() {\n\n const gemini_2 = useSelector((state: GameState) => state.spaceships[IDs.GEMINI_2]);\n const dispatch = useDispatch();\n\n const [energyCellsInput, setEnergyCellsInput] = useState('');\n const [energyCellsIncorrect, setEnergyCellsIncorrect] = useState(false);\n const [lifeSupportPacksInput, setLifeSupportPacksInput] = useState('');\n const [lifeSupportPacksIncorrect, setLifeSupportPacksIncorrect] = useState(false);\n\n function energyCellSubmit() {\n const count = verifyInput(gemini_2.energyCells, energyCellsInput);\n if (count === -1) {\n setEnergyCellsIncorrect(true);\n return;\n }\n setEnergyCellsInput('');\n dispatch(transferEnergyCells({\n from: IDs.GEMINI_2,\n to: IDs.GEMINI_1,\n count: count,\n }));\n }\n\n function lifeSupportPacksSubmit() {\n const count = verifyInput(gemini_2.lifeSupportPacks, lifeSupportPacksInput);\n if (count === -1) {\n setLifeSupportPacksIncorrect(true);\n return;\n }\n setLifeSupportPacksInput('');\n dispatch(transferLifeSupportPacks({\n from: IDs.GEMINI_2,\n to: IDs.GEMINI_1,\n count: count,\n }));\n }\n\n return <>\n \n Gemini 2\n \n Cellules énergétiques\n \n \n \n {gemini_2.energyCells}\n \n \n \n Équipements de survie \n \n \n \n {gemini_2.lifeSupportPacks}\n \n \n \n {\n gemini_2.rescueResources.map((resource, i) =>\n \n {resource}\n {\n dispatch(transferRescueResource({\n from: IDs.GEMINI_2,\n to: IDs.GEMINI_1,\n type: resource,\n }));\n }}\n />\n \n )\n }\n ;\n}\n\nexport default (props: {\n onClose?: () => void,\n}) => {\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n}","export function pad(n: number): string {\n let digits = 0;\n let copy = n;\n while (copy > 0) {\n copy = Math.floor(copy / 10);\n ++digits;\n }\n if (digits < 2) {\n return `0${n}`;\n } else {\n return `${n}`;\n }\n}\n\nexport function formatTime(time: number) {\n const minutes = Math.floor(time / 60);\n const seconds = time % 60;\n return `${pad(minutes)}:${pad(seconds)}`;\n}\n\nexport function localeTimeString(timeMS: number) {\n const date = new Date(timeMS);\n return date.toLocaleString();\n}","import React from 'react';\nimport { useSelector } from '../redux-hook-adapters';\nimport styled from 'styled-components';\nimport { GameState, GameStatus, RescueResource } from '../../metadata/types';\nimport { formatTime } from '../../time-format-utils';\n\nconst Wrapper = styled.div`\n font-size: 14px;\n`;\n\nconst Title = styled.h1`\n font-family: Orbitron;\n text-align: center;\n`;\n\nconst ColumnHalf = styled.div`\n width: calc(50% - 10px);\n display: inline-block;\n padding: 5px;\n`;\n\nconst DataPoint = styled.div`\n margin-bottom: 10px;\n`;\n\nconst StatName = styled.div`\n display: inline-block;\n font-weight: bold;\n width: 60%;\n margin-right: 5px;\n`;\n\nconst StatValue = styled.div`\n display: inline-block;\n`;\n\nexport default () => {\n\n const state = useSelector((state: GameState) => state);\n const stats = state.gameStats;\n\n return \n Statistiques de fin de jeu\n \n \n Retourné sur Sagittaire\n \n {\n state.status === GameStatus.MissionSucceeded ?\n `Jour ${state.time}` : 'Vous n’avez pas terminé'\n }\n \n \n \n Scientifiques sauvés\n \n {\n state.status === GameStatus.MissionSucceeded ?\n `${stats.scientistsRemaining} de 20` : 'Aucun'\n }\n \n \n \n Durée de la mission\n \n {\n formatTime(state.endTime! - state.startTime + state.accumulatedTime)\n }\n \n \n \n Oxygène – temporaire (requis au Jour 6)\n \n {\n stats.dropOffTimes[RescueResource.O2ReplacementCells] > -1 ?\n `Livré au Jour ${stats.dropOffTimes[RescueResource.O2ReplacementCells]}` : 'Aucune restauration ou réparation'\n }\n \n \n \n \n \n Oxygène (requis au Jour 21)\n \n {\n stats.dropOffTimes[RescueResource.OxygenRepairTeam] > -1 ?\n `Livré au Jour ${stats.dropOffTimes[RescueResource.OxygenRepairTeam]}` : 'Aucune restauration ou réparation'\n }\n \n \n \n Eau (requise au Jour 23)\n \n {\n stats.dropOffTimes[RescueResource.WaterRepairTeam] > -1 ?\n `Livré au Jour ${stats.dropOffTimes[RescueResource.WaterRepairTeam]}` : 'Aucune restauration ou réparation'\n }\n \n \n \n Nourriture (requise au Jour 24)\n \n {\n stats.dropOffTimes[RescueResource.FoodRepairTeam] > -1 ?\n `Livré au Jour ${stats.dropOffTimes[RescueResource.FoodRepairTeam]}` : 'Aucune restauration ou réparation'\n }\n \n \n \n Composantes médicales (requises au Jour 25)\n \n {\n stats.dropOffTimes[RescueResource.FoodRepairTeam] > -1 ?\n `Livré au Jour ${stats.dropOffTimes[RescueResource.FoodRepairTeam]}` : 'Aucune restauration ou réparation'\n }\n \n \n \n ;\n}","import React from 'react';\nimport EndGameStatsModal from './EndGameStatsModal';\n\nimport {\n BaseModalBackground,\n ModalBackground,\n Header,\n Body,\n StyledModal\n} from './modal';\nimport { StyledExtraModal } from './MessageModal';\n\nexport default () => {\n return \n \n \n
\n Mission abandonnée!\n
\n \n

Vous avez abandonné votre mission. Sans votre aide, nous craignons que le pire soit arrivé à la station spatiale Orion.

\n

Alertez le commandant spatial et demandez-lui de venir pour vous dire ce que vous devez faire maintenant.

\n

-Poste de commande au sol

\n \n
\n \n \n \n
\n
\n}","import React from 'react';\nimport { useSelector, useDispatch } from '../redux-hook-adapters';\nimport styled from 'styled-components';\nimport { moveSpaceship } from '../actions';\nimport {\n BaseModalTextBackground,\n Modal,\n ModalBackground,\n Header,\n} from './modal';\nimport * as IDs from '../../metadata/agent-ids';\n\nconst StyledModal = styled(Modal)`\n padding: 30px;\n font-family: 'roboto';\n`;\n\nconst Column = styled.div`\n width: 50%;\n display: inline-block;\n text-align: center;\n margin-top: 10px;\n margin-bottom: 10px;\n`;\n\nconst GeminiImage = styled.div`\n background-image: ${(props: {backgroundImage: string}) => `url(${`${process.env.PUBLIC_URL}/${props.backgroundImage}`})`};\n background-size: cover;\n width: 120px;\n height: 120px;\n margin: auto;\n`;\n\nconst Title = styled.div`\n width: 150px;\n margin: auto;\n font-size: 20px;\n font-weight: bold;\n`;\n\nconst Number = styled.div`\n font-size: 18px;\n margin-bottom: 10px;\n margin-top: 10px;\n`;\n\nconst ActionButton = styled.div`\n margin: auto;\n width: 180px;\n height: 90px;\n cursor: pointer;\n background-size: cover;\n`;\n\nconst ConfirmButton = styled(ActionButton)`\n background-image: url(${`\"${process.env.PUBLIC_URL}/buttons/Map Buttons_outlines_Confirm.png\"`});\n`;\n\nconst CancelButton = styled(ActionButton)`\n background-image: url(${`\"${process.env.PUBLIC_URL}/buttons/Map Buttons_outlines_Cancel.png\"`});\n`;\n\nexport default (props: {\n gemini1NextMove: string,\n gemini2NextMove: string,\n onClose: () => void,\n}) => {\n const dispatch = useDispatch();\n const gameState = useSelector((state) => state);\n const day = gameState.time;\n const gemini1 = gameState.spaceships[IDs.GEMINI_1];\n const gemini2 = gameState.spaceships[IDs.GEMINI_2];\n const nextMoves = gameState.nextMoves;\n\n const travelTogether = gemini1.location === gemini2.location && props.gemini1NextMove === props.gemini2NextMove;\n\n const costs = { \n gemini1: nextMoves[props.gemini1NextMove][IDs.GEMINI_1].cost,\n gemini2: nextMoves[props.gemini2NextMove][IDs.GEMINI_2].cost,\n };\n\n return \n \n \n
\n Souhaitez-vous confirmer votre mouvement?\n
\n \n \n Gemini 1\n \n

Cellules énergétiques

\n {gemini1.energyCells}\n \n \n {\n gemini1.energyCells - costs.gemini1.energyCells <= 0 ?\n 0\n :\n gemini1.energyCells - costs.gemini1.energyCells\n }\n \n
\n \n

Équipements de survie

\n {gemini1.lifeSupportPacks}\n \n \n {\n gemini1.lifeSupportPacks - costs.gemini1.lifeSupportPacks <= 0 ?\n 0\n :\n gemini1.lifeSupportPacks - costs.gemini1.lifeSupportPacks\n }\n \n
\n
\n \n \n Gemini 2\n \n

Cellules énergétiques

\n {gemini2.energyCells}\n \n \n {\n gemini2.energyCells - (travelTogether ? 0 : costs.gemini2.energyCells) <= 0 ?\n 0\n :\n gemini2.energyCells - (travelTogether ? 0 : costs.gemini2.energyCells)\n }\n \n
\n \n

Équipements de survie

\n {gemini2.lifeSupportPacks}\n \n \n {\n gemini2.lifeSupportPacks - (travelTogether ? 0 : costs.gemini2.lifeSupportPacks) <= 0 ?\n 0\n :\n gemini2.lifeSupportPacks - (travelTogether ? 0 : costs.gemini2.lifeSupportPacks)\n }\n \n
\n
\n <span>Jour {day}</span> <i className=\"fas fa-long-arrow-alt-right\"></i> <span>Jour {day + 1}</span>\n \n {\n dispatch(moveSpaceship({\n gemini_1: `${props.gemini1NextMove}`,\n gemini_2: `${props.gemini2NextMove}`\n }))\n props.onClose();\n }}\n />\n \n \n \n \n
\n
\n
\n}","import React from 'react';\nimport {\n BaseModalBackground,\n ModalBackground,\n Header,\n Body,\n StyledModal\n} from './modal';\nimport { StyledExtraModal } from './MessageModal';\nimport styled from 'styled-components';\nimport EndGameStatsModal from './EndGameStatsModal';\n\nconst SuccessModalBackground = styled(ModalBackground)`\n background-image: url(${process.env.PUBLIC_URL}/game_success_map.png);\n background-size: contain;\n`;\n\nexport default () => {\n return \n \n \n
\n Bienvenue encore une fois sur Sagittaire!\n
\n \n

Nous sommes très heureux de pouvoir entendre le récit de votre mission réussie!

\n

Lorsque vous serez prêt, appelez le commandant spatial pour qu’il vienne vous féliciter personnellement!

\n

Merci de tout ce que vous avez fait pour sauver Orion!

\n

-Poste de commande au sol

\n \n
\n \n \n \n
\n
;\n}","import React, { useContext } from 'react';\nimport styled from 'styled-components';\nimport GameContext from './game-context';\n\nconst Clock = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n padding: 10px;\n color: white;\n font-weight: bold;\n font-size: 36px;\n font-family: monospace;\n`;\n\nfunction pad(n: number): string {\n let digits = 0;\n let copy = n;\n while (copy > 0) {\n copy = Math.floor(copy / 10);\n ++digits;\n }\n if (digits < 2) {\n return `0${n}`;\n } else {\n return `${n}`;\n }\n}\n\nexport default () => {\n const context = useContext(GameContext);\n let countdown: number;\n if (context.gameState!.endTime) {\n const lobbyCountdown = context.gameDuration!.countdown + context.gameDuration!.duration;\n countdown = lobbyCountdown - context.gameState!.endTime;\n } else {\n countdown = context.gameDuration!.countdown;\n }\n const minutes = Math.floor(countdown / 60);\n const seconds = countdown % 60;\n \n return \n {pad(minutes)}:{pad(seconds)}\n ;\n}\n","import React from 'react';\nimport {\n BaseModalImageBackground,\n ModalBackground,\n} from './modal';\nimport { useDispatch } from '../redux-hook-adapters';\nimport { abortMission } from '../actions';\nimport styled from 'styled-components';\n\nconst AbortButton = styled.div`\n position: absolute;\n top: 20px;\n left: 120px;\n cursor: pointer;\n height: 70px;\n width: 140px;\n background-size: cover;\n background-image: url(${`\"${process.env.PUBLIC_URL}/buttons/Map Buttons_outlines_Yes.png\"`});\n`;\n\nconst CancelButton = styled.div`\n position: absolute;\n right: 180px;\n top: 20px;\n cursor: pointer;\n height: 70px;\n width: 140px;\n background-size: cover;\n background-image: url(${`\"${process.env.PUBLIC_URL}/buttons/Map Buttons_outlines_No.png\"`});\n`;\n\nexport default (props: {\n onClose: () => void,\n}) => {\n\n const dispatch = useDispatch();\n\n return \n \n
\n {\n dispatch(abortMission());\n props.onClose();\n }}\n />\n \n
\n
\n
;\n}","import React from 'react';\nimport {\n ModalBackground,\n BaseModalTextBackground,\n Modal\n} from './modal';\nimport styled from 'styled-components';\n\nconst WaitMessage = styled.div`\n font-weight: bold;\n font-size: 24px;\n font-family: Orbitron;\n`;\n\nexport default () => {\n return \n \n \n En attente de votre commandant pour commencer la mission...\n \n \n ;\n}","import React from 'react';\nimport EndGameStatsModal from './EndGameStatsModal';\n\nimport {\n BaseModalBackground,\n ModalBackground,\n Header,\n Body,\n StyledModal,\n} from './modal';\nimport { StyledExtraModal } from './MessageModal';\n\nexport default () => {\n return \n \n \n
\n Retransmission provenant du poste de commande au sol\n
\n \n

Oh non! Votre vaisseau a épuisé les resources nécessaires pour maintenir votre navire en mouvement afin que vous puissiez mener à bien votre mission!

\n

Veuillez envoyer un appel de détresse au commandant spatial et nous vous fournirons des instructions supplémentaires.

\n

-Poste de commande au sol

\n \n
\n \n \n \n
\n
\n}","import React from 'react';\nimport EndGameStatsModal from './EndGameStatsModal';\n\nimport {\n BaseModalBackground,\n ModalBackground,\n Header,\n Body,\n StyledModal,\n} from './modal';\nimport { StyledExtraModal } from './MessageModal';\n\nexport default () => {\n return \n \n \n
\n Attention, équipage de Gemini. \n
\n \n

Le temps dont vous disposiez pour le sauvetage d’Orion est malheureusement écoulé.

\n

Notre équipe de commandement poursuivra le travail de sauvetage de la station spatiale, mais vous devez revenir au centre de commande.

\n

Bouclez votre ceinture; nous sommes sur le point de vous téléporter pour rencontrer le commandant spatial afin de faire un compte rendu de votre mission.

\n

-Poste de commande au sol

\n \n
\n \n \n \n
\n
\n}","import React from 'react';\nimport EndGameStatsModal from './EndGameStatsModal';\n\nimport {\n BaseModalBackground,\n ModalBackground,\n Header,\n Body,\n StyledModal,\n} from './modal';\nimport { StyledExtraModal } from './MessageModal';\n\nexport default () => {\n return \n \n \n
\n Retransmission provenant du poste de commande au sol\n
\n \n

Oh non! Il semble que vous soyez en retard.

\n

Les systèmes d’oxygène n’ont pas été réparés de manière permanente à temps, et le pire est arrivé. Tous les scientifiques de la station spatiale Orion sont décédés – ils ont pris leur place dans le firmament des étoiles!

\n

Bien que nous n’ayons pas réussi notre mission, discutons-en pour comprendre où nous nous sommes trompés. Qu’aurions-nous pu faire différemment?

\n

-Poste de commande au sol

\n \n
\n \n \n \n
\n
\n}","import React, { useState, useLayoutEffect, useEffect, useRef } from 'react';\nimport ButtonGroup from './ButtonGroup';\nimport SpaceStation from './SpaceStation'\nimport { GameState, GameStatus, Message } from '../metadata/types';\nimport styled from 'styled-components';\nimport { locationData, spaceStationData } from '../metadata';\nimport * as IDs from '../metadata/agent-ids';\nimport MessageModal from './modal/MessageModal';\nimport { PixelPosition } from '../metadata/types';\nimport ResourcePanel from './ResourcePanel';\nimport RebalanceResourceModal from './modal/RebalanceResourceModal';\nimport AbortGameModal from './modal/AbortGameModal';\nimport ConfirmMoveModal from './modal/ConfirmMoveModal';\nimport SuccessMissionModal from './modal/SuccessMissionModal';\nimport { useSelector } from './redux-hook-adapters';\nimport Clock from './Clock';\nimport AbortMissionModal from './modal/ConfirmAbortMissionModal';\nimport WaitModal from './modal/WaitModal';\nimport OutOfResourceModal from './modal/OutOfResourceModal';\nimport TimeOutModal from './modal/TimeOutModal';\nimport OutOfO2Modal from './modal/OutOfO2Modal';\n\nconst GEMINI_LEFT_OFFSET = 45;\nconst GEMINI_TOP_OFFSET = 50;\nconst GAME_BOARD_WIDTH = 1440;\nconst GAME_BOARD_HEIGHT = 810;\n\nconst GameBoard = styled.div`\n background-image: url(${`${process.env.PUBLIC_URL}/game_map.jpg`});\n height: ${GAME_BOARD_HEIGHT}px;\n width: ${GAME_BOARD_WIDTH}px;\n background-size: contain;\n position: relative;\n margin: 0 auto;\n`;\n\nconst GeminiShip = styled.div`\n width: 80px;\n height: 80px;\n display: block;\n position: absolute;\n background-size: contain;\n`;\nconst Gemini1 = styled(GeminiShip)`\n background-image: url(${`${process.env.PUBLIC_URL}/Gemini1.png`});\n top: ${(props: { position: PixelPosition }) => `${props.position.top - GEMINI_TOP_OFFSET}px`};\n left: ${(props: { position: PixelPosition }) => `${props.position.left - GEMINI_LEFT_OFFSET}px`};\n`;\nconst Gemini2 = styled(GeminiShip)`\n background-image: url(${`${process.env.PUBLIC_URL}/Gemini2.png`});\n top: ${(props: { position: PixelPosition }) => `${props.position.top - GEMINI_TOP_OFFSET}px`};\n left: ${(props: { position: PixelPosition }) => `${props.position.left - GEMINI_LEFT_OFFSET}px`};\n`;\nconst Gemini12 = styled(GeminiShip)`\n background-image: url(${`${process.env.PUBLIC_URL}/Gemini12.png`});\n top: ${(props: { position: PixelPosition }) => `${props.position.top - GEMINI_TOP_OFFSET}px`};\n left: ${(props: { position: PixelPosition }) => `${props.position.left - GEMINI_LEFT_OFFSET}px`};\n`;\n\nconst ActionButton = styled.div`\n width: 120px;\n height: 40px;\n position: absolute;\n background-size: cover;\n cursor: pointer;\n`;\n\nconst ConfirmMoveButton = styled(ActionButton)`\n background-image: url(${`${process.env.PUBLIC_URL}/buttons/confirm_move.png`});\n top: 10px;\n left: 30px;\n cursor: ${(props: { noMove: Boolean }) => !props.noMove ? 'cursor': `not-allowed`};\n :hover {\n background-image: ${(props: { noMove: Boolean }) => props.noMove ? `url(${process.env.PUBLIC_URL}/buttons/confirm_move.png)`: `url(${process.env.PUBLIC_URL}/buttons/confirm_move_hover.png)`};\n }\n`;\n\nconst MoveResourceButton = styled(ActionButton)`\n background-image: url(${`${process.env.PUBLIC_URL}/buttons/move_resources.png`});\n top: 580px;\n left: 100px;\n cursor: ${(props: { disabled: Boolean }) => !props.disabled ? 'cursor': `not-allowed`};\n :hover {\n background-image: ${(props: { disabled: Boolean }) => !props.disabled ? `url(${process.env.PUBLIC_URL}/buttons/move_resources_hover.png)`: `url(${process.env.PUBLIC_URL}/buttons/move_resources.png)`};\n }\n`;\n\nconst TerminateGameButton = styled(ActionButton)`\n background-image: url(${`${process.env.PUBLIC_URL}/buttons/abort_mission.png`});\n top: 55px;\n left: 30px;\n :hover {\n background-image: url(${`${process.env.PUBLIC_URL}/buttons/abort_mission_hover.png`});\n }\n`;\n\nexport default function() {\n const gameState = useSelector((state: GameState) => state);\n const canvasRef = useRef(null);\n \n const [gemini1NextMove, setGemini1NextMove] = useState();\n const [gemini2NextMove, setGemini2NextMove] = useState();\n const [messages, setMessages] = useState([]);\n const [showRebalanceModal, setShowRebalanceModal] = useState(false);\n const [showConfirmMoveModal, setShowConfirmMoveModal] = useState(false);\n const [showAbortMissionModal, setShowAbortMissionModal] = useState(false);\n const [showTimePortalRoute, setShowTimePortalRoute] = useState(false);\n\n useLayoutEffect(() => {\n setGemini1NextMove(undefined);\n setGemini2NextMove(undefined);\n }, [gameState.time]);\n \n useEffect(() => {\n setMessages(messages.concat(gameState.messages));\n }, [gameState.messages]);\n \n const selectedMove = gemini1NextMove && gemini2NextMove;\n \n const gemini_1 = gameState.spaceships[IDs.GEMINI_1];\n const gemini_2 = gameState.spaceships[IDs.GEMINI_2];\n const gemini1CurrentLocation = gemini_1.location;\n const gemini2CurrentLocation = gemini_2.location\n const gemini1Location = gemini1NextMove ?? gemini1CurrentLocation;\n const gemini2Location = gemini2NextMove ?? gemini2CurrentLocation;\n const position1 = locationData[gemini1Location].pixelPosition;\n const position2 = locationData[gemini2Location].pixelPosition;\n\n const canRebalanceResource = gemini1CurrentLocation === gemini2CurrentLocation &&\n (gemini_1.timePortalRoute.length > 0) === (gemini_2.timePortalRoute.length > 0);\n\n function popMessageModal() {\n const remainingMessages = messages.slice(0);\n remainingMessages.pop();\n setMessages(remainingMessages);\n }\n \n // draw a line\n const drawLine = (context: CanvasRenderingContext2D, start: PixelPosition, end: PixelPosition, color = 'rgba(252,196,9,0.3)') => {\n context.beginPath();\n context.moveTo(start.left, start.top);\n context.lineTo(end.left, end.top);\n context.strokeStyle = color;\n context.lineWidth = 20;\n context.stroke();\n }\n\n const drawLineWithRoute = (context: CanvasRenderingContext2D, timePortalRoute: string[], currentLocation: string, color?: string) => {\n timePortalRoute.forEach((point, i) => {\n if(i >= 1) {\n drawLine(context, locationData[timePortalRoute[i-1]].pixelPosition, locationData[point].pixelPosition, color);\n }\n })\n if(timePortalRoute.length > 0) {\n drawLine(context, locationData[timePortalRoute[timePortalRoute.length-1]].pixelPosition, locationData[currentLocation].pixelPosition, color);\n }\n }\n\n useEffect(() => {\n const canvas = canvasRef.current;\n const context = canvas !== null ? canvas.getContext('2d'): null;\n const travelTogether = gemini_1.location === gemini_2.location && gemini1NextMove === gemini2NextMove;\n if(context !== null) {\n context.clearRect(0, 0, GAME_BOARD_WIDTH, GAME_BOARD_HEIGHT);\n if(travelTogether) {\n drawLineWithRoute(context, gemini_1.timePortalRoute, gemini_1.location);\n }\n else {\n drawLineWithRoute(context, gemini_1.timePortalRoute, gemini_1.location);\n drawLineWithRoute(context, gemini_2.timePortalRoute, gemini_2.location, 'rgba(70,179,232,0.3)');\n }\n }\n }, [gemini_1.timePortalRoute, gemini_2.timePortalRoute, showTimePortalRoute]) \n\n return <>\n \n {\n if(selectedMove) {\n setShowConfirmMoveModal(true);\n }\n }}\n >\n {\n if (canRebalanceResource) {\n setShowRebalanceModal(true)\n }\n }}\n >\n {\n setShowAbortMissionModal(true);\n }}\n >\n {\n gemini1Location === gemini2Location ? \n :\n <>\n \n \n \n }\n {\n Object.entries(gameState.nextMoves).map((location, index) => {\n return (\n \n );\n })\n }\n {\n Object.entries(spaceStationData).map((spaceStation, index) => {\n return ;\n })\n }\n {\n messages.map((message: Message, index: number) => {\n return ;\n })\n }\n {\n showRebalanceModal ?\n setShowRebalanceModal(false)}\n /> : <>\n }\n {\n gameState.status === GameStatus.NotStarted ?\n : <>\n }\n {\n gameState.status === GameStatus.MissionAborted ?\n : <>\n }\n {\n showConfirmMoveModal ?\n {\n setShowConfirmMoveModal(false)\n }}\n /> : <>\n }\n {\n showAbortMissionModal ?\n {\n setShowAbortMissionModal(false);\n }}\n /> : <>\n }\n\n \n\n {\n showTimePortalRoute ? \n : <>\n }\n\n {\n gameState.status === GameStatus.MissionSucceeded ? \n : <>\n }\n\n {\n gameState.status === GameStatus.OutOfResource ? \n : <>\n }\n\n {\n gameState.status === GameStatus.MissionTimeOut ? \n : <>\n }\n\n {\n gameState.status === GameStatus.OxygenProblem ? \n : <>\n }\n\n \n\n \n ;\n}\n","import dotenv from 'dotenv';\n\ndotenv.config();\n\nexport const API_BASE_URL = process.env.REACT_APP_API_BASE_URL;\n","import React, { useState, useEffect } from 'react';\nimport GameBoard from './GameBoard';\nimport SocketContext from './game-context';\nimport { GameDuration, GameState, SocketMessages } from '../metadata/types';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport SocketIOClient from 'socket.io-client';\nimport { Location } from 'history';\nimport queryString from 'query-string';\nimport { API_BASE_URL } from '../config';\n\nconst GlobalStyle = createGlobalStyle`\n body {\n background-color: black;\n }\n`;\n\nconst SocketError = styled.div`\n background-color: rgb(240, 240, 240);\n font-size: 18px;\n display: inline-block;\n padding: 5px;\n position: absolute;\n top: 0;\n left: 50%;\n transform: translate(-50%, 0);\n z-index: 100;\n`;\n\nexport default (props: {\n location: Location,\n}) => {\n const { lobby, room } = queryString.parse(props.location.search);\n\n const [socket, setSocket] = useState();\n const [gameState, setGameState] = useState();\n const [gameDuration, setGameDuration] = useState();\n\n async function setup() {\n let newSocket = SocketIOClient(`${API_BASE_URL}`, {\n path: '/rooms/socket',\n query: {\n lobby: lobby,\n room: room,\n },\n });\n setSocket(newSocket);\n\n newSocket.on(SocketMessages.StateUpdate, (data: string) => {\n const message = JSON.parse(data);\n const newState = message as GameState;\n setGameState(newState);\n });\n\n newSocket.on(SocketMessages.TimeUpdate, (data: string) => {\n const d = JSON.parse(data) as GameDuration;\n setGameDuration(d);\n });\n\n newSocket.on('disconnect', () => {\n setSocket(undefined);\n });\n\n newSocket.on('connect_error', () => {\n setSocket(undefined);\n });\n }\n\n useEffect(() => {\n if (!lobby || !room) {\n return;\n }\n setup();\n }, [lobby, room]);\n\n return <>\n \n {\n socket ?\n <>\n :\n \n Connexion impossible au serveur de la mission Sauvetage d’Orion... Tentez d’actualiser la page ou avertissez votre commandant!\n \n } \n {\n gameState && gameDuration ?\n (\n \n \n \n )\n :\n (\n
En téléchargement...
\n )\n }\n \n}\n","import React from 'react';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport axios from 'axios';\nimport {\n Jumbotron,\n InputGroup,\n FormControl,\n Button,\n} from 'react-bootstrap';\nimport { History } from 'history';\nimport { API_BASE_URL } from '../config';\n\nconst Global = createGlobalStyle`\n html, body {\n background-color: rgb(248, 248, 248) !important;\n }\n`;\n\nconst Wrapper = styled(Jumbotron)`\n margin: 50px auto;\n width: 500px;\n`;\n\nexport default class extends React.Component<{\n history: History,\n }, {\n username: string,\n password: string,\n error?: string,\n}> {\n constructor(props:any){\n super(props);\n this.state = {\n username:'',\n password:'',\n };\n this.handleUsernameChange = this.handleUsernameChange.bind(this);\n this.handlePasswordChange = this.handlePasswordChange.bind(this);\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n }\n\n handleUsernameChange(event: { target: { value: any; }; }){\n this.setState({username: event.target.value});\n }\n handlePasswordChange(event: { target: { value: any; }; }){\n this.setState({password: event.target.value});\n }\n\n onKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter') {\n this.handleFormSubmit();\n }\n }\n\n async handleFormSubmit() {\n if (!this.state.username || !this.state.password) {\n this.setState({ error: 'Username and password must not be empty.'});\n return;\n }\n try {\n const { data } = await axios.post(`${API_BASE_URL}/admin/login`, {\n username: this.state.username,\n password: this.state.password,\n });\n localStorage.setItem('token', data.token);\n localStorage.setItem('username', this.state.username);\n this.props.history.push('/admin/lobbies');\n } catch (err) {\n this.setState({ error: err.response?.data ?? 'Cannot connect to server.' });\n }\n }\n\n render() {\n return <>\n \n \n

Sign In to Manage Rescue Orion

\n \n \n Username\n \n \n \n \n \n Password\n \n \n \n

\n {this.state.error}\n

\n Sign In\n
\n ;\n }\n}\n","import axios from 'axios';\n\nconst client = axios.create();\n\nclient.interceptors.response.use((res) => res, (err) => {\n if (err.response?.status === 401) {\n alert('Your session has expired. Please sign in again.');\n window.location.href = '/admin';\n return;\n }\n if (err.response === undefined) {\n alert('Cannot connect to server.');\n }\n throw err;\n});\n\nexport default client;\n","import styled, { createGlobalStyle } from 'styled-components';\nimport { Navbar, Nav } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\nimport React, { Component } from 'react';\n\nexport const Wrapper = styled.div`\n max-width: 1100px;\n margin: 0 auto;\n min-height: 100vh;\n background-color: rgb(248, 248, 248);\n padding: 20px;\n padding-top: 75px;\n`;\n\nexport const Title = styled.h1`\n margin-bottom: 30px;\n text-align: center;\n`\n\nconst StyledLink = styled(Link)`\n color: #cccccc;\n &:hover {\n color: white;\n text-decoration: none;\n }\n padding: 5px;\n`;\n\nexport const PortalGlobal = createGlobalStyle`\n html, body {\n background-color: rgb(233, 233, 233) !important;\n }\n`;\n\nexport class NavBar extends Component{\n render() {\n return (\n \n \n \n \n );\n }\n}\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useParams } from 'react-router-dom';\nimport SocketIOClient from 'socket.io-client';\nimport {\n GameState,\n GameStatus,\n LobbyState,\n SocketMessages,\n RescueResource,\n LobbyStatus\n} from '../metadata/types';\nimport client from '../axios-client';\nimport fileSave from 'file-saver';\nimport { Jumbotron, Table, Button, Badge, Modal} from 'react-bootstrap';\nimport styled from 'styled-components';\nimport { PortalGlobal, Title, Wrapper, NavBar } from './styles';\nimport { formatTime, localeTimeString } from '../time-format-utils';\nimport { API_BASE_URL } from '../config';\n\nconst LobbyControls = styled.div`\n min-width: 350px;\n display: table;\n margin: 0 auto;\n`;\n\nconst Time = styled.span`\n font-family: 'Courier New', Courier, monospace;\n`;\n\nexport default () => {\n const { code } = useParams<{ code?: string }>();\n\n const [_, setSocket] = useState();\n const [duration, setDuration] = useState(0);\n const [countdownMinutes, setCountdownMinutes] = useState(0);\n const [countdownSeconds, setCountdownSeconds] = useState(0);\n const [createTime, setCreateTime] = useState();\n const [rooms, setRooms] = useState<{ [name: string]: GameState }>({});\n const [status, setStatus] = useState();\n const [notFound, setNotFound] = useState(false);\n\n const [startGameStatus, setStartGameStatus] = useState(false);\n const [configCountdownStatus, setConfigCountdownStatus] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const [restartModal, setRestartModal] = useState();\n\n const stateRef = useRef<{ [name: string]: GameState }>();\n stateRef.current = rooms;\n\n useEffect(() => {\n client.get(`${API_BASE_URL}/lobbies/${code}`, {\n headers: { Authorization: `bearer ${localStorage.getItem('token')}` }\n })\n .then((res) => {\n setCreateTime(localeTimeString(res.data.createTime));\n })\n .catch((err) => {\n if (err.response?.status === 404) {\n setNotFound(true);\n }\n });\n \n const newSocket = SocketIOClient(`${API_BASE_URL}`, {\n path: '/lobbies/socket',\n query: {\n lobby: code,\n token: localStorage.getItem('token'),\n }\n });\n setSocket(newSocket);\n\n newSocket.on(SocketMessages.LobbyUpdate, (data: string) => {\n const state = JSON.parse(data) as LobbyState;\n setStatus(state.status);\n setDuration(state.gameDuration.duration);\n setCountdownMinutes(Math.floor(state.gameDuration.countdown / 60));\n setCountdownSeconds(state.gameDuration.countdown % 60);\n if (Object.keys(state.updatedRooms).length > 0) {\n const newRooms = {...stateRef.current};\n Object.keys(state.updatedRooms).forEach((name) => {\n newRooms[name] = state.updatedRooms[name];\n });\n setRooms(newRooms);\n }\n });\n\n newSocket.on('disconnect', () => {\n setSocket(undefined);\n });\n\n newSocket.on('connect_error', () => {\n setSocket(undefined);\n });\n }, []);\n\n function onKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter') {\n setGameCountdown();\n }\n }\n\n function onMinutesChange(e: React.ChangeEvent) {\n const value = parseInt(e.target.value);\n if (isNaN(value) || !Number.isInteger(value)) {\n setCountdownMinutes(0);\n return;\n }\n if (value < 1 || value > 999) {\n return;\n }\n setCountdownMinutes(value);\n }\n\n function onSecondsChange(e: React.ChangeEvent) {\n const value = parseInt(e.target.value);\n if (isNaN(value) || !Number.isInteger(value)) {\n setCountdownSeconds(0);\n return;\n }\n if (value < 0 || value >= 60) {\n return;\n }\n setCountdownSeconds(value);\n }\n\n function startGames() {\n client.put(`${API_BASE_URL}/lobbies/start/${code}`, {}, {\n headers: { Authorization: `bearer ${localStorage.getItem('token')}` }\n })\n .then(() => {\n setShowModal(false);\n })\n .catch((err) => {\n setStartGameStatus(err.response.data);\n });\n }\n\n function setGameCountdown() {\n const countdownInSeconds = countdownMinutes * 60 + countdownSeconds;\n client.put(`${API_BASE_URL}/lobbies/countdown/${code}`, { \n countdown: countdownInSeconds\n }, {\n headers: { Authorization: `bearer ${localStorage.getItem('token')}` }\n })\n .then(() => {\n setConfigCountdownStatus(true);\n setTimeout(() => setConfigCountdownStatus(false), 5000);\n })\n .catch((err) => {\n setConfigCountdownStatus(err.response.data);\n });\n }\n\n function restartGame(room: string) {\n client.post(`${API_BASE_URL}/rooms/restart/${code}/${room}`, {},\n { headers: { Authorization: `bearer ${localStorage.getItem('token')}` }}\n )\n .then(() => setRestartModal(undefined));\n }\n\n function exportSnapshot() {\n const lines = Object.keys(rooms).reduce((accumulator: string[], name: string) => {\n const stats = rooms[name].gameStats;\n const strings = [\n name,\n stats.dropOffTimes[RescueResource.O2ReplacementCells],\n stats.dropOffTimes[RescueResource.OxygenRepairTeam],\n stats.dropOffTimes[RescueResource.WaterRepairTeam],\n stats.dropOffTimes[RescueResource.FoodRepairTeam],\n stats.dropOffTimes[RescueResource.MedicalRepairTeam],\n stats.scientistsRemaining,\n rooms[name].endTime ? formatTime(rooms[name].endTime! - rooms[name].startTime + rooms[name].accumulatedTime) : '',\n rooms[name].status,\n ];\n accumulator.push(`${strings.join(',')}\\n`);\n return accumulator;\n }, ['Name,O2-temp,Oxygen,Water,Food,Medical,Scientists,Day,Duration,Status\\n']);\n const blob = new Blob(lines, { type: 'text/plain;charset=utf-8', endings: 'native' });\n fileSave.saveAs(blob, `lobby_${code} at ${createTime}.csv`);\n }\n\n return <>\n \n \n \n {\n createTime ?\n <>\n \n Lobby {code}\n \n

\n Time created: {createTime}\n

\n

\n {'Lobby status: '}\n {status ?? 'Unknown'}\n {' '}\n setShowModal(true)}\n disabled={status !== LobbyStatus.Waiting}\n >Start Games\n {\n startGameStatus ?\n (\n typeof startGameStatus === 'string' ?\n {startGameStatus} : <>✓\n )\n :\n <>\n }\n

\n

\n {'Time remaining: '}\n {\n status === LobbyStatus.Waiting ?\n <>\n 0 ? `${countdownMinutes}`.replace(/^0+/, ''): 0}\n onChange={onMinutesChange}\n onFocus={(e) => e.target.select()}\n disabled={status !== LobbyStatus.Waiting}\n type='number'\n min={0}\n max={999}\n step={1}\n onKeyDown={onKeyDown}\n />\n :\n 0 ? `${countdownSeconds}`.replace(/^0+/, ''): 0}\n onChange={onSecondsChange}\n onFocus={(e) => e.target.select()}\n disabled={status !== LobbyStatus.Waiting}\n type='number'\n min={0}\n max={59}\n step={1}\n onKeyDown={onKeyDown}\n />\n \n :\n \n }\n {' '}\n Set\n {\n configCountdownStatus ?\n (\n typeof configCountdownStatus === 'string' ?\n {configCountdownStatus} : <>✓\n )\n :\n <>\n }\n

\n
\n
\n Export lobby snapshot as csv file\n

\n Teams: {Object.keys(rooms).length}, not finished: {\n Object.values(rooms).reduce((accumulator: number, state: GameState) => {\n if (state.status === GameStatus.NotStarted || state.status === GameStatus.Started) {\n return accumulator + 1;\n }\n return accumulator;\n }, 0)\n }\n

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n Object.keys(rooms).map((name, index) => {\n const game = rooms[name];\n const dropOffTimes = game.gameStats.dropOffTimes;\n return \n \n {\n [\n RescueResource.O2ReplacementCells,\n RescueResource.OxygenRepairTeam,\n RescueResource.WaterRepairTeam,\n RescueResource.FoodRepairTeam,\n RescueResource.MedicalRepairTeam,\n ].map((resource, index) => )\n }\n \n \n \n \n \n ;\n })\n }\n \n
Crew NameO2-temp
(day 6)
Oxygen
(day 21)
Water
(day 23)
Food
(day 24)
Medical
(day 25)
ScientistsDay CountMission TimeMission StatusRestart
{name}\n {dropOffTimes[resource] >= 0 ? dropOffTimes[resource] : '-'}\n \n {\n `${game.gameStats.scientistsRemaining}/20`\n }\n {game.time}\n \n {game.status}\n setRestartModal(name)}\n >Restart\n
\n \n :\n \n \n {\n notFound ?\n `Lobby ${code} does not exist.`\n :\n `Loading lobby ${code}...`\n }\n \n \n }\n
\n setShowModal(false)}\n >\n \n

About to start games

\n
\n \n

Are you sure to start games?

\n

It cannot be undone.

\n

No rooms can be added afterwards.

\n
\n \n setShowModal(false)}\n >Cancel\n Yes, let's start\n \n \n setRestartModal(undefined)}\n >\n \n

About to restart room {restartModal}

\n
\n \n

Are you sure to restart mission for room {restartModal}?

\n

It cannot be undone and data of the current mission will be lost.

\n
\n \n setRestartModal(undefined)}\n >Cancel\n restartGame(restartModal ?? '')}\n >Yes, restart\n \n \n ;\n}","import React, { useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport client from '../axios-client';\nimport { Jumbotron, Table, Button, Modal } from 'react-bootstrap';\nimport { PortalGlobal, Title, Wrapper, NavBar } from './styles';\nimport styled from 'styled-components';\nimport { localeTimeString } from '../time-format-utils';\nimport { API_BASE_URL } from '../config';\n\nconst TableCell = styled.td`\n &:hover {\n cursor: pointer;\n }\n`;\n\nconst HighlightableRow = styled.tr`\n background-color: ${(props: { highlight: boolean }) =>\n props.highlight ? '#fff2a8' : 'auto'\n };\n`;\n\nexport default () => {\n\n const history = useHistory();\n const [lobbies, setLobbies] = useState<{ code: number, createTime: number }[]>([]);\n const [deleteModal, setDeleteModal] = useState();\n const [newLobby, setNewLobby] = useState();\n const [newLobbyDisplayTimeout, setNewLobbyDisplayTimeout] = useState();\n\n useEffect(loadLobbies, []);\n\n function loadLobbies() {\n client.get(`${API_BASE_URL}/lobbies`,\n { headers: { Authorization: `bearer ${localStorage.getItem('token')}` }}\n )\n .then((res) => {\n setLobbies(res.data);\n });\n }\n\n function createLobby() {\n client.post(`${API_BASE_URL}/lobbies`, {}, {\n headers: { Authorization: `bearer ${localStorage.getItem('token')}` }\n })\n .then((res) => {\n setNewLobby(res.data.code);\n loadLobbies();\n clearTimeout(newLobbyDisplayTimeout);\n const timeout = setTimeout(() => setNewLobby(undefined), 5000);\n setNewLobbyDisplayTimeout(timeout);\n });\n }\n\n function deleteLobby(code: number) {\n client.delete(`${API_BASE_URL}/lobbies/${code}`, {\n headers: { Authorization: `bearer ${localStorage.getItem('token')}` }\n })\n .then(() => {\n setDeleteModal(undefined);\n loadLobbies();\n });\n }\n\n function navigateToLobby(code: number) {\n history.push(`/admin/lobbies/${code}`);\n }\n \n return <>\n \n \n \n \n Welcome, {localStorage.getItem('username')}\n
The table below contains the list of lobbies you are in charge of...
\n
\n Create Lobby\n \n \n \n \n \n \n \n {\n lobbies.map((lobby, index) => {\n const timeString = localeTimeString(lobby.createTime);\n return \n navigateToLobby(lobby.code)}>{lobby.code}\n \n \n ;\n })\n }\n \n
Lobby CodeCreate TimeClose Lobby
{timeString}\n setDeleteModal(lobby.code)}\n >Shut Down\n
\n
\n setDeleteModal(undefined)}\n >\n \n

About to shut down lobby {deleteModal}

\n
\n \n

Are you sure to shutdown lobby {deleteModal}?

\n

It cannot be undone and all games in it will be lost.

\n
\n \n setDeleteModal(undefined)}\n >Cancel\n deleteLobby(deleteModal!)}\n >Yes, shut it down\n \n \n ;\n}","import React from 'react';\nimport { Route, RouteComponentProps } from 'react-router-dom';\nimport Login from './Login';\nimport RoomListPage from './RoomListPage';\nimport LobbyListPage from './LobbyListPage';\n\nexport default (props: RouteComponentProps) => {\n\n return <>\n \n \n \n \n \n}","import React, { useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport client from '../axios-client';\nimport { Jumbotron, InputGroup, FormControl, Button, Modal } from 'react-bootstrap';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { API_BASE_URL } from '../config';\n\nconst Wrapper = styled(Jumbotron)`\n margin: 50px auto;\n width: 500px;\n`;\n\nconst Global = createGlobalStyle`\n body {\n background-image: url(${`${process.env.PUBLIC_URL}/join_background.jpg`});\n background-size: cover;\n }\n`;\n\nexport default () => {\n const history = useHistory();\n const [roomName, setRoomName] = useState('');\n const [lobbyCode, setLobbyCode] = useState('');\n const [showReconnectModal, setShowReconnectModal] = useState(false);\n const [error, setError] = useState();\n\n function joinRoom() {\n if (!lobbyCode || !roomName) {\n setError('Le code de lobby et le nom d’équipage ne doivent pas être vides.');\n return;\n }\n client.post(`${API_BASE_URL}/rooms`, {\n lobby: lobbyCode,\n room: roomName,\n }).then(() => redirectToRoom())\n .catch((err) => {\n if (err.response.status === 403) {\n setShowReconnectModal(true);\n } else {\n setError(err.response.data);\n }\n });\n }\n\n function redirectToRoom() {\n history.push(`/rooms?lobby=${lobbyCode}&room=${roomName}`);\n }\n\n function onKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter') {\n joinRoom();\n }\n }\n\n return <>\n \n \n \n

Joignez Rescue Orion

\n \n \n Code du lobby\n \n setLobbyCode(e.target.value)}\n onKeyDown={onKeyDown}\n />\n \n \n \n Nom de l’équipage\n \n setRoomName(e.target.value)}\n onKeyDown={onKeyDown}\n />\n \n

\n {error}\n

\n Joindre\n
\n setShowReconnectModal(false)}\n >\n \n

Le nom d’équipage {roomName} est déjà utilisé

\n
\n \n

Tentez-vous une nouvelle ouverture de session?

\n

Vous expulserez tout autre utilisateur qui est connecté à la salle.

\n
\n \n setShowReconnectModal(false)}\n >Non, entrez un autre nom.\n Oui, ouvrez une nouvelle session.\n \n \n ;\n}","import React from 'react';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { Jumbotron, Button, Col, Row } from 'react-bootstrap';\nimport { useHistory } from 'react-router-dom';\n\nconst Global = createGlobalStyle`\n html, body {\n background-color: rgb(248, 248, 248) !important;\n }\n`;\n\nconst Wrapper = styled(Jumbotron)`\n margin: 50px auto;\n width: 500px;\n`;\n\nexport default () => {\n\n const history = useHistory();\n\n return <>\n \n \n \n

\n Bienvenue dans le Rescue Orion\n

\n

\n Êtes-vous un administrateur ou un joueur?\n

\n \n \n history.push('/admin')}\n variant='info'\n block\n >Administrateur\n \n \n history.push('/join')}\n variant='success'\n block\n >Joueur\n \n \n
\n ;\n}","import React from 'react';\nimport { BrowserRouter, Switch, Route } from 'react-router-dom';\nimport Room from './room';\nimport Admin from './admin';\nimport Join from './join';\nimport Landing from './Landing';\n\nexport default () => {\n\n return \n \n \n \n \n \n \n \n \n}","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport './fonts/Orbitron/Orbitron-VariableFont_wght.ttf';\nimport './index.css';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}