{"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.13cee561.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 = 'Esperando',\n Started = 'En progreso',\n Finished = 'Finalizó',\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 = 'Celdas de reposición de O2',\n FoodRepairTeam = 'Equipo de mantenimiento de alimentos',\n WaterRepairTeam = 'Equipo de mantenimiento hidráulico',\n MedicalRepairTeam = 'Equipo médico',\n OxygenRepairTeam = 'Equipo de mantenimiento de oxígeno',\n AITechnology = 'Tecnología 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 = 'Esperando',\n Started = 'Comenzó',\n MissionSucceeded = 'Misión cumplida',\n MissionTimeOut = 'La misión expiró',\n MissionAborted = 'Misión abortada',\n OutOfResource = 'Sin recursos',\n OxygenProblem = 'Sin oxígeno',\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 = 'sagitario';\nexport const CASSIOPEIA = 'casiopea';\nexport const ANDROMEDA = 'andrómeda';\nexport const ORION = 'orión';\nexport const AQUARIUS = 'acuario';\nexport const CAPRICORN = 'capricornio';\nexport const BOREALIS = 'boreal';","import { LocationType, LocationMetadata } from './types';\n\nconst metadata: LocationMetadata = {\n 'sagitario': {\n location: {\n id: 'sagitario',\n type: LocationType.BeaconStar,\n spaceStationName: 'sagitario',\n },\n neighbors: [\n 't1',\n 'b3',\n ],\n pixelPosition: { left: 487, top: 594 },\n },\n 'casiopea': {\n location: {\n id: 'casiopea',\n type: LocationType.BeaconStar,\n spaceStationName: 'casiopea',\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 'sagitario',\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 'casiopea',\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 'casiopea',\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 'casiopea',\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 'sagitario',\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: 'orión',\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: 'acuario',\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: 'capricornio',\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 PARA EL RESCATE DISPONIBLES EN ESTA ESTACIÓN PARA RECOGIDA POR VÍA ESTELAR\",\n technology: \"Equipo de mantenimiento de alimentos\",\n title: 'Equipo de mantenimiento de alimentos',\n paragraphs:[\n {text: 'Actualmente, el equipo de mantenimiento de alimentos está en otra misión y solo regresará a Andrómeda el Día 14.'}\n ],\n sideNote: \"disponible el Día 14\",\n }\n },\n 'acuario': {\n location: 't3',\n message: {\n asset: 'modals/Aquarius_Information_Card.jpg',\n note: \"RECURSOS PARA EL RESCATE DISPONIBLES EN ESTA ESTACIÓN PARA RECOGIDA POR VÍA ESTELAR\",\n technology: \"Equipo de mantenimiento hidráulico\",\n title: 'COMIDA EN ORIÓN',\n paragraphs: [\n {text: 'Los sistemas de procesado de alimentos fueron destruidos en el momento del daño.'},\n {text: 'Las reservas de alimentos de emergencia se están agotando. Si esto no se repara, se empezarán a perder vidas el Día 24.'},\n {text: 'Un equipo de mantenimiento de alimentos estará disponible en Andrómeda.'},\n ],\n }\n },\n 'boreal': {\n location: 't5',\n message: {\n asset: 'modals/Borealis_Information_Card.jpg',\n note: \"RECURSOS PARA EL RESCATE DISPONIBLES EN ESTA ESTACIÓN PARA RECOGIDA POR VÍA ESTELAR\",\n technology: \"Equipo de mantenimiento de oxígeno\",\n title: 'MANTENIMIENTO DE O2 EN ORIÓN',\n paragraphs: [\n {text: 'El equipo de mantenimiento de O2 puede restaurar de manera inmediata y permanente el O2 en Orión desde su llegada a la estación.'},\n {text: 'Sin embargo, no pueden salir de Boreal hasta que la tecnología de IA de Capricornio venga a reemplazarlos.'},\n {text: 'Salir con el equipo de mantenimiento de O2 antes de eso pondrá en riesgo a 200 científicos en Boreal.'},\n ],\n }\n },\n 'capricornio': {\n location: 't4',\n message: {\n asset: 'modals/Capricorn_Information_Card.jpg',\n note: \"RECURSOS PARA EL RESCATE DISPONIBLES EN ESTA ESTACIÓN PARA RECOGIDA POR VÍA ESTELAR\",\n technology: \"Tecnología de IA\",\n title: 'HERIDOS EN ORIÓN',\n paragraphs: [\n {text: 'Se produjeron 3 heridos en el momento de la avería.'},\n {text: 'Los heridos están empeorando y los tres morirán el Día 25 si no reciben tratamiento médico avanzado.'},\n {text: 'Actualmente, el equipo médico está disponible en Casiopea.'},\n ]\n }\n },\n 'casiopea': {\n location: 'casiopea',\n message: {\n asset: 'modals/Cassiopeia_Information_Card.jpg',\n note: \"RECURSOS PARA EL RESCATE DISPONIBLES EN ESTA ESTACIÓN PARA RECOGIDA POR VÍA ESTELAR\",\n technology: \"Equipo médico\",\n title: 'PROVISIÓN DE AGUA EN ORIÓN',\n paragraphs: [\n {text: 'El sistema de purificación de agua se apagó durante los daños.'},\n {text: 'Hay suficiente agua de reserva para mantener a los científicos vivos, pero solo hasta el Día 23. Se empezarán a perder vidas a no ser que los sistemas hidráulicos de la estación se arreglen de forma permanente.'},\n {text: 'Un equipo de mantenimiento hidráulico está disponible en Acuario.'},\n ]\n }\n },\n 'orión': {\n location: 't2',\n message: {\n asset: 'modals/Orion_Information_Card.jpg',\n title: 'O2 EN ORIÓN ',\n paragraphs: [\n {text: 'Los científicos de la Estación Espacial Orión se están quedando rápidamente sin oxígeno.'},\n {text: 'Las celdas de reposición de O2 que están a bordo de la nave resolverán temporalmente el problema de suministro de oxígeno hasta el Día 21.'},\n {text: 'Se empezarán a perder vidas si una solución permanente de generación de oxígeno no se instala hasta el Día 21.'},\n ]\n }\n },\n 'sagitario': {\n location: 'sagitario',\n message: {\n asset: 'modals/Sagittarius_Information_Card.jpg',\n title: 'AVERÍAS EN LA ESTACIÓN ESPACIAL ORIÓN',\n paragraphs: [\n {text: 'La principal fuente de generación de oxígeno de Orión se ha averiado gravemente.'},\n {text: 'Solo les quedan 6 días de suministro de oxígeno antes de que empiecen a perderse vidas.'},\n {text: 'Sin las reparaciones, la generación de oxígeno se apagará completamente en 21 días.'},\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: -25px;\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 Celdas de energía: {station.energyCells}\n \n \n Kits de sobrevivencia: {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: -25px;\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 Géminis 1\n \n Celdas de energía: {gemini_1.energyCells}\n \n \n Kits de sobrevivencia: {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 Géminis 2\n \n Celdas de energía: {gemini_2.energyCells}\n \n \n Kits de sobrevivencia: {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: 5px;\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 Géminis 1\n \n Celdas de energía\n \n \n \n {gemini_1.energyCells}\n \n \n \n Kits de sobrevivencia\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 Géminis 2\n \n Celdas de energía\n \n \n \n {gemini_2.energyCells}\n \n \n \n Kits de sobrevivencia\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 Estadísticas del juego\n \n \n Volver a Sagitario\n \n {\n state.status === GameStatus.MissionSucceeded ?\n `Día ${state.time}` : 'No terminó'\n }\n \n \n \n Científicos salvados\n \n {\n state.status === GameStatus.MissionSucceeded ?\n `${stats.scientistsRemaining} de 20` : 'Ninguno'\n }\n \n \n \n Duración de la misión\n \n {\n formatTime(state.endTime! - state.startTime + state.accumulatedTime)\n }\n \n \n \n O2 temporal (requerido hasta el Día 6)\n \n {\n stats.dropOffTimes[RescueResource.O2ReplacementCells] > -1 ?\n `Entregado el Día ${stats.dropOffTimes[RescueResource.O2ReplacementCells]}` : 'No fue reparado o conseguido'\n }\n \n \n \n \n \n Oxígeno (requerido para el Día 21)\n \n {\n stats.dropOffTimes[RescueResource.OxygenRepairTeam] > -1 ?\n `Entregado el Día ${stats.dropOffTimes[RescueResource.OxygenRepairTeam]}` : 'No fue reparado o conseguido'\n }\n \n \n \n Agua (requerido para el Día 23)\n \n {\n stats.dropOffTimes[RescueResource.WaterRepairTeam] > -1 ?\n `Entregado el Día ${stats.dropOffTimes[RescueResource.WaterRepairTeam]}` : 'No fue reparado o conseguido'\n }\n \n \n \n Alimentos (requerido para el Día 24)\n \n {\n stats.dropOffTimes[RescueResource.FoodRepairTeam] > -1 ?\n `Entregado el Día ${stats.dropOffTimes[RescueResource.FoodRepairTeam]}` : 'No fue reparado o conseguido'\n }\n \n \n \n Equipo médico (requerido para el Día 25)\n \n {\n stats.dropOffTimes[RescueResource.FoodRepairTeam] > -1 ?\n `Entregado el Día ${stats.dropOffTimes[RescueResource.FoodRepairTeam]}` : 'No fue reparado o conseguido'\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 ¡Misión abortada! \n
\n \n

Has abortado la misión. Sin tu ayuda, tememos que ha ocurrido lo peor en la Estación Espacial Orión.

\n

Avísale al comandante espacial para que venga y te dé instrucciones de lo que hay que hacer ahora.

\n

-Control en tierra

\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 ¿Deseas confirmar el movimiento?\n
\n \n \n Géminis 1\n \n

Celdas de energía

\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

Kits de sobrevivencia

\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 Géminis 2\n \n

Celdas de energía

\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

Kits de sobrevivencia

\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>Día {day}</span> <i className=\"fas fa-long-arrow-alt-right\"></i> <span>Día {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 ¡Bienvenidos de regreso a Sagitario! \n
\n \n

¡Estamos emocionados al escuchar las historias de esta exitosa misión!

\n

Cuando estén listos, comuníquense con el comandante espacial para que venga a felicitarlos personalmente.

\n

¡Gracias por todo lo que hicieron para rescatar a Orión!

\n

-Control en tierra

\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 a que el comandante inicie la misió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 Transmisión recibida del control en tierra\n
\n \n

¡Oh, no! La nave se quedó sin los recursos necesarios para seguir avanzando y poder cumplir la misión.

\n

Favor enviar una llamada de socorro al comandante espacial y les proporcionaremos más instrucciones.

\n

-Control en tierra

\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 ¡Atención, tripulación Géminis!\n
\n \n

Lamentablemente, el tiempo de la misión para rescatar a Orión se agotó.

\n

Nuestro equipo de control seguirá trabajando para salvar la estación espacial. Ahora es necesario que regresen al centro de control.

\n

Abróchense los cinturones: estamos a punto de teletransportarlos para que se encuentren con el comandante espacial para debatir sobre la misión.

\n

-Control en tierra

\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 Transmisión recibida del control en tierra\n
\n \n

¡Oh, no! Parece que llegaron tarde.

\n

Los sistemas de oxígeno no fueron arreglados a tiempo. Un científico ha perdido la vida y ahora está entre las estrellas.

\n

Aunque no hayamos concluido con éxito nuestra misión, conversemos. ¿En qué fallamos?

\n

-Control en tierra

\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 No es posible conectarse al servidor de Rescate de Orión... ¡Intenta actualizar la página o avísale al comandante!\n \n } \n {\n gameState && gameDuration ?\n (\n \n \n \n )\n :\n (\n
Cargando...
\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: 'El nombre de usuario y la contraseña no pueden estar vacíos.'});\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 ?? 'No es posible conectarse al servidor.' });\n }\n }\n\n render() {\n return <>\n \n \n

Iniciar sesión para gestionar el Rescate de Orión

\n \n \n Nombre de usuario\n \n \n \n \n \n Contraseña\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('La sesión ha expirado. Iniciar sesión nuevamente.');\n window.location.href = '/admin';\n return;\n }\n if (err.response === undefined) {\n alert('No es posible conectarse al 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 de creación: {createTime}\n

\n

\n {'Estado del lobby: '}\n {status ?? 'Unknown'}\n {' '}\n setShowModal(true)}\n disabled={status !== LobbyStatus.Waiting}\n >Iniciar los juegos\n {\n startGameStatus ?\n (\n typeof startGameStatus === 'string' ?\n {startGameStatus} : <>✓\n )\n :\n <>\n }\n

\n

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

\n
\n
\n Exportar resumen del lobby como archivo CSV\n

\n Equipos: {Object.keys(rooms).length}, no finalizaron: {\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
Nombre de la tripulaciónO2 temporal
(Día 6)
Oxígeno
(Día 21)
Agua
(Día 23)
Alimentos
(Día 24)
Equipo médico
(Día 25)
CientíficosConteo de díasTiempo de misiónEstado de la misiónReiniciar
{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} no existe.`\n :\n `Cargando el lobby ${code}...`\n }\n \n \n }\n
\n setShowModal(false)}\n >\n \n

A punto de iniciar los juegos

\n
\n \n

¿Estás seguro de que deseas iniciar los juegos?

\n

No se puede volver atrás.

\n

Después no es posible añadir salas.

\n
\n \n setShowModal(false)}\n >Cancelar\n Sí, empecemos\n \n \n setRestartModal(undefined)}\n >\n \n

A punto de reiniciar la sala {restartModal}

\n
\n \n

¿Estás seguro de que quieres reiniciar la misión para la sala {restartModal}?

\n

No se puede volver atrás y los datos de la misión actual se perderán.

\n
\n \n setRestartModal(undefined)}\n >Cancelar\n restartGame(restartModal ?? '')}\n >Sí, 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 Bienvenido/a, {localStorage.getItem('username')}\n
La siguiente tabla contiene la lista de lobbies que tienes a cargo...
\n
\n Crear 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 del lobbyHora de creaciónCerrar lobby
{timeString}\n setDeleteModal(lobby.code)}\n >Apagar\n
\n
\n setDeleteModal(undefined)}\n >\n \n

A punto de apagar un lobby {deleteModal}

\n
\n \n

¿Seguro de que deseas apagar el lobby {deleteModal}?

\n

No se puede volver atrás y todos los juegos contenidos se perderán.

\n
\n \n setDeleteModal(undefined)}\n >Cancelar\n deleteLobby(deleteModal!)}\n >Sí, apagar\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: 600px;\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('El código del lobby y el nombre de la tripulación no pueden estar vacíos.');\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

Unirse al Rescate de Orión

\n \n \n Código del lobby\n \n setLobbyCode(e.target.value)}\n onKeyDown={onKeyDown}\n />\n \n \n \n Nombre de la tripulación\n \n setRoomName(e.target.value)}\n onKeyDown={onKeyDown}\n />\n \n

\n {error}\n

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

El nombre {roomName} no está disponible.

\n
\n \n

¿Estás intentando conectarte nuevamente?

\n

Vas a expulsar a cualquier persona que esté conectada a la sala.

\n
\n \n setShowReconnectModal(false)}\n >No, ingresar con otro nombre.\n Sí, reconectar.\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 Bienvenido/a al Rescate de Orión\n

\n

\n ¿Eres administrador o jugador?\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 >Jugador\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":""}