{"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.8918ed4e.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 = 'Aguardando',\n Started = 'Em andamento',\n Finished = 'Terminou',\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 = 'Células de reposição de O2',\n FoodRepairTeam = 'Equipe de recuperação de comida',\n WaterRepairTeam = 'Equipe de manutenção hidráulica',\n MedicalRepairTeam = 'Equipe médica',\n OxygenRepairTeam = 'Equipe de manutenção de oxigênio',\n AITechnology = 'Tecnologia de 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 = 'Aguardando',\n Started = 'Começou',\n MissionSucceeded = 'Missão cumprida',\n MissionTimeOut = 'A missão expirou',\n MissionAborted = 'Missão abandonada',\n OutOfResource = 'Sem recursos',\n OxygenProblem = 'Sem oxigênio',\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 = 'sagitário';\nexport const CASSIOPEIA = 'cassiopeia';\nexport const ANDROMEDA = 'andrômeda';\nexport const ORION = 'órion';\nexport const AQUARIUS = 'aquário';\nexport const CAPRICORN = 'capricórnio';\nexport const BOREALIS = 'boreal';","import { LocationType, LocationMetadata } from './types';\n\nconst metadata: LocationMetadata = {\n 'sagitário': {\n location: {\n id: 'sagitário',\n type: LocationType.BeaconStar,\n spaceStationName: 'sagitário',\n },\n neighbors: [\n 't1',\n 'b3',\n ],\n pixelPosition: { left: 487, top: 594 },\n },\n 'cassiopeia': {\n location: {\n id: 'cassiopeia',\n type: LocationType.BeaconStar,\n spaceStationName: 'cassiopeia',\n },\n neighbors: [\n 'b6',\n 'b35',\n 'h2',\n ],\n pixelPosition: { left: 803, top: 695 },\n },\n 'andrômeda': {\n location: {\n id: 'andrômeda',\n type: LocationType.BeaconStar,\n spaceStationName: 'andrômeda',\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 'sagitário',\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 'cassiopeia',\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 'andrômeda',\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 'cassiopeia',\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 'cassiopeia',\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 'andrômeda',\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 'sagitário',\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: 'órion',\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: 'aquário',\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: 'capricórnio',\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: 'boreal',\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 'andrômeda': {\n location: 'andrômeda',\n message: {\n asset: 'modals/Andromeda_Information_Card.jpg',\n note: \"RECURSOS DE RESGATE DISPONÍVEIS NESTA ESTAÇÃO PARA SEREM ADQUIRIDOS VIA PASSARELA ESTELAR\",\n technology: \"Equipe de manutenção alimentar\",\n title: 'Equipe de manutenção alimentar',\n paragraphs:[\n {text: 'A equipe de manutenção alimentar está em outra missão e não retornará a Andrômeda até o dia 14.'}\n ],\n sideNote: \"disponível no dia 14\",\n }\n },\n 'aquário': {\n location: 't3',\n message: {\n asset: 'modals/Aquarius_Information_Card.jpg',\n note: \"RECURSOS DE RESGATE DISPONÍVEIS NESTA ESTAÇÃO PARA SEREM ADQUIRIDOS VIA PASSARELA ESTELAR\",\n technology: \"Equipe de manutenção hidráulica\",\n title: 'COMIDA EM ÓRION',\n paragraphs: [\n {text: 'Os sistemas de processamento de comida foram destruídos no momento do acidente.'},\n {text: 'As reservas de comida de emergência estão acabando e a perda de vida começará no dia 24 a não ser que elas sejam consertadas.'},\n {text: 'Uma equipe de manutenção alimentar ficará disponível em Andrômeda.'},\n ],\n }\n },\n 'boreal': {\n location: 't5',\n message: {\n asset: 'modals/Borealis_Information_Card.jpg',\n note: \"RECURSOS DE RESGATE DISPONÍVEIS NESTA ESTAÇÃO PARA SEREM ADQUIRIDOS VIA PASSARELA ESTELAR\",\n technology: \"Equipe de manutenção de oxigênio\",\n title: 'REPAROS DE O2 EM ÓRION',\n paragraphs: [\n {text: 'A equipe de manutenção de O2 pode restaurar imediatamente e de maneira permanente o oxigênio em Órion assim que chegarem lá.'},\n {text: 'No entanto, eles não podem sair de Boreal enquanto a tecnologia IA de Capricórnio não chegar para os substituir.'},\n {text: 'Sair antes disso irá colocar todos os 200 cientistas em Boreal em risco.'},\n ],\n }\n },\n 'capricórnio': {\n location: 't4',\n message: {\n asset: 'modals/Capricorn_Information_Card.jpg',\n note: \"RECURSOS DE RESGATE DISPONÍVEIS NESTA ESTAÇÃO PARA SEREM ADQUIRIDOS VIA PASSARELA ESTELAR\",\n technology: \"Tecnologia IA\",\n title: 'FERIDOS EM ÓRION',\n paragraphs: [\n {text: 'Três pessoas foram feridas no momento do acidente.'},\n {text: 'Os feridos estão piorando progressivamente e morrerão no dia 25 sem o tratamento médico avançado.'},\n {text: 'A equipe médica está atualmente em Cassiopeia.'},\n ]\n }\n },\n 'cassiopeia': {\n location: 'cassiopeia',\n message: {\n asset: 'modals/Cassiopeia_Information_Card.jpg',\n note: \"RECURSOS DE RESGATE DISPONÍVEIS NESTA ESTAÇÃO PARA SEREM ADQUIRIDOS VIA PASSARELA ESTELAR\",\n technology: \"Equipe médica\",\n title: 'FORNECIMENTO DE ÁGUA EM ÓRION',\n paragraphs: [\n {text: 'O sistema de purificação de água desligou durante o acidente.'},\n {text: 'Há reserva de água suficiente para manter os cientistas vivos, mas apenas até o dia 23. A perda de vida começará a ocorrer novamente a não ser que o sistema de água da estação seja consertado permanentemente.'},\n {text: 'Uma equipe de manutenção hidráulica está disponível em Aquário.'},\n ]\n }\n },\n 'órion': {\n location: 't2',\n message: {\n asset: 'modals/Orion_Information_Card.jpg',\n title: 'O2 EM ÓRION',\n paragraphs: [\n {text: 'Os cientistas na Estação Espacial Órion estão rapidamente ficando sem oxigênio.'},\n {text: 'As células de substituição de O2 a bordo da sua nave resolverão temporariamente o problema de geração de oxigênio até o dia 21.'},\n {text: 'A perda de vida começará a ocorrer novamente se uma solução permanente de geração de oxigênio não estiver instalada até o dia 21.'},\n ]\n }\n },\n 'sagitário': {\n location: 'sagitário',\n message: {\n asset: 'modals/Sagittarius_Information_Card.jpg',\n title: 'DANOS À ESTAÇÃO ESPACIAL ÓRION',\n paragraphs: [\n {text: 'A principal fonte de geração de oxigênio de Órion foi gravemente atingida.'},\n {text: 'Eles têm apenas 6 dias de suprimento de oxigênio antes do início da perda de vidas.'},\n {text: 'Sem os reparos, a geração de oxigênio irá parar completamente em 21 dias.'},\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 Células de energia: {station.energyCells}\n \n \n Kit de sobrevivência: {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 I\n \n Células de energia: {gemini_1.energyCells}\n \n \n Kit de sobrevivência: {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 II\n \n Células de energia: {gemini_2.energyCells}\n \n \n Kit de sobrevivência: {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 I\n \n Células de energia\n \n \n \n {gemini_1.energyCells}\n \n \n \n Kit de sobrevivência\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 II\n \n Células de energia\n \n \n \n {gemini_2.energyCells}\n \n \n \n Kit de sobrevivência\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 Estatística do seu jogo\n \n \n Voltar a Sagitário\n \n {\n state.status === GameStatus.MissionSucceeded ?\n `Dia ${state.time}` : 'Não terminou'\n }\n \n \n \n Cientistas salvos\n \n {\n state.status === GameStatus.MissionSucceeded ?\n `${stats.scientistsRemaining} de 20` : 'Nenhum'\n }\n \n \n \n Duração da missão\n \n {\n formatTime(state.endTime! - state.startTime + state.accumulatedTime)\n }\n \n \n \n Oxigênio temporário (necessário pelo dia 6)\n \n {\n stats.dropOffTimes[RescueResource.O2ReplacementCells] > -1 ?\n `Entregue no dia ${stats.dropOffTimes[RescueResource.O2ReplacementCells]}` : 'Não consertou ou conseguiu'\n }\n \n \n \n \n \n Oxigênio (necessário pelo dia 21)\n \n {\n stats.dropOffTimes[RescueResource.OxygenRepairTeam] > -1 ?\n `Entregue no dia ${stats.dropOffTimes[RescueResource.OxygenRepairTeam]}` : 'Não consertou ou conseguiu'\n }\n \n \n \n Água (necessária pelo dia 23)\n \n {\n stats.dropOffTimes[RescueResource.WaterRepairTeam] > -1 ?\n `Entregue no dia ${stats.dropOffTimes[RescueResource.WaterRepairTeam]}` : 'Não consertou ou conseguiu'\n }\n \n \n \n Comida (necessária pelo dia 24)\n \n {\n stats.dropOffTimes[RescueResource.FoodRepairTeam] > -1 ?\n `Entregue no dia ${stats.dropOffTimes[RescueResource.FoodRepairTeam]}` : 'Não consertou ou conseguiu'\n }\n \n \n \n Equipe médica (necessária pelo dia 25)\n \n {\n stats.dropOffTimes[RescueResource.FoodRepairTeam] > -1 ?\n `Entregue no dia ${stats.dropOffTimes[RescueResource.FoodRepairTeam]}` : 'Não consertou ou conseguiu'\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 Missão abandonada!\n
\n \n

Você abandonou sua missão e, sem sua ajuda, tememos que o pior tenha acontecido na Estação Espacial Órion.

\n

Alerte o comandante espacial para vir e instruir sobre o que fazer a seguir.

\n

-Controle de solo

\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 Você quer confirmar o movimento?\n
\n \n \n Gemini I\n \n

Células de energia

\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

Kit de sobrevivência

\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 II\n \n

Células de energia

\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

Kit de sobrevivência

\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>Dia {day}</span> <i className=\"fas fa-long-arrow-alt-right\"></i> <span>Dia {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 Bem-vindos de volta a Sagitário!\n
\n \n

Estamos muito animados para ouvir as histórias da sua missão bem-sucedida!

\n

Quando estiverem prontos, chamem o comandante espacial para parabenizá-los pessoalmente!

\n

Agradecemos por tudo o que fizeram para resgatar Órion!

\n

-Controle de solo

\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 Esperando o comandante iniciar a missão...\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 Transmissão recebida do controle de solo\n
\n \n

Oh não! Sua nave esgotou os recursos necessários para mantê-la em movimento para que vocês possam cumprir sua missão!

\n

Envie uma chamada de socorro para o comandante espacial e enviaremos mais instruções.

\n

-Controle de solo

\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 Atenção, tripulação Gemini.\n
\n \n

Infelizmente, o tempo da sua missão de resgatar Órion acabou.

\n

Nossa equipe de comando continuará trabalhando para salvar a estação espacial, mas agora precisam de vocês no centro de comando.

\n

Apertem os cintos: estamos prestes a transportá-los de volta para se encontrarem com o comandante espacial para que possamos relatar sua missão.

\n

-Controle de solo

\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 Transmissão recebida do controle de solo\n
\n \n

Oh não! Parece que vocês chegaram tarde.

\n

Os sistemas de oxigênio não foram consertados permanentemente a tempo e o pior aconteceu. Todos os cientistas da Estação Espacial Órion perderam suas vidas e estão agora em meio às estrelas!

\n

Embora a gente não tenha concluído com sucesso nossa missão, vamos conversar... onde erramos? O que poderíamos ter feito de forma diferente?

\n

-Controle de solo

\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 Não foi possível conectar ao servidor de Resgate: Órion. Tente atualizar a página ou notifique seu comandante!\n \n } \n {\n gameState && gameDuration ?\n (\n \n \n \n )\n :\n (\n
Carregando...
\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: 'O nome de usuário e a senha não podem estar vazios.'});\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 ?? 'Não é possível se conectar ao servidor.' });\n }\n }\n\n render() {\n return <>\n \n \n

Faça o login para gerenciar Resgate: Órion

\n \n \n Nome de usuário\n \n \n \n \n \n Senha\n \n \n \n

\n {this.state.error}\n

\n Entrar\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('A sua sessão expirou. Faça o login novamente.');\n window.location.href = '/admin';\n return;\n }\n if (err.response === undefined) {\n alert('Não é possível se conectar ao servidor.');\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 Hora que foi gerado: {createTime}\n

\n

\n {'Status do lobby: '}\n {status ?? 'Unknown'}\n {' '}\n setShowModal(true)}\n disabled={status !== LobbyStatus.Waiting}\n >Iniciar os jogos\n {\n startGameStatus ?\n (\n typeof startGameStatus === 'string' ?\n {startGameStatus} : <>✓\n )\n :\n <>\n }\n

\n

\n {'Tempo restante: '}\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 Defina\n {\n configCountdownStatus ?\n (\n typeof configCountdownStatus === 'string' ?\n {configCountdownStatus} : <>✓\n )\n :\n <>\n }\n

\n
\n
\n Exportar resumo do lobby como arquivo CSV\n

\n Equipes: {Object.keys(rooms).length}, não terminaram: {\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
Nome da tripulaçãoO2 temporário
(dia 6)
Oxigênio
(dia 21)
Água
(dia 23)
Alimentação
(dia 24)
Equipe médica
(dia 25)
CientistasContagem dos diasTempo da missãoStatus da missãoReiniciar
{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 >Reiniciar\n
\n \n :\n \n \n {\n notFound ?\n `Lobby ${code} não existe.`\n :\n `Carregando lobby ${code}...`\n }\n \n \n }\n
\n setShowModal(false)}\n >\n \n

Prestes a iniciar os jogos

\n
\n \n

Tem certeza de que quer iniciar os jogos?

\n

Não é possível desfazer.

\n

Nenhuma sala pode ser adicionada após o início.

\n
\n \n setShowModal(false)}\n >Cancelar\n Sim, vamos iniciar\n \n \n setRestartModal(undefined)}\n >\n \n

Prestes a reiniciar sala {restartModal}

\n
\n \n

Você tem certeza de que quer reiniciar a missão para a sala {restartModal}?

\n

Isso não poderá ser desfeito e os dados da missão atual serão perdidos.

\n
\n \n setRestartModal(undefined)}\n >Cancelar\n restartGame(restartModal ?? '')}\n >Sim, reiniciar\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 Bem-vindo(a), {localStorage.getItem('username')}\n
A tabela abaixo contém a lista de lobbies pelos quais você é responsável...
\n
\n Gerar 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
Código do lobbyHora que foi geradoFechar lobby
{timeString}\n setDeleteModal(lobby.code)}\n >Fechar\n
\n
\n setDeleteModal(undefined)}\n >\n \n

Prestes a fechar o lobby {deleteModal}

\n
\n \n

Você tem certeza de que quer fechar o lobby {deleteModal}?

\n

Isso não pode ser desfeito e todos os jogos nele serão perdidos.

\n
\n \n setDeleteModal(undefined)}\n >Cancelar\n deleteLobby(deleteModal!)}\n >Sim, fechar\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('O código do lobby e o nome da tripulação não devem estar vazios.');\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

Entre em Resgate: Órion

\n \n \n Código\n \n setLobbyCode(e.target.value)}\n onKeyDown={onKeyDown}\n />\n \n \n \n Equipe\n \n setRoomName(e.target.value)}\n onKeyDown={onKeyDown}\n />\n \n

\n {error}\n

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

O nome da equipe {roomName} já está em uso.

\n
\n \n

Você está tentando se conectar novamente?

\n

Você vai expulsar qualquer pessoa que esteja conectada à sala.

\n
\n \n setShowReconnectModal(false)}\n >Não, insira outro nome\n Sim, conecte novamente\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 Bem-vindo(a) a Resgate: Órion\n

\n

\n Você é administrador ou jogador?\n

\n \n \n history.push('/admin')}\n variant='info'\n block\n >Administrador\n \n \n history.push('/join')}\n variant='success'\n block\n >Jogador\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":""}