{"version":3,"sources":["images/properties lazy /^/.//.*/.jpg$/ groupOptions: {} namespace object","images/Bank.png","images/history.png","Data/PlayerClass.js","components/navbar/Navbar.js","components/footer/Footer.js","components/playerCard/PlayerCard.js","components/bottomBar/BottomBar.js","Data/gamedata.csv","Data/PropertyClass.js","Data/BuildingClass.js","images/houses/1 House.jpg","images/houses/2 Houses.jpg","images/houses/3 Houses.jpg","images/houses/1 Industrial.jpg","images/houses/2 Industrial.jpg","images/houses/3 Industrial.jpg","images/houses/Skyscraper.jpg","images/houses/Monopoly Tower.jpg","images/houses/Prison.jpg","images/houses/Dump.jpg","images/houses/Power.jpg","images/houses/Sewage.jpg","Data/StockClass.js","Data/loadGameData.js","containers/lobbyScreen/LobbyScreen.js","images/Logo2.png","components/logo/Logo.js","containers/LobbyScreen.js","containers/mainScreen/MainMenu.js","containers/MainScreen.js","components/playerList/PlayerList.js","containers/payScreen/PayMenu.js","containers/PayScreen.js","components/buildingCard/BuildingCard.js","components/propertyCard/PropertyCard.js","components/modal/Modal.js","containers/buyScreen/BuyMenu.js","containers/BuyScreen.js","containers/bankScreen/BankMenu.js","containers/BankScreen.js","containers/stocksScreen/Plot.js","containers/stocksScreen/StocksMenu.js","containers/StocksScreen.js","containers/rentScreen/RentMenu.js","containers/RentScreen.js","containers/sellScreen/SellMenu.js","containers/SellScreen.js","containers/spectateScreen/SpectateMenu.js","containers/SpectateScreen.js","containers/overviewScreen/OverviewMenu.js","containers/overviewScreen/Plot.js","containers/OverviewScreen.js","containers/settingsScreen/SettingsMenu.js","containers/SettingsScreen.js","Data/loadLocalStorage.js","containers/App.js","index.js"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","Object","module","exports","uuidv4","require","v4","PlayerClass","name","startMoney","this","balance","Number","parseFloat","properties","houses","skyscraper","estimatedValue","hasMonopolyTower","hasSkyScraperOn","history","stocks","addHistoryPoint","changes","img","Date","BankIMG","HistoryIMG","calcEstimatedValue","bind","declareBankruptcy","bank","forEach","property","skyScraperBuilt","color","monopolyTowerBuilt","buildingSlotsTaken","housesCount","buildings","buildingsWorth","negativeBuildings","mortage","owner","push","msg","amount","direction","time","moment","format","total","netWorth","estimated","cost","sign","postFix","balanceAbs","Math","abs","String","round","replace","money","lastLetter","charAt","length","hasPostfix","includes","amountPart","substring","number","isNaN","NaN","sender","receiver","balanceMoved","parseMoney","buyer","seller","sendMoney","succesfull","paymentMSG","filter","prop","building","price","type","slotsTaken","console","log","negativeSpace","player","find","stock","data","at","y","Navbar","setGameState","useEffect","elemsSidenav","document","querySelectorAll","M","Sidenav","init","className","onClick","Footer","href","PlayerCard","style","entries","key","value","$","addClass","setTimeout","removeClass","src","alt","formatMoney","BottomBar","players","elemsCarousell","Carousel","dist","padding","numVisible","transform","isMobile","counter","PropertyClass","baseRent","rentPrices","buildingPrice","loadImage","imageName","a","image","default","catch","idx","calcRentCost","rentPrice","rentalHousesCount","newSlotsNeeded","BuildingClass","StockClass","startValue","randomB","valueShould","risk","latestVal","percentage","paused","setInterval","calcNew","min","max","random","r","distfactor","factor","newVal","shift","x","loadCSV","reject","xhr","XMLHttpRequest","dataArray","onload","target","responseText","split","slice","line","tmpArray","M1","rentPrice_2","rentPrice_1","rentPrice_3","rentPrice_4","rentPrice_5","rentPrice_6","rentPrice_7","rentPrice_8","housePrice","skyScraperPrice","industrialBuildingPrice","onerror","status","statusText","open","gamedata","send","loadPropertyData","house","monopolyTower","industrial","negative","loadBuildingData","One_House","Two_Houses","Three_Houses","One_Industrial","Two_Industrial","Three_Industrial","Skyscraper","MonopolyTower","Sewage","Power","Dump","Prison","createStocks","LobbyScreen","setPlayers","setBuildings","setAvailableProperties","setBank","setGameID","gameID","setStocks","setSpectateID","nameRef","useRef","useState","pressCounter","setPressCounter","updateTextFields","timer","window","clearInterval","onSubmit","evt","preventDefault","current","prevPlayers","newPlayer","autoComplete","ref","htmlFor","toast","html","classes","num","places","padStart","Logo","LogoPNG","show","MainMenu","MainScreen","remove","PlayerList","callback","click","undefined","action","i","PayScreen","amountRef","senderID","val","receiverID","clone","BuildingCard","clickCallback","PropertyCard","showType","BuyModal","title","description","selectedProperty","setselectedProperty","modalElems","Modal","sort","b","priceMultiplier","renderCards","housesBuilt","BuyMenu","availableProperties","maxHouses","playerProperties","setplayerProperties","selectedPropertyToBuild","setselectedPropertyToBuild","closeBuyHome","elem","getInstance","close","closeModal","buyerID","buyProperty","builtBuilding","succesfullTransaction","transactionMSG","build","BuyScreen","BankScreen","transfer","customerID","customer","BankImg","options","layout","top","bottom","left","right","scales","ticks","index","values","suggestedMin","font","size","displayFormats","minute","plugins","legend","position","labels","align","zoom","wheel","enabled","pinch","overScaleMode","pan","mode","StocksMenu","selectedPlayer","setselectedPlayer","chartData","setChartData","stockRef","setData","setpaused","elems","FormSelect","datasets","colors","label","showLine","backgroundColor","borderColor","borderWidth","pointRadius","tension","stockJSON","CircularJSON","stringify","localStorage","setItem","interact","stockName","stockPrice","amountStocksBought","amountStocksSold","height","defaultValue","disabled","calcStockPrice","toFixed","StocksScreen","RentMenu","closeSelectList","openSelectProperty","ownerID","renterID","renter","RentScreen","sellerID","toggleMortage","sellSurgeon","sellProperty","SellScreen","SpectateMenu","socket","socketConnected","spectateID","submitedPlayers","setSubmitedPlayers","dataListener","parse","playersJSON","on","off","emit","groupID","SpectateScreen","hide","OverviewMenu","totalHistory","settotalHistory","Collapsible","onOpenEnd","toLocaleTimeString","dataBalance","dataNetWorth","playerLabels","reverse","cubicInterpolationMode","display","text","limits","OverviewScreen","Chart","register","zoomPlugin","SettingsMenu","setStartMoney","setMaxHouses","startMoneyRef","totalHousesRef","numInt","parseInt","isInteger","SettingScreen","serverconfig","App","array","getItem","res","assign","loadPlayers","loadAvailableProperties","loadBuildings","gameState","loadedBank","loadBank","loadedStocks","loadStocks","setSocket","setSocketConnected","Content","playerJson","bankJson","availablePropertiesJSON","buildingsJson","newSocket","io","BACKEND_URL","path","checkIfOnline","response","ReactDOM","render","StrictMode","getElementById"],"mappings":"6MAAA,IAAIA,EAAM,CACT,mBAAoB,CACnB,IACA,GAED,sBAAuB,CACtB,IACA,GAED,uBAAwB,CACvB,IACA,GAED,sBAAuB,CACtB,IACA,GAED,qBAAsB,CACrB,IACA,GAED,qBAAsB,CACrB,IACA,GAED,wBAAyB,CACxB,IACA,GAED,yBAA0B,CACzB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,mBAAoB,CACnB,IACA,IAED,iBAAkB,CACjB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,wBAAyB,CACxB,IACA,IAED,iBAAkB,CACjB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,wBAAyB,CACxB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,mBAAoB,CACnB,IACA,IAED,wBAAyB,CACxB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,wBAAyB,CACxB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,mBAAoB,CACnB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,0BAA2B,CAC1B,IACA,IAED,iBAAkB,CACjB,IACA,IAED,2BAA4B,CAC3B,IACA,IAED,mBAAoB,CACnB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,yBAA0B,CACzB,IACA,IAED,0BAA2B,CAC1B,IACA,IAED,uBAAwB,CACvB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,0BAA2B,CAC1B,IACA,IAED,uBAAwB,CACvB,IACA,KAGF,SAASC,EAAoBC,GAC5B,IAAIC,EAA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","file":"static/js/main.4da78ae3.chunk.js","sourcesContent":["var map = {\n\t\"./Abbey Road.jpg\": [\n\t\t274,\n\t\t3\n\t],\n\t\"./Ahrner Street.jpg\": [\n\t\t275,\n\t\t4\n\t],\n\t\"./Aicher Plateau.jpg\": [\n\t\t276,\n\t\t5\n\t],\n\t\"./Bachla Street.jpg\": [\n\t\t277,\n\t\t6\n\t],\n\t\"./Baker Street.jpg\": [\n\t\t278,\n\t\t7\n\t],\n\t\"./Beale Street.jpg\": [\n\t\t279,\n\t\t8\n\t],\n\t\"./Bellevue Avenue.jpg\": [\n\t\t280,\n\t\t9\n\t],\n\t\"./Boston Post Road.jpg\": [\n\t\t281,\n\t\t10\n\t],\n\t\"./Bourbon Street.jpg\": [\n\t\t282,\n\t\t11\n\t],\n\t\"./Brick Lane.jpg\": [\n\t\t283,\n\t\t12\n\t],\n\t\"./Broadway.jpg\": [\n\t\t284,\n\t\t13\n\t],\n\t\"./Capitol Street.jpg\": [\n\t\t285,\n\t\t14\n\t],\n\t\"./Carnaby Street.jpg\": [\n\t\t286,\n\t\t15\n\t],\n\t\"./Central Park.jpg\": [\n\t\t287,\n\t\t16\n\t],\n\t\"./Cheyenne Avenue.jpg\": [\n\t\t288,\n\t\t17\n\t],\n\t\"./Cornhill.jpg\": [\n\t\t289,\n\t\t18\n\t],\n\t\"./Court Street.jpg\": [\n\t\t290,\n\t\t19\n\t],\n\t\"./Downing Street.jpg\": [\n\t\t291,\n\t\t20\n\t],\n\t\"./Drau Street.jpg\": [\n\t\t292,\n\t\t21\n\t],\n\t\"./Fifth Avenue.jpg\": [\n\t\t293,\n\t\t22\n\t],\n\t\"./Gallery Road.jpg\": [\n\t\t294,\n\t\t23\n\t],\n\t\"./Hollywood Blvd..jpg\": [\n\t\t295,\n\t\t24\n\t],\n\t\"./Jermyn Street.jpg\": [\n\t\t296,\n\t\t25\n\t],\n\t\"./Kahala Avenue.jpg\": [\n\t\t297,\n\t\t26\n\t],\n\t\"./Kings Road.jpg\": [\n\t\t298,\n\t\t27\n\t],\n\t\"./Las Vegas Strip.jpg\": [\n\t\t299,\n\t\t28\n\t],\n\t\"./Little Britain.jpg\": [\n\t\t300,\n\t\t29\n\t],\n\t\"./Little Tokyo.jpg\": [\n\t\t301,\n\t\t30\n\t],\n\t\"./Lombard Street.jpg\": [\n\t\t302,\n\t\t31\n\t],\n\t\"./Market Street.jpg\": [\n\t\t303,\n\t\t32\n\t],\n\t\"./Michigan Avenue.jpg\": [\n\t\t304,\n\t\t33\n\t],\n\t\"./North Charles.jpg\": [\n\t\t305,\n\t\t34\n\t],\n\t\"./Northwest 23rd.jpg\": [\n\t\t306,\n\t\t35\n\t],\n\t\"./Ocean Drive.jpg\": [\n\t\t307,\n\t\t36\n\t],\n\t\"./Outer Prox.jpg\": [\n\t\t308,\n\t\t37\n\t],\n\t\"./Oxford Street.jpg\": [\n\t\t309,\n\t\t38\n\t],\n\t\"./Pacific Coast Hw..jpg\": [\n\t\t310,\n\t\t39\n\t],\n\t\"./Route 66.jpg\": [\n\t\t311,\n\t\t40\n\t],\n\t\"./Santa Monica Blvd..jpg\": [\n\t\t312,\n\t\t41\n\t],\n\t\"./Savile Row.jpg\": [\n\t\t313,\n\t\t42\n\t],\n\t\"./South Molton.jpg\": [\n\t\t314,\n\t\t43\n\t],\n\t\"./St James's Place.jpg\": [\n\t\t315,\n\t\t44\n\t],\n\t\"./St. Martin's Lane.jpg\": [\n\t\t316,\n\t\t45\n\t],\n\t\"./The Royal Mile.jpg\": [\n\t\t317,\n\t\t46\n\t],\n\t\"./Time Square.jpg\": [\n\t\t318,\n\t\t47\n\t],\n\t\"./Upper Street.jpg\": [\n\t\t319,\n\t\t48\n\t],\n\t\"./Walk of Fame.jpg\": [\n\t\t320,\n\t\t49\n\t],\n\t\"./Wall Street.jpg\": [\n\t\t321,\n\t\t50\n\t],\n\t\"./Washington Street.jpg\": [\n\t\t322,\n\t\t51\n\t],\n\t\"./Wigmore Street.jpg\": [\n\t\t323,\n\t\t52\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 119;\nmodule.exports = webpackAsyncContext;","export default __webpack_public_path__ + \"static/media/Bank.03f1c135.png\";","export default __webpack_public_path__ + \"static/media/history.b5bb078e.png\";","import BankIMG from \"../images/Bank.png\";\nimport HistoryIMG from \"../images/history.png\";\n\nimport moment from \"moment\";\n\nconst { v4: uuidv4 } = require(\"uuid\");\nconst DATE_RFC2822 = \"ddd, DD MMM YYYY HH:mm:ss ZZ\";\n\nexport class PlayerClass {\n constructor(name, startMoney) {\n this.id = uuidv4();\n this.name = name;\n\n this.balance = Number.parseFloat(startMoney) || 10 * 10 ** 6;\n this.properties = [];\n this.houses = 0;\n this.skyscraper = 0;\n this.estimatedValue = 0;\n this.hasMonopolyTower = false;\n\n this.hasSkyScraperOn = {};\n\n this.history = [];\n\n this.stocks = {};\n\n this.addHistoryPoint(\n `${this.name} Received Start Money`,\n this.balance,\n \"+\"\n );\n\n this.changes = {\n balance: \"\",\n properties: \"\",\n houses: \"\",\n skyscraper: \"\",\n };\n\n this.img = `https://avatars.dicebear.com/api/open-peeps/${\n name + Date()\n }.svg`;\n\n if (this.name === \"Bank\") {\n this.img = BankIMG;\n }\n if (this.name === \"Total History\") {\n this.img = HistoryIMG;\n }\n\n this.calcEstimatedValue = this.calcEstimatedValue.bind(this);\n this.declareBankruptcy = this.declareBankruptcy.bind(this);\n this.calcEstimatedValue();\n }\n\n static formatMoney(balance) {\n const sign = balance < 0 ? \"-\" : \"\";\n let postFix = \"\";\n let balanceAbs = Math.abs(balance);\n\n if (balanceAbs >= 10 ** 9) {\n postFix = \"G\";\n balanceAbs /= 10 ** 9;\n } else if (balanceAbs >= 10 ** 6) {\n postFix = \"M\";\n balanceAbs /= 10 ** 6;\n } else if (balanceAbs >= 10 ** 3) {\n postFix = \"K\";\n balanceAbs /= 10 ** 3;\n } else {\n postFix = \"$\";\n }\n\n return (\n sign +\n String(Math.round(balanceAbs * 100) / 100).replace(\".\", \",\") +\n \"\\u00A0\" +\n postFix\n );\n }\n\n static parseMoney(money) {\n const lastLetter = money.charAt(money.length - 1);\n const hasPostfix = [\"k\", \"M\", \"G\"].includes(lastLetter);\n const postFix = lastLetter;\n\n let amountPart = hasPostfix\n ? money.substring(0, money.length - 1)\n : money;\n\n amountPart = amountPart.replace(\",\", \".\");\n\n const number = parseFloat(amountPart);\n\n if (isNaN(number)) {\n return NaN;\n }\n\n let balance = number;\n if (postFix === \"M\" || !hasPostfix) {\n balance *= 10 ** 6;\n } else if (postFix === \"k\") {\n balance *= 10 ** 3;\n } else if (postFix === \"G\") {\n balance *= 10 ** 9;\n }\n\n return balance;\n }\n\n static sendMoney(sender, receiver, amount) {\n const balanceMoved =\n typeof amount === \"string\"\n ? PlayerClass.parseMoney(amount)\n : amount;\n\n if (isNaN(balanceMoved)) {\n return [false, \"Invalid Money Format\"];\n }\n\n if (sender.id === receiver.id) {\n return [false, \"Sender is Receiver\"];\n }\n\n if (sender.balance < balanceMoved) {\n return [false, \"Not enought Money\"];\n }\n\n sender.balance -= balanceMoved;\n receiver.balance += balanceMoved;\n\n sender.calcEstimatedValue();\n receiver.calcEstimatedValue();\n\n sender.changes[\"balance\"] = \"-\";\n receiver.changes[\"balance\"] = \"+\";\n\n sender.addHistoryPoint(\n `${sender.name} paid Money to ${receiver.name}`,\n balanceMoved,\n \"-\"\n );\n\n receiver.addHistoryPoint(\n `${receiver.name} received Money from ${sender.name}`,\n balanceMoved,\n \"+\"\n );\n return [true, \"Successfull\"];\n }\n\n static buyProperty(buyer, property) {\n const cost = property.cost;\n\n if (buyer.balance < cost) {\n return [false, \"Not enought Money\"];\n }\n\n buyer.balance -= cost;\n buyer.properties.push(property);\n\n buyer.calcEstimatedValue();\n\n if (cost > 0) {\n buyer.changes[\"balance\"] = \"-\";\n }\n\n buyer.changes[\"properties\"] = \"+\";\n\n buyer.addHistoryPoint(\n `${buyer.name} bought ${property.name}`,\n cost,\n \"-\"\n );\n\n property.owner = buyer;\n\n return [true, \"Successfull\"];\n }\n\n static sellProperty(seller, buyer, amount, property, bank) {\n const [succesfull, paymentMSG] = PlayerClass.sendMoney(\n buyer,\n seller,\n amount\n );\n\n if (!succesfull) {\n return [false, paymentMSG];\n }\n\n if (property.skyScraperBuilt) {\n seller.hasSkyScraperOn[property.color] = false;\n buyer.hasSkyScraperOn[property.color] = true;\n\n seller.skyscraper -= 1;\n buyer.skyscraper += 1;\n }\n\n if (property.monopolyTowerBuilt) {\n seller.hasMonopolyTower = false;\n buyer.hasMonopolyTower = true;\n }\n\n buyer.houses += property.housesCount;\n seller.houses -= property.housesCount;\n\n if (buyer === bank) {\n property.skyScraperBuilt = false;\n property.monopolyTowerBuilt = false;\n property.buildingSlotsTaken = 0;\n property.housesCount = 0;\n property.buildings = [];\n property.buildingsWorth = 0;\n property.negativeBuildings = 0;\n property.mortage = false;\n\n if (property.owner.hasSkyScraperOn[property.color]) {\n property.owner.hasSkyScraperOn[property.color] = false;\n }\n buyer.hasSkyScraperOn[property.color] = false;\n }\n\n seller.properties = seller.properties.filter((prop) => {\n return prop.id !== property.id;\n });\n\n property.owner = buyer;\n buyer.properties.push(property);\n\n seller.changes[\"properties\"] = \"-\";\n buyer.changes[\"properties\"] = \"+\";\n\n const balanceMoved =\n typeof amount === \"string\"\n ? PlayerClass.parseMoney(amount)\n : amount;\n\n buyer.addHistoryPoint(\n `${buyer.name} bought ${property.name} from ${seller.name}`,\n balanceMoved,\n \"+\"\n );\n\n seller.addHistoryPoint(\n `${seller.name} Sold ${property.name} to ${buyer.name}`,\n balanceMoved,\n \"-\"\n );\n\n buyer.calcEstimatedValue();\n seller.calcEstimatedValue();\n\n return [true, paymentMSG];\n }\n\n declareBankruptcy(bank) {\n this.properties.forEach((property) => {\n if (property.skyScraperBuilt) {\n this.hasSkyScraperOn[property.color] = false;\n }\n\n if (property.monopolyTowerBuilt) {\n this.hasMonopolyTower = false;\n bank.hasMonopolyTower = true;\n }\n\n property.skyScraperBuilt = false;\n property.monopolyTowerBuilt = false;\n property.buildingSlotsTaken = 0;\n property.housesCount = 0;\n property.buildings = [];\n property.buildingsWorth = 0;\n property.negativeBuildings = 0;\n property.mortage = false;\n\n property.owner = bank;\n bank.properties.push(property);\n });\n\n this.properties = [];\n this.hasSkyScraperOn = {};\n\n this.changes[\"balance\"] = \"-\";\n this.changes[\"properties\"] = \"-\";\n this.changes[\"houses\"] = \"-\";\n this.changes[\"skyscraper\"] = \"-\";\n\n this.addHistoryPoint(\n `${this.name} declared bankruptcy`,\n this.balance,\n \"/\"\n );\n\n this.balance = 0;\n this.skyscraper = 0;\n this.houses = 0;\n this.calcEstimatedValue();\n }\n\n static builtBuilding(buyer, property, building, price) {\n if (buyer.balance < price) {\n return [false, \"Not enought Money\"];\n }\n\n if ([\"house\", \"industrial\"].includes(building.type)) {\n buyer.houses += building.slotsTaken;\n buyer.changes[\"houses\"] = \"+\";\n } else if (building.type === \"skyscraper\") {\n buyer.skyscraper += 1;\n buyer.changes[\"skyscraper\"] = \"+\";\n buyer.hasSkyScraperOn[property.color] = true;\n } else if (building.type === \"monopolyTower\") {\n buyer.hasMonopolyTower = true;\n } else if (building.type === \"negative\") {\n property.negativeBuildings += building.negativeSpace;\n } else {\n console.log(\"Error\", building.type);\n return [false, \"Error while building\"];\n }\n\n buyer.balance -= price;\n if (price > 0) {\n buyer.changes[\"balance\"] = \"-\";\n }\n\n if (building.type === \"negative\") {\n buyer.addHistoryPoint(\n `${buyer.name} constructed ${building.name} on ${property.name}`,\n price,\n \"/\"\n );\n } else {\n buyer.addHistoryPoint(\n `${buyer.name} bought ${building.name} on ${property.name}`,\n price,\n \"+\"\n );\n }\n\n buyer.calcEstimatedValue();\n\n return [true, \"Successfull\"];\n }\n\n addHistoryPoint(msg, amount, direction) {\n this.history.push({\n msg: msg,\n time: moment(new Date()).format(DATE_RFC2822),\n amount: amount,\n total: this.balance,\n netWorth: this.calcEstimatedValue(),\n direction: direction,\n });\n }\n\n calcEstimatedValue() {\n let estimated = this.balance;\n\n this.properties.forEach((property) => {\n estimated += property.cost + property.buildingsWorth;\n });\n\n this.estimatedValue = estimated;\n return estimated;\n }\n\n static calcStockPrice(player, name, stocks) {\n let stock = stocks.find((stock) => stock.name === name);\n let price = stock.data.at(-1).y;\n let amount = player.stocks[name];\n\n return price * amount;\n }\n}\n","import React, { useEffect } from \"react\";\n\nimport \"./Navbar.css\";\n\nexport default function Navbar({ setGameState }) {\n useEffect(() => {\n try {\n var elemsSidenav = document.querySelectorAll(\".sidenav\");\n // eslint-disable-next-line no-undef\n M.Sidenav.init(elemsSidenav);\n } catch (e) {\n console.log();\n }\n });\n\n return (\n <>\n \n\n \n \n );\n}\n","import React from \"react\";\n\nexport default function Footer() {\n return (\n \n );\n}\n","import React from \"react\";\nimport { PlayerClass } from \"../../Data/PlayerClass\";\n\nimport \"./PlayerCard.css\";\n\nimport $ from \"jquery\";\n\nexport default function PlayerCard({ player }) {\n let style = player.balance < 0 ? ` isBroke` : \"\";\n\n const entries = Object.entries(player.changes);\n for (const [key, value] of entries) {\n $(`#${key}_${player.id}`).addClass(\n value === \"+\"\n ? \"animationIncrease\"\n : value === \"-\"\n ? \"animationDecrease\"\n : \"\"\n );\n setTimeout(() => {\n $(`#${key}_${player.id}`).removeClass(\"animationIncrease\");\n $(`#${key}_${player.id}`).removeClass(\"animationDecrease\");\n player.changes[key] = \"\";\n }, 2000);\n }\n\n return (\n
\n {/*Card */}\n\n
\n {/*Name and Icon */}\n\n
\n
\n

\n {player.name}\n

\n
\n
\n \"Avatar\"\n
\n
\n\n {/*Table */}\n
\n \n \n \n \n \n \n {PlayerClass.formatMoney(\n player.balance\n )}\n \n \n \n \n \n \n {player.properties.length}\n \n \n \n \n \n {player.houses}\n \n \n \n \n \n {player.skyscraper}\n \n \n \n \n \n \n \n \n \n \n \n
Balance
Properties
Houses
Skyscraper
Monopoly Tower\n \n {player.hasMonopolyTower ? \"Yes\" : \"No\"}\n \n
Net Worth\n \n {PlayerClass.formatMoney(\n player.estimatedValue\n )}\n \n
\n
\n
\n
\n );\n}\n","import React, { useEffect } from \"react\";\nimport PlayerCard from \"../playerCard/PlayerCard\";\n\nimport { isMobile } from \"react-device-detect\";\n\nimport \"./BottomBar.css\";\n\nexport default function BottomBar({ players }) {\n useEffect(() => {\n try {\n var elemsCarousell = document.querySelectorAll(\".carousel\");\n // eslint-disable-next-line no-undef\n M.Carousel.init(elemsCarousell, {\n dist: 0,\n padding: 80,\n numVisible: 10,\n });\n } catch (e) {}\n });\n\n let style = {\n transform: !isMobile\n ? `translateX(${players.length % 2 === 0 ? 115 : 0}px)`\n : \"\",\n };\n\n return (\n
\n
\n
\n {players.map((player) => {\n return ;\n })}\n
\n
\n
\n );\n}\n","export default __webpack_public_path__ + \"static/media/gamedata.bed88504.csv\";","const { v4: uuidv4 } = require(\"uuid\");\n\nlet counter = 0;\nexport class PropertyClass {\n constructor(name, cost, color, baseRent, rentPrices, buildingPrice) {\n this.id = uuidv4();\n\n this.name = name;\n this.cost = cost;\n this.color = color;\n this.owner = null;\n\n this.rentPrices = rentPrices;\n this.buildingPrice = buildingPrice;\n this.baseRent = baseRent;\n\n this.skyScraperBuilt = false;\n this.monopolyTowerBuilt = false;\n\n this.buildingSlotsTaken = 0;\n\n this.housesCount = 0;\n this.buildings = [];\n\n this.buildingsWorth = 0;\n this.negativeBuildings = 0;\n this.mortage = false;\n\n this.idx = counter;\n\n this.className = \"PropertyClass\";\n\n this.loadImage(this.name);\n this.calcRentCost = this.calcRentCost.bind(this);\n this.loadImage = this.loadImage.bind(this);\n }\n\n loadImage = async (imageName) => {\n counter++;\n return await import(`../images/properties/${imageName}.jpg`)\n .then((image) => {\n this.img = image.default;\n })\n .catch((e) => {\n this.img = `https://picsum.photos/id/${0}/300/480`;\n });\n };\n\n static builtBuilding(property, building) {\n let newSlotsNeeded = building.slotsTaken;\n\n if (property.buildingSlotsTaken + newSlotsNeeded > 8) {\n return [\n false,\n `Not Enought Slots available,missing ${\n property.buildingSlotsTaken + newSlotsNeeded - 8\n }`,\n ];\n }\n\n if (\n property.owner.hasSkyScraperOn[this.color] === true &&\n building.name === \"Skyscraper\"\n ) {\n return [false, \"Skyscraper is already built on this color\"];\n }\n\n if (building.type === \"skyscraper\") {\n property.buildingsWorth += property.buildingPrice[building.type];\n property.skyScraperBuilt = true;\n } else if (building.type === \"monopolyTower\") {\n property.buildingsWorth += property.buildingPrice[building.type];\n property.monopolyTowerBuilt = true;\n } else {\n property.housesCount += newSlotsNeeded;\n property.buildingsWorth +=\n property.buildingPrice[building.type] * newSlotsNeeded;\n }\n\n property.buildings.push(building);\n\n return [true, \"Successfull\"];\n }\n\n calcRentCost() {\n let rentPrice = 0;\n\n let rentalHousesCount = this.buildings.filter(\n (property) => property.type === \"house\"\n ).length;\n\n if (this.housesCount > 0) {\n if (this.negativeBuildings > 0) {\n rentPrice += this.rentPrices[rentalHousesCount];\n } else {\n rentPrice += this.rentPrices[this.housesCount];\n }\n } else {\n rentPrice = this.baseRent;\n }\n\n if (\n this.owner.hasSkyScraperOn[this.color] ||\n this.owner.hasMonopolyTower\n ) {\n rentPrice *= 2;\n }\n\n return rentPrice;\n }\n}\n","const { v4: uuidv4 } = require(\"uuid\");\n\nexport class BuildingClass {\n constructor(name, img, slotsTaken, type, negativeSpace) {\n this.id = uuidv4();\n\n this.name = name;\n this.img = img;\n this.slotsTaken = slotsTaken;\n this.type = type;\n this.negativeSpace = negativeSpace;\n this.className = \"BuildingClass\";\n }\n}\n","export default __webpack_public_path__ + \"static/media/1 House.59782595.jpg\";","export default __webpack_public_path__ + \"static/media/2 Houses.052d5e8e.jpg\";","export default __webpack_public_path__ + \"static/media/3 Houses.6a1f7709.jpg\";","export default __webpack_public_path__ + \"static/media/1 Industrial.9560624d.jpg\";","export default __webpack_public_path__ + \"static/media/2 Industrial.4d837d41.jpg\";","export default __webpack_public_path__ + \"static/media/3 Industrial.02783eb2.jpg\";","export default __webpack_public_path__ + \"static/media/Skyscraper.7afdf146.jpg\";","export default __webpack_public_path__ + \"static/media/Monopoly Tower.e9c0e0df.jpg\";","export default __webpack_public_path__ + \"static/media/Prison.79d7615a.jpg\";","export default __webpack_public_path__ + \"static/media/Dump.4c40ebbd.jpg\";","export default __webpack_public_path__ + \"static/media/Power.1ee86965.jpg\";","export default __webpack_public_path__ + \"static/media/Sewage.3fb6c25d.jpg\";","import moment from \"moment\";\nconst DATE_RFC2822 = \"ddd, DD MMM YYYY HH:mm:ss ZZ\";\n\nexport class StockClass {\n constructor(name) {\n this.name = name;\n\n this.startValue = this.randomB(0.45 * 10 ** 6, 0.55 * 10 ** 6);\n this.valueShould = this.randomB(0.2 * 10 ** 6, 0.8 * 10 ** 6);\n this.risk = this.randomB(5, 8);\n\n this.data = [];\n this.latestVal = this.startValue;\n this.percentage = 0.5;\n\n this.paused = false;\n this.counter = 0;\n\n setInterval(() => {\n if (!this.paused) {\n this.calcNew();\n }\n }, 4000);\n this.calcNew();\n }\n\n randomB(min, max) {\n return Math.random() * (max - min + 1) + min;\n }\n\n calcNew() {\n let r = Math.random();\n\n const distfactor = this.latestVal / this.valueShould - 1;\n\n let factor = 1;\n if (r < this.percentage + 0.1 * distfactor) {\n factor = -1;\n }\n\n let newVal =\n this.latestVal + factor * this.risk * this.latestVal * 0.01;\n this.latestVal = newVal;\n\n let time = moment(new Date()).format(DATE_RFC2822);\n\n if (this.data.length > 450) {\n this.data.shift();\n }\n\n if (this.counter > 450) {\n this.valueShould = this.randomB(0.4 * 10 ** 6, 0.8 * 10 ** 6);\n this.counter = 0;\n }\n\n this.data.push({ x: time, y: newVal });\n this.counter++;\n }\n}\n","import gamedata from \"../Data/gamedata.csv\";\nimport { PropertyClass } from \"./PropertyClass\";\nimport { BuildingClass } from \"./BuildingClass\";\n\nimport One_House from \"../images/houses/1 House.jpg\";\nimport Two_Houses from \"../images/houses/2 Houses.jpg\";\nimport Three_Houses from \"../images/houses/3 Houses.jpg\";\nimport One_Industrial from \"../images/houses/1 Industrial.jpg\";\nimport Two_Industrial from \"../images/houses/2 Industrial.jpg\";\nimport Three_Industrial from \"../images/houses/3 Industrial.jpg\";\nimport Skyscraper from \"../images/houses/Skyscraper.jpg\";\nimport MonopolyTower from \"../images/houses/Monopoly Tower.jpg\";\n\nimport Prison from \"../images/houses/Prison.jpg\";\nimport Dump from \"../images/houses/Dump.jpg\";\nimport Power from \"../images/houses/Power.jpg\";\nimport Sewage from \"../images/houses/Sewage.jpg\";\nimport { StockClass } from \"./StockClass\";\n\nfunction loadCSV() {\n return new Promise(function (resolve, reject) {\n const xhr = new XMLHttpRequest();\n const dataArray = [];\n\n xhr.onload = function (e) {\n const bigString = e.target.responseText;\n const lines = bigString.split(\"\\n\");\n\n lines.slice(1, -1).forEach(function (line) {\n const tmpArray = line.split(\";\");\n const property = {};\n\n let M1 = 10 ** 6;\n\n property.name = tmpArray[0];\n property.cost =\n Number.parseFloat(tmpArray[1].replace(\",\", \".\")) * M1;\n property.color = tmpArray[2];\n property.baseRent =\n Number.parseFloat(tmpArray[3].replace(\",\", \".\")) * M1;\n property.rentPrice_2 =\n Number.parseFloat(tmpArray[5].replace(\",\", \".\")) * M1;\n property.rentPrice_1 =\n Number.parseFloat(tmpArray[4].replace(\",\", \".\")) * M1;\n property.rentPrice_3 =\n Number.parseFloat(tmpArray[6].replace(\",\", \".\")) * M1;\n property.rentPrice_4 =\n Number.parseFloat(tmpArray[7].replace(\",\", \".\")) * M1;\n property.rentPrice_5 =\n Number.parseFloat(tmpArray[8].replace(\",\", \".\")) * M1;\n property.rentPrice_6 =\n Number.parseFloat(tmpArray[9].replace(\",\", \".\")) * M1;\n property.rentPrice_7 =\n Number.parseFloat(tmpArray[10].replace(\",\", \".\")) * M1;\n property.rentPrice_8 =\n Number.parseFloat(tmpArray[11].replace(\",\", \".\")) * M1;\n property.housePrice =\n Number.parseFloat(tmpArray[12].replace(\",\", \".\")) * M1;\n property.skyScraperPrice =\n Number.parseFloat(tmpArray[13].replace(\",\", \".\")) * M1;\n property.industrialBuildingPrice =\n Number.parseFloat(tmpArray[14].replace(\",\", \".\")) * M1;\n property.img = tmpArray[15];\n dataArray.push(property);\n });\n\n resolve(dataArray);\n };\n\n xhr.onerror = function () {\n reject({\n status: this.status,\n statusText: xhr.statusText,\n });\n };\n\n xhr.open(\"GET\", gamedata, true);\n xhr.send();\n });\n}\n\nexport async function loadPropertyData() {\n const data = await loadCSV();\n\n const properties = [];\n for (const id in data) {\n const property = data[id];\n\n let name = property.name;\n let cost = property.cost;\n let color = property.color;\n let rentPrice = {\n 1: property.rentPrice_1,\n 2: property.rentPrice_2,\n 3: property.rentPrice_3,\n 4: property.rentPrice_4,\n 5: property.rentPrice_5,\n 6: property.rentPrice_6,\n 7: property.rentPrice_7,\n 8: property.rentPrice_8,\n };\n\n let baseRent = property.baseRent;\n let buildingPrice = {\n house: property.housePrice,\n skyscraper: property.skyScraperPrice,\n monopolyTower: 10 * 10 ** 6,\n industrial: property.industrialBuildingPrice,\n negative: 0,\n };\n\n properties.push(\n new PropertyClass(\n name,\n cost,\n color,\n baseRent,\n rentPrice,\n buildingPrice\n )\n );\n }\n\n return properties;\n}\n\nexport function loadBuildingData() {\n return [\n new BuildingClass(\"1 House\", One_House, 1, \"house\"),\n new BuildingClass(\"2 Houses\", Two_Houses, 2, \"house\"),\n new BuildingClass(\"3 Houses\", Three_Houses, 3, \"house\"),\n new BuildingClass(\n \"1 Industrial Building\",\n One_Industrial,\n 1,\n \"industrial\"\n ),\n new BuildingClass(\n \"2 Industrial Buildings\",\n Two_Industrial,\n 2,\n \"industrial\"\n ),\n new BuildingClass(\n \"3 Industrial Buildings\",\n Three_Industrial,\n 3,\n \"industrial\"\n ),\n new BuildingClass(\"Skyscraper\", Skyscraper, 0, \"skyscraper\"),\n new BuildingClass(\"Monopoly Tower\", MonopolyTower, 0, \"monopolyTower\"),\n new BuildingClass(\"Sewage Treatment\", Sewage, 0, \"negative\", 1),\n new BuildingClass(\"Power Plant\", Power, 0, \"negative\", 2),\n new BuildingClass(\"Dump\", Dump, 0, \"negative\", 3),\n new BuildingClass(\"Prison\", Prison, 0, \"negative\", 4),\n ];\n}\n\nexport function createStocks() {\n const stocks = [];\n stocks.push(new StockClass(\"Apple\"));\n stocks.push(new StockClass(\"SpaceX\"));\n stocks.push(new StockClass(\"Alphabet\"));\n stocks.push(new StockClass(\"Amazon\"));\n stocks.push(new StockClass(\"Tesla\"));\n return stocks;\n}\n","import React, { useEffect, useRef, useState } from \"react\";\n\nimport \"./LobbyScreen.css\";\n\nimport { PlayerClass } from \"../../Data/PlayerClass\";\nimport {\n createStocks,\n loadBuildingData,\n loadPropertyData,\n} from \"../../Data/loadGameData\";\n\nexport default function LobbyScreen({\n setPlayers,\n startMoney,\n setBuildings,\n setAvailableProperties,\n setBank,\n setGameID,\n gameID,\n setStocks,\n setSpectateID,\n}) {\n const nameRef = useRef();\n const [pressCounter, setPressCounter] = useState(0);\n\n //Rerender Materialize on rerender\n useEffect(() => {\n try {\n // eslint-disable-next-line no-undef\n M.updateTextFields();\n } catch (e) {}\n });\n\n //Submit New Player Form\n const handleSubmit = (evt) => {\n evt.preventDefault();\n\n let name = nameRef.current.value;\n\n if (name === \"\") {\n return;\n }\n\n let length = 16;\n name =\n name.length > length ? name.substring(0, length - 3) + \"...\" : name;\n\n //Update PlayerList\n setPlayers((prevPlayers) => {\n const newPlayer = new PlayerClass(name, startMoney);\n return [...prevPlayers, newPlayer];\n });\n\n nameRef.current.value = \"\";\n };\n\n const timer = useRef(null);\n useEffect(() => {\n let timer = window.setTimeout(() => {\n setPressCounter(0);\n }, 8000);\n return () => {\n clearInterval(timer);\n };\n });\n\n const resetGame = () => {\n clearInterval(timer);\n\n setPressCounter(pressCounter + 1);\n\n if (pressCounter === 5) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: `Game reset`,\n classes: \"rounded black white-text\",\n });\n setPlayers([]);\n\n setBank(() => {\n let bank = new PlayerClass(\"Bank\");\n bank.balance = 10 ** 10;\n return bank;\n });\n\n loadPropertyData().then((data) => {\n setAvailableProperties(data);\n });\n\n setBuildings(loadBuildingData());\n setPressCounter(0);\n\n setSpectateID(\"/\");\n\n setStocks(createStocks());\n\n const zeroPad = (num, places) => String(num).padStart(places, \"0\");\n setGameID(zeroPad(Math.round(Math.random() * 10 ** 6), 6));\n } else {\n // eslint-disable-next-line no-undef\n M.toast({\n html: `Press ${5 - pressCounter} more times to reset Game`,\n classes: \"rounded red black-text\",\n });\n }\n };\n\n return (\n
\n
\n
\n
\n {/*Title */}\n
\n
\n Add Players\n
\n
\n {/*Form */}\n

\n Game ID: {gameID}\n

\n
\n
\n {/*Name */}\n\n
\n {/*Icon */}\n\n
\n
\n \n edit\n \n
\n\n {/*Name Input */}\n\n
\n \n \n
\n\n {/*Add Player Button */}\n
\n \n Add!\n \n
\n
\n
\n
\n {/*Add Player Button */}\n
\n
\n \n Reset Game\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n );\n}\n","export default __webpack_public_path__ + \"static/media/Logo2.7420fff0.png\";","import React from \"react\";\n\nimport LogoPNG from \"../../images/Logo2.png\";\nimport \"./Logo.css\";\n\nexport default function Logo({ setGameState }) {\n return (\n
\n {\n setGameState(\"main\");\n }}\n >\n \"logo\"\n \n
\n );\n}\n","import React from \"react\";\n\nimport Lobby from \"./lobbyScreen/LobbyScreen\";\nimport Logo from \"../components/logo/Logo\";\n\nimport $ from \"jquery\";\n\nexport default function LobbyScreen({\n setPlayers,\n setGameState,\n startMoney,\n setBuildings,\n setAvailableProperties,\n setBank,\n setGameID,\n gameID,\n setSpectateID,\n setStocks,\n}) {\n $(\"#navbar_lobby\").addClass(\"selected\");\n $(\"#navbar_spectate\").removeClass(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").removeClass(\"selected\");\n\n $(\".carousel\").show();\n return (\n <>\n \n \n \n );\n}\n","import React from \"react\";\n\nimport \"./MainMenu.css\";\n\nexport default function MainMenu({ setGameState }) {\n return (\n
\n
\n
\n
\n
\n
\n {\n setGameState(\"pay\");\n }}\n >\n \n attach_money\n \n Pay\n \n
\n
\n {\n setGameState(\"buy\");\n }}\n >\n \n account_balance\n \n Buy\n \n
\n
\n {\n setGameState(\"rent\");\n }}\n >\n \n receipt_long\n \n Rent\n \n
\n
\n {\n setGameState(\"bank\");\n }}\n >\n \n sell\n \n Sell\n \n
\n
\n {\n setGameState(\"bank\");\n }}\n >\n \n account_balance\n \n Bank\n \n
\n
\n {\n setGameState(\"stocks\");\n }}\n >\n \n trending_up\n \n Stock\n \n
\n
\n
\n
\n
\n
\n );\n}\n","import React from \"react\";\nimport Logo from \"../components/logo/Logo\";\nimport MainMenu from \"./mainScreen/MainMenu\";\n\nimport $ from \"jquery\";\n\nexport default function MainScreen({ setGameState, players }) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").remove(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").removeClass(\"selected\");\n\n $(\".carousel\").show();\n return (\n <>\n \n \n \n );\n}\n","import React from \"react\";\n\nimport \"./PlayerList.css\";\n\nexport default function PlayerList({ players, type, callback }) {\n const click = (player) => () => {\n if (callback !== undefined) {\n callback(player);\n }\n };\n return (\n
\n {players.map((player, i) => (\n \n
\n \n
\n
\n \n
\n \n ))}\n \n );\n}\n","import React, { useEffect, useRef } from \"react\";\n\nimport { PlayerClass } from \"../../Data/PlayerClass\";\nimport PlayerList from \"../../components/playerList/PlayerList\";\n\nimport $ from \"jquery\";\n\nimport \"./PayMenu.css\";\n\nexport default function PayScreen({ players, setPlayers }) {\n const amountRef = useRef();\n //Rerender Materialize on rerender\n useEffect(() => {\n try {\n // eslint-disable-next-line no-undef\n M.updateTextFields();\n } catch (e) {}\n });\n\n const transfer = () => {\n const senderID = $(\"input:radio[name=Sender]:checked\").val();\n const receiverID = $(\"input:radio[name=Receiver]:checked\").val();\n\n const amount = amountRef.current.value;\n\n if (senderID === undefined || receiverID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Players selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (amount === \"\") {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Amount selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const sender = players.find((player) => player.id === senderID);\n const receiver = players.find((player) => player.id === receiverID);\n\n const [succesfull, paymentMSG] = PlayerClass.sendMoney(\n sender,\n receiver,\n amount\n );\n if (!succesfull) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n let clone = players.map((player) => {\n if (player.id === sender.id) {\n return sender;\n }\n if (player.id === receiver.id) {\n return receiver;\n }\n return player;\n });\n\n setPlayers([...clone]);\n\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded green black-text\",\n });\n };\n\n return (\n
\n
\n
\n
\n {/* Title */}\n\n
\n
\n Sender\n
\n
\n\n \n
\n
\n
\n\n
\n
\n
\n {/* Title */}\n
\n
\n Amount\n
\n
\n\n
\n
\n \n \n
\n
\n\n
\n \n Send\n \n send\n \n \n
\n
\n
\n
\n\n
\n
\n
\n {/* Title */}\n\n
\n
\n Receiver\n
\n
\n\n \n
\n
\n
\n
\n );\n}\n","import React from \"react\";\nimport Logo from \"../components/logo/Logo\";\nimport PayMenu from \"./payScreen/PayMenu\";\nimport $ from \"jquery\";\n\nexport default function PayScreen({ players, setPlayers, setGameState }) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").removeClass(\"selected\");\n $(\"#navbar_pay\").addClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").removeClass(\"selected\");\n \n\n $(\".carousel\").show();\n return (\n <>\n \n \n \n );\n}\n","import React from \"react\";\nimport { PlayerClass } from \"../../Data/PlayerClass\";\n\nimport \"./BuildingCard.css\";\n\nexport default function BuildingCard({ building, price, clickCallback }) {\n const handleClick = () => {\n clickCallback(building, price);\n };\n\n let style = `gridBox ${\n building.type === \"house\"\n ? \"green darken-3\"\n : building.type === \"industrial\"\n ? \"blue-grey darken-4\"\n : building.type === \"negative\"\n ? \"red darken-2\"\n : \"\"\n }`;\n\n return (\n \n
\n
\n

{building.name}

\n\n

\n {building.negativeSpace !== undefined\n ? \"Slots: \" + building.negativeSpace\n : building.slotsTaken > 0\n ? \"Slots: \" + building.slotsTaken\n : \"\"}\n
\n
\n {PlayerClass.formatMoney(price)}\n

\n
\n\n
\n \"img\"\n
\n
\n
\n );\n}\n","import React from \"react\";\nimport { PlayerClass } from \"../../Data/PlayerClass\";\n\nimport \"./PropertyCard.css\";\n\nexport default function PropertyCard({ property, clickCallback, showType }) {\n let style = `gridBox ${property.color} ${\n property.mortage === true ? \"mortage\" : \"\"\n }`;\n\n const handleClick = () => {\n try {\n clickCallback(property);\n } catch (e) {}\n };\n\n return (\n \n
\n
\n

{property.name}

\n\n {showType === \"cost\" && (\n

\n {PlayerClass.formatMoney(property.cost)}\n

\n )}\n {showType === \"rent\" && (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n
Base Rent:\n \n {PlayerClass.formatMoney(\n property.baseRent\n )}\n \n
Houses:\n {property.housesCount} \n
Skyscraper:\n \n {property.owner &&\n property.owner.hasSkyScraperOn[\n property.color\n ]\n ? \"Yes\"\n : \"No\"}\n \n
Disturbance Slots:\n {property.negativeBuildings}\n
Total Rent:\n \n {PlayerClass.formatMoney(\n property.calcRentCost()\n )}\n \n
\n \n )}\n
\n\n
\n \"img\"\n
\n
\n
\n );\n}\n","import React, { useEffect } from \"react\";\n\nimport BuildingCard from \"../buildingCard/BuildingCard\";\nimport PropertyCard from \"../propertyCard/PropertyCard\";\n\nimport \"./Modal.css\";\n\nexport default function BuyModal({\n title,\n description,\n properties,\n selectedProperty,\n setselectedProperty,\n clickCallback,\n showType,\n}) {\n useEffect(() => {\n var modalElems = document.querySelectorAll(\".modal\");\n // eslint-disable-next-line no-undef\n M.Modal.init(modalElems, {});\n }, []);\n\n function renderCards(property, i) {\n if (property.className === \"PropertyClass\") {\n return (\n \n );\n }\n if (property.className === \"BuildingClass\") {\n if (selectedProperty === null) {\n return
;\n }\n\n let type = property.type;\n\n let priceMultiplier = [\"house\", \"industrial\"].includes(\n property.type\n )\n ? property.slotsTaken\n : 1;\n\n return (\n \n );\n }\n }\n\n return (\n
\n
\n

{title}

\n
{description}
\n
\n\n
\n {properties.length === 0 && (\n
Player doesn't own any properties
\n )}\n {properties\n .sort((a, b) => {\n return a.idx - b.idx;\n })\n .map((property, i) => renderCards(property, i))}\n
\n
\n );\n}\n","import React, { useState } from \"react\";\n\nimport { PlayerClass } from \"../../Data/PlayerClass\";\nimport BuyModal from \"../../components/modal/Modal\";\nimport PropertyCard from \"./../../components/propertyCard/PropertyCard\";\nimport PlayerList from \"../../components/playerList/PlayerList\";\nimport { PropertyClass } from \"../../Data/PropertyClass\";\n\nimport $ from \"jquery\";\n\nimport \"./BuyMenu.css\";\n\nlet housesBuilt = 0;\n\nexport default function BuyMenu({\n players,\n setPlayers,\n availableProperties,\n setAvailableProperties,\n buildings,\n setBuildings,\n bank,\n maxHouses,\n}) {\n const [selectedProperty, setselectedProperty] = useState(null);\n const [playerProperties, setplayerProperties] = useState([]);\n const [selectedPropertyToBuild, setselectedPropertyToBuild] =\n useState(null);\n\n const purchaseProperty = () => {\n const buyerID = $(\"input:radio[name=Buyer]:checked\").val();\n\n if (buyerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Buyer selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (selectedProperty === null) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Property selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const buyer = players.find((player) => player.id === buyerID);\n\n const [succesfull, paymentMSG] = PlayerClass.buyProperty(\n buyer,\n selectedProperty\n );\n\n if (!succesfull) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n setPlayers(\n players.map((player) => {\n if (player.id === buyer.id) {\n return buyer;\n }\n return player;\n })\n );\n\n setAvailableProperties(\n availableProperties.filter(\n (prop) => prop.id !== selectedProperty.id\n )\n );\n\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded green black-text\",\n });\n };\n\n const buyBuilding = (building, price) => {\n const buyerID = $(\"input:radio[name=Buyer]:checked\").val();\n\n if (buyerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Buyer selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (selectedPropertyToBuild === null) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Property selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (maxHouses < housesBuilt + building.slotsTaken) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: `Missing ${\n housesBuilt + building.slotsTaken - maxHouses\n } houses`,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const buyer = players.find((player) => player.id === buyerID);\n\n if (buyer.balance < price) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Not enought Money\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n var newSlotsNeeded = building.slotsTaken;\n\n if (selectedPropertyToBuild.buildingSlotsTaken + newSlotsNeeded > 8) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: `Not Enought Slots available,missing ${\n selectedPropertyToBuild.buildingSlotsTaken +\n newSlotsNeeded -\n 8\n }`,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (\n selectedPropertyToBuild.owner.hasSkyScraperOn[\n selectedPropertyToBuild.color\n ] &&\n building.type === \"skyscraper\"\n ) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Skyscraper is already built on this color\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const [succesfullTransaction, transactionMSG] =\n PlayerClass.builtBuilding(\n buyer,\n selectedPropertyToBuild,\n building,\n price\n );\n\n if (building.type === \"monopolyTower\") {\n setBuildings(buildings.filter((build) => build.id !== building.id));\n }\n\n if (building.type === \"house\") {\n housesBuilt += newSlotsNeeded;\n }\n\n if (!succesfullTransaction) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: transactionMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const [succesfull, paymentMSG] = PropertyClass.builtBuilding(\n selectedPropertyToBuild,\n building\n );\n\n if (!succesfull) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n buyer.calcEstimatedValue();\n\n setPlayers(\n players.map((player) => {\n if (player.id === buyer.id) {\n return buyer;\n }\n return player;\n })\n );\n\n closeBuyHome();\n\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded green black-text\",\n });\n };\n\n const openBuyHome = (property) => {\n setselectedPropertyToBuild(property);\n var modalElems = document.querySelectorAll(\"#modalBuyHome\");\n modalElems.forEach((elem) => {\n // eslint-disable-next-line no-undef\n var instance = M.Modal.getInstance(elem);\n instance.open();\n });\n };\n\n const closeBuyHome = (property) => {\n setselectedPropertyToBuild(property);\n var modalElems = document.querySelectorAll(\"#modalBuyHome\");\n modalElems.forEach((elem) => {\n // eslint-disable-next-line no-undef\n var instance = M.Modal.getInstance(elem);\n instance.close();\n });\n };\n\n const closeModal = (property) => {\n setselectedProperty(property);\n var modalElems = document.querySelectorAll(\".modal\");\n modalElems.forEach((elem) => {\n // eslint-disable-next-line no-undef\n var instance = M.Modal.getInstance(elem);\n instance.close();\n });\n };\n\n const openBuyBuilding = () => {\n const buyerID = $(\"input:radio[name=Buyer]:checked\").val();\n\n if (buyerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Buyer selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const buyer = players.find((player) => player.id === buyerID);\n\n setplayerProperties(buyer.properties);\n\n var modalElems = document.querySelectorAll(\"#modalSelectPropety\");\n modalElems.forEach((elem) => {\n // eslint-disable-next-line no-undef\n var instance = M.Modal.getInstance(elem);\n instance.open();\n });\n };\n\n return (\n
\n
\n
\n
\n {/* Title */}\n\n
\n
\n Buyer\n
\n
\n\n \n
\n
\n
\n\n
\n {selectedProperty !== null && (\n
\n
\n
\n
\n {}}\n showType={\"cost\"}\n />\n
\n
\n\n
\n \n \n attach_money\n \n Purchase\n \n
\n
\n
\n )}\n
\n\n
\n
\n
\n {/* Title */}\n
\n
\n Type\n
\n
\n\n
\n
\n \n \n home\n \n Bulding\n \n
\n
\n\n
\n
\n \n \n texture\n \n Property\n \n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n );\n}\n","import React from \"react\";\nimport Logo from \"../components/logo/Logo\";\n\nimport $ from \"jquery\";\n\nimport BuyMenu from \"./buyScreen/BuyMenu\";\n\nexport default function BuyScreen({\n players,\n setPlayers,\n setGameState,\n availableProperties,\n setAvailableProperties,\n buildings,\n setBuildings,\n bank,\n maxHouses\n}) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").removeClass(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").addClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").removeClass(\"selected\");\n\n $(\".carousel\").show();\n\n return (\n <>\n \n \n \n );\n}\n","import React, { useRef } from \"react\";\n\nimport { PlayerClass } from \"../../Data/PlayerClass\";\nimport PlayerList from \"../../components/playerList/PlayerList\";\n\nimport BankImg from \"../../images/Bank.png\"; //\n\nimport $ from \"jquery\";\nimport \"./BankMenu.css\";\n\nexport default function BankScreen({ players, setPlayers, bank }) {\n const amountRef = useRef();\n\n const transfer = (direction, val) => {\n const customerID = $(\"input:radio[name=Customer]:checked\").val();\n\n const amount = val === undefined ? amountRef.current.value : val;\n\n if (customerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Customer selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (amount === \"\") {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Amount selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const customer = players.find((player) => player.id === customerID);\n\n const [succesfull, paymentMSG] =\n direction === \"send\"\n ? PlayerClass.sendMoney(customer, bank, amount)\n : PlayerClass.sendMoney(bank, customer, amount);\n\n if (!succesfull) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n let clone = players.map((player) => {\n if (player.id === customer.id) {\n return customer;\n }\n\n return player;\n });\n\n setPlayers([...clone]);\n\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded green black-text\",\n });\n };\n\n return (\n
\n
\n
\n
\n {/* Title */}\n\n
\n
\n Customer\n
\n
\n\n \n
\n
\n
\n\n
\n
\n
\n {/* Title */}\n
\n
\n Amount\n
\n
\n\n
\n
\n \n \n
\n
\n\n
\n {\n transfer(\"send\");\n }}\n >\n Send\n \n keyboard_double_arrow_right\n \n \n
\n
\n {\n transfer(\"receive\");\n }}\n >\n Receive\n \n keyboard_double_arrow_left\n \n \n
\n
\n
\n
\n\n
\n
\n
\n {/* Title */}\n\n
\n
Bank
\n
\n\n
\n
\n \n
\n
\n
\n
\n {\n transfer(\"receive\", \"5M\");\n }}\n >\n 5 M \n \n keyboard_double_arrow_left\n \n \n
\n
\n {\n transfer(\"receive\", \"7M\");\n }}\n >\n 7 M \n \n keyboard_double_arrow_left\n \n \n
\n
\n
\n
\n
\n
\n );\n}\n","import React from \"react\";\nimport Logo from \"../components/logo/Logo\";\nimport BankMenu from \"./bankScreen/BankMenu\";\n\nimport $ from \"jquery\";\n\nexport default function BankScreen({\n players,\n setPlayers,\n setGameState,\n bank,\n}) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").removeClass(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").addClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").removeClass(\"selected\");\n\n $(\".carousel\").show();\n return (\n <>\n \n \n \n );\n}\n","import { PlayerClass } from \"../../Data/PlayerClass\";\n\nexport const options = {\n layout: {\n padding: {\n top: 20,\n bottom : 0,\n left: 10,\n right: 10,\n },\n },\n\n scales: {\n y: {\n ticks: {\n color: \"white\",\n callback: function (value, index, values) {\n return PlayerClass.formatMoney(value);\n },\n },\n suggestedMin: 0,\n },\n x: {\n ticks: {\n color: \"white\",\n font: {\n size: 10,\n },\n },\n type: \"time\",\n time: { displayFormats: { minute: \"HH:mm\" } },\n },\n },\n plugins: {\n legend: {\n position: \"bottom\",\n labels: {\n color: \"white\",\n align: \"end\",\n font: {\n size: 15,\n },\n },\n },\n\n zoom: {\n zoom: {\n wheel: {\n enabled: true,\n },\n pinch: {\n enabled: true,\n },\n overScaleMode: \"y\",\n },\n pan: {\n enabled: true,\n mode: \"xy\",\n },\n },\n },\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Scatter } from \"react-chartjs-2\";\nimport PlayerList from \"../../components/playerList/PlayerList\";\nimport { PlayerClass } from \"../../Data/PlayerClass\";\n\nimport { options } from \"./Plot\";\n\nimport $ from \"jquery\";\n\nimport \"./StocksMenu.css\";\nimport CircularJSON from \"circular-json\";\n\nexport default function StocksMenu({\n stocks,\n setPlayers,\n players,\n bank,\n setStocks,\n}) {\n const [selectedPlayer, setselectedPlayer] = useState(players[0] || null);\n const [chartData, setChartData] = useState({});\n\n const amountRef = useRef(0);\n const stockRef = useRef(null);\n\n const [data, setData] = useState([]);\n\n const [paused, setpaused] = useState(false);\n\n useEffect(() => {\n var elems = document.querySelectorAll(\"select\");\n // eslint-disable-next-line no-undef\n M.FormSelect.init(elems, {});\n }, []);\n\n useEffect(() => {\n let datasets = [];\n\n const colors = [\n \"DarkOrange\",\n \"DeepSkyBlue\",\n \"MediumVioletRed\",\n \"Gold\",\n \"Chartreuse\",\n \"MintCream\",\n \"lime\",\n\n \"blue\",\n ];\n\n datasets = data.map((stock, i) => {\n return {\n data: stock.data,\n label: stock.name,\n showLine: true,\n backgroundColor: \"black\",\n borderColor: colors[i % colors.length],\n borderWidth: 2,\n pointRadius: 0,\n tension: 0.4,\n };\n });\n\n setChartData({\n datasets: datasets,\n });\n }, [data]);\n\n useEffect(() => {\n setInterval(() => {\n if (stocks[0].paused === false) {\n setData([...stocks]);\n\n const stockJSON = CircularJSON.stringify(stocks);\n localStorage.setItem(\"stocks\", stockJSON);\n }\n }, 5000);\n\n setData([...stocks]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const selectPlayer = (player) => {\n setselectedPlayer(player);\n };\n\n const interact = (type) => {\n const buyerID = $(\"input:radio[name=Buyer]:checked\").val();\n const stockName = stockRef.current.value;\n let amount = amountRef.current.value;\n if (buyerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Buyer selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (stockName === \"\") {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Stock selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (amount === \"\") {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Amount set\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n let stock = stocks.find((stock) => stock.name === stockName);\n\n if (stock.data.length === 0) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Stock has no values yet\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const buyer = players.find((player) => player.id === buyerID);\n\n const stockPrice = stock.data.at(-1).y;\n\n if (type === \"buy\") {\n const [succesfull, paymentMSG] = PlayerClass.sendMoney(\n buyer,\n bank,\n amount\n );\n\n if (!succesfull) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const amountStocksBought =\n PlayerClass.parseMoney(amount) / stockPrice;\n\n if (!(stockName in buyer.stocks)) {\n buyer.stocks[stockName] = 0;\n }\n\n buyer.stocks[stockName] += amountStocksBought;\n } else {\n if (!(stockName in buyer.stocks)) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Player doesn't own that stock\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n let amountStocksSold = PlayerClass.parseMoney(amount) / stockPrice;\n\n if (amountStocksSold > buyer.stocks[stockName]) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Not enough Stocks\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (PlayerClass.parseMoney(amount) === 0) {\n amountStocksSold = buyer.stocks[stockName];\n amount = amountStocksSold * stockPrice;\n }\n\n buyer.stocks[stockName] -= amountStocksSold;\n\n const [succesfull, paymentMSG] = PlayerClass.sendMoney(\n bank,\n buyer,\n amount\n );\n\n if (!succesfull) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n }\n\n let clone = players.map((player) => {\n if (player.id === buyer.id) {\n return buyer;\n }\n\n return player;\n });\n\n setPlayers([...clone]);\n };\n\n const pause = () => {\n stocks.forEach((stock) => {\n stock.paused = !stock.paused;\n });\n\n setpaused(!paused);\n };\n\n const clear = () => {\n stocks.forEach((stock) => {\n stock.data = [];\n stock.calcNew();\n });\n setData([...stocks]);\n };\n\n return (\n <>\n
\n
\n
\n
\n {/* Title */}\n\n
\n
\n Buyer\n
\n
\n\n \n
\n
\n
\n\n
\n
\n \n
\n
\n \n Clear\n \n restart_alt\n \n \n
\n
\n \n {paused ? \"Start\" : \"Pause\"}\n \n {paused ? \"play_arrow\" : \" pause\"}\n \n \n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n \n
\n\n
\n \n \n
\n
\n
\n
\n {\n interact(\"buy\");\n }}\n >\n Buy\n \n place\n \n \n
\n
\n {\n interact(\"sell\");\n }}\n >\n Sell\n \n send\n \n \n
\n
\n
\n {selectedPlayer !== null && (\n
\n \n \n \n \n \n \n \n \n \n {selectedPlayer &&\n Object.keys(\n selectedPlayer.stocks\n ).map((key, i) => {\n return (\n \n \n \n \n \n );\n })}\n \n
\n Stock\n \n Value\n \n Amount\n
\n {key}\n \n {PlayerClass.formatMoney(\n PlayerClass.calcStockPrice(\n selectedPlayer,\n key,\n stocks\n )\n )}\n \n {selectedPlayer\n .stocks[key] &&\n selectedPlayer.stocks[\n key\n ].toFixed(2)}\n
\n
\n )}\n
\n
\n
\n \n );\n}\n","import React from \"react\";\nimport Logo from \"../components/logo/Logo\";\nimport $ from \"jquery\";\nimport StocksMenu from \"./stocksScreen/StocksMenu\";\n\nexport default function StocksScreen({\n stocks,\n setPlayers,\n players,\n setStocks,\n setGameState,\n bank,\n}) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").removeClass(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").addClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").removeClass(\"selected\");\n\n $(\".carousel\").show();\n\n return (\n <>\n \n \n \n );\n}\n","import React, { useState } from \"react\";\n\nimport PlayerList from \"../../components/playerList/PlayerList\";\nimport BuyModal from \"../../components/modal/Modal\";\nimport PropertyCard from \"../../components/propertyCard/PropertyCard\";\n\nimport { PlayerClass } from \"../../Data/PlayerClass\";\nimport $ from \"jquery\";\n\nimport \"./RentMenu.css\";\n\nexport default function RentMenu({ players, setPlayers }) {\n const [playerProperties, setplayerProperties] = useState([]);\n const [selectedProperty, setselectedProperty] = useState(null);\n\n const pay = () => {\n const renterID = $(\"input:radio[name=Renter]:checked\").val();\n\n if (renterID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Renter selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (selectedProperty === null) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Property selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (selectedProperty.mortage === true) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Property has mortage\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const renter = players.find((player) => player.id === renterID);\n\n const [succesfull, paymentMSG] = PlayerClass.sendMoney(\n renter,\n selectedProperty.owner,\n selectedProperty.calcRentCost()\n );\n if (!succesfull) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n let clone = players.map((player) => {\n if (player.id === renter.id) {\n return renter;\n }\n if (player.id === selectedProperty.owner.id) {\n return selectedProperty.owner;\n }\n return player;\n });\n\n setPlayers([...clone]);\n\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded green black-text\",\n });\n };\n\n const select = () => {\n const ownerID = $(\"input:radio[name=Owner]:checked\").val();\n\n if (ownerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Owner selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const owner = players.find((player) => player.id === ownerID);\n\n setplayerProperties(owner.properties);\n openSelectProperty();\n };\n\n const closeSelectList = (property) => {\n setselectedProperty(property);\n var modalElems = document.querySelectorAll(\"#modalSelectProperty\");\n modalElems.forEach((elem) => {\n // eslint-disable-next-line no-undef\n var instance = M.Modal.getInstance(elem);\n instance.close();\n });\n };\n\n const openSelectProperty = () => {\n var modalElems = document.querySelectorAll(\"#modalSelectProperty\");\n modalElems.forEach((elem) => {\n // eslint-disable-next-line no-undef\n var instance = M.Modal.getInstance(elem);\n instance.open();\n });\n };\n\n return (\n <>\n
\n
\n
\n
\n {/* Title */}\n\n
\n
\n Renter\n
\n
\n\n \n
\n
\n
\n\n
\n
\n
\n {selectedProperty !== null && (\n
\n
\n \n
\n
\n )}\n\n
\n
\n \n Find\n \n place\n \n \n
\n
\n \n Pay\n \n send\n \n \n
\n
\n
\n
\n
\n\n
\n
\n
\n {/* Title */}\n\n
\n
\n Owner\n
\n
\n\n {\n setselectedProperty(null);\n }}\n />\n
\n
\n
\n
\n\n
\n \n
\n \n );\n}\n","import React from \"react\";\nimport Logo from \"../components/logo/Logo\";\nimport $ from \"jquery\";\nimport RentMenu from \"./rentScreen/RentMenu\";\n\nexport default function RentScreen({ players, setPlayers, setGameState }) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").removeClass(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").addClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").removeClass(\"selected\");\n\n $(\".carousel\").show();\n return (\n <>\n \n \n \n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\n\nimport PlayerList from \"../../components/playerList/PlayerList\";\nimport BuyModal from \"../../components/modal/Modal\";\nimport PropertyCard from \"../../components/propertyCard/PropertyCard\";\n\nimport { PlayerClass } from \"../../Data/PlayerClass\";\nimport $ from \"jquery\";\n\nimport \"./SellMenu.css\";\n\nexport default function RentMenu({ players, setPlayers, bank }) {\n const [playerProperties, setplayerProperties] = useState([]);\n const [selectedProperty, setselectedProperty] = useState(null);\n const [pressCounter, setPressCounter] = useState(0);\n\n const amountRef = useRef();\n\n const sell = () => {\n const sellerID = $(\"input:radio[name=Seller]:checked\").val();\n const buyerID = $(\"input:radio[name=Buyer]:checked\").val();\n const amount = amountRef.current.value;\n\n if (sellerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Seller selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n if (buyerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Buyer selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n if (amount === \"\") {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Amount set\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (selectedProperty === null) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Property selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const seller = [...players, bank].find(\n (player) => player.id === sellerID\n );\n const buyer = [...players, bank].find(\n (player) => player.id === buyerID\n );\n\n if (buyer.balance < amount) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Not enought Money\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const [succesfull, paymentMSG] = PlayerClass.sellProperty(\n seller,\n buyer,\n amount,\n selectedProperty,\n bank\n );\n\n if (!succesfull) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n let clone = players.map((player) => {\n if (player.id === seller.id) {\n return seller;\n }\n if (player.id === buyer.id) {\n return buyer;\n }\n return player;\n });\n\n setPlayers([...clone]);\n\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded green black-text\",\n });\n };\n\n const select = () => {\n const sellerID = $(\"input:radio[name=Seller]:checked\").val();\n\n if (sellerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Seller selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const owner = [...players, bank].find(\n (player) => player.id === sellerID\n );\n\n setplayerProperties(owner.properties);\n openSelectProperty();\n };\n\n const toggleMortage = (property) => {\n property.mortage = !property.mortage;\n\n const ownerID = $(\"input:radio[name=Seller]:checked\").val();\n const owner = [...players, bank].find(\n (player) => player.id === ownerID\n );\n\n let clone = players.map((player) => {\n return player;\n });\n\n if (property.mortage === true) {\n PlayerClass.sendMoney(bank, owner, property.calcRentCost());\n } else {\n PlayerClass.sendMoney(owner, bank, property.calcRentCost());\n }\n\n setPlayers([...clone]);\n\n // eslint-disable-next-line no-undef\n M.toast({\n html: `Mortage toggled ${property.mortage ? \"On\" : \"Off\"} for ${\n property.name\n }`,\n classes: \"rounded green black-text\",\n });\n };\n\n const sellSurgeon = (property) => {\n const amount = property.negativeBuildings * 0.5 * 10 ** 6;\n\n const sellerID = $(\"input:radio[name=Seller]:checked\").val();\n\n const seller = [...players, bank].find(\n (player) => player.id === sellerID\n );\n\n const [succesfull, paymentMSG] = PlayerClass.sendMoney(\n seller,\n bank,\n amount\n );\n\n if (!succesfull) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: paymentMSG,\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n property.negativeBuildings = 0;\n\n let clone = players.map((player) => {\n return player;\n });\n\n setPlayers([...clone]);\n };\n\n const timer = useRef(null);\n useEffect(() => {\n let timer = window.setTimeout(() => {\n setPressCounter(0);\n }, 8000);\n return () => {\n clearInterval(timer);\n };\n });\n\n const declareBankruptcy = () => {\n const sellerID = $(\"input:radio[name=Seller]:checked\").val();\n const buyerID = $(\"input:radio[name=Buyer]:checked\").val();\n\n if (sellerID === undefined) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No Seller selected\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n if (buyerID !== bank.id) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Bank needs to be the buyer\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n if (sellerID === bank.id) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Bank cannot go bancrupt, we are not in Greece\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n clearInterval(timer);\n setPressCounter(pressCounter + 1);\n\n const seller = [...players, bank].find(\n (player) => player.id === sellerID\n );\n\n if (pressCounter === 5) {\n seller.declareBankruptcy(bank);\n\n setPlayers([...players]);\n setPressCounter(0);\n\n // eslint-disable-next-line no-undef\n M.toast({\n html: `${seller.name} declared Bankruptcy`,\n classes: \"rounded black white-text\",\n });\n } else {\n // eslint-disable-next-line no-undef\n M.toast({\n html: `${seller.name}, press ${\n 5 - pressCounter\n } more times to declare Bankruptcy`,\n classes: \"rounded red black-text\",\n });\n }\n };\n\n const closeSelectList = (property) => {\n setselectedProperty(property);\n var modalElems = document.querySelectorAll(\"#modalSelectProperty\");\n modalElems.forEach((elem) => {\n // eslint-disable-next-line no-undef\n var instance = M.Modal.getInstance(elem);\n instance.close();\n });\n };\n\n const openSelectProperty = () => {\n var modalElems = document.querySelectorAll(\"#modalSelectProperty\");\n modalElems.forEach((elem) => {\n // eslint-disable-next-line no-undef\n var instance = M.Modal.getInstance(elem);\n instance.open();\n });\n };\n\n return (\n <>\n
\n
\n
\n
\n {/* Title */}\n\n
\n
\n Seller\n
\n
\n\n {\n setselectedProperty(null);\n }}\n />\n
\n
\n
\n\n
\n
\n
\n
\n
\n \n Bankruptcy\n \n
\n\n
\n {selectedProperty && (\n {\n toggleMortage(selectedProperty);\n }}\n >\n Toggle Mortage\n \n )}\n
\n
\n\n {selectedProperty !== null && (\n
\n
\n
\n \n
\n
\n\n
\n
\n {selectedProperty.negativeBuildings >\n 0 && (\n {\n sellSurgeon(\n selectedProperty\n );\n }}\n >\n {\"Remove Distrubance: \" +\n PlayerClass.formatMoney(\n 0.5 *\n 10 ** 6 *\n selectedProperty.negativeBuildings\n )}\n \n )}\n
\n
\n
\n )}\n\n
\n
\n \n Find\n \n place\n \n \n
\n
\n \n \n
\n
\n \n Sell\n \n send\n \n \n
\n
\n
\n
\n
\n\n
\n
\n
\n {/* Title */}\n\n
\n
\n Buyer\n
\n
\n\n \n
\n
\n
\n
\n\n
\n \n
\n \n );\n}\n","import React from \"react\";\nimport Logo from \"../components/logo/Logo\";\nimport $ from \"jquery\";\nimport SellMenu from \"./sellScreen/SellMenu\";\n\nexport default function SellScreen({\n players,\n setPlayers,\n setGameState,\n bank,\n setBank,\n}) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").removeClass(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").addClass(\"selected\");\n $(\"#navbar_settings\").removeClass(\"selected\");\n\n $(\".carousel\").show();\n return (\n <>\n \n \n \n );\n}\n","import React, { useEffect, useState } from \"react\";\n\nimport \"./SpectateMenu.css\";\n\nimport BottomBar from \"../../components/bottomBar/BottomBar\";\nconst CircularJSON = require(\"circular-json\");\n\nexport default function SpectateMenu({\n socket,\n socketConnected,\n spectateID,\n setSpectateID,\n}) {\n const [submitedPlayers, setSubmitedPlayers] = useState([]);\n\n //Rerender Materialize on rerender\n useEffect(() => {\n setTimeout(() => {\n // eslint-disable-next-line no-undef\n M.updateTextFields();\n }, 200);\n });\n\n useEffect(() => {\n var modalElems = document.querySelectorAll(\".modal\");\n // eslint-disable-next-line no-undef\n M.Modal.init(modalElems, {});\n }, []);\n\n const submitForm = (e) => {\n e.preventDefault();\n const groupID = e.target[0].value;\n\n socket.emit(\"changeRoom\", groupID);\n socket.emit(\"requestData\", groupID);\n e.target[0].value = \"\";\n closeModal();\n setSpectateID(groupID);\n };\n\n useEffect(() => {\n if (socket) {\n const dataListener = (data) => {\n var players = CircularJSON.parse(data.playersJSON);\n setSubmitedPlayers(players);\n };\n\n socket.on(\"Data\", dataListener);\n\n return () => {\n socket.off(\"Data\", dataListener);\n };\n }\n }, [socket, spectateID]);\n\n useEffect(() => {\n if (socket && spectateID !== \"/\") {\n socket.emit(\"changeRoom\", spectateID);\n socket.emit(\"requestData\", spectateID);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const closeModal = () => {\n var modalElems = document.querySelectorAll(\"#settingsModal\");\n modalElems.forEach((elem) => {\n // eslint-disable-next-line no-undef\n var instance = M.Modal.getInstance(elem);\n instance.close();\n });\n };\n\n return (\n <>\n
\n
\n \n Settings\n \n
\n
\n\n
\n
\n
\n

\n {spectateID === \"/\"\n ? \"No Listening ID given\"\n : `Listening on Game-ID: ${spectateID}`}\n

\n\n
\n {!socketConnected || !socket ? (\n
\n Error: Socket not connected\n
\n ) : (\n
\n \n
\n \n \n
\n\n
\n \n \n send\n \n \n
\n \n
\n )}\n
\n
\n
\n
\n\n \n \n );\n}\n","import React from \"react\";\n\nimport $ from \"jquery\";\nimport SpectateMenu from \"./spectateScreen/SpectateMenu\";\n\nexport default function SpectateScreen({\n socket,\n socketConnected,\n spectateID,\n setSpectateID,\n}) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").addClass(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").remove(\"selected\");\n\n $(\".carousel\").hide();\n return (\n <>\n \n \n );\n}\n","import React, { useEffect, useState } from \"react\";\n\nimport { PlayerClass } from \"../../Data/PlayerClass\";\nimport PlayerList from \"../../components/playerList/PlayerList\";\n\nimport \"./OverviewMenu.css\";\nimport PropertyCard from \"../../components/propertyCard/PropertyCard\";\n\nimport $ from \"jquery\";\n\nimport { Chart, Scatter } from \"react-chartjs-2\";\nimport { options } from \"./Plot\";\nimport \"chartjs-adapter-moment\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\n\nChart.register(zoomPlugin);\n\nexport default function OverviewMenu({ players }) {\n const [selectedPlayer, setselectedPlayer] = useState(players[0] || null);\n const [totalHistory, settotalHistory] = useState(\n new PlayerClass(\"Total History\", 10)\n );\n\n const getData = () => {\n if (selectedPlayer === null) {\n return {};\n }\n\n const datasets = [];\n\n if (selectedPlayer.name === \"Total History\") {\n const colors = [\n \"red\",\n \"Turquoise\",\n \"Gold\",\n \"OrangeRed\",\n \"MintCream\",\n \"lime\",\n \"Violet\",\n \"cyan\",\n \"blue\",\n ];\n\n players.forEach((player, i) => {\n const dataBalance = [];\n const dataNetWorth = [];\n const playerLabels = [];\n\n player.history.forEach(({ time, total, netWorth }, i) => {\n playerLabels.push(time);\n dataBalance.push({ x: time, y: total });\n dataNetWorth.push(netWorth);\n });\n\n datasets.push({\n label: player.name,\n data: dataBalance.reverse(),\n\n showLine: true,\n backgroundColor: \"yellow\",\n borderColor: colors[i % colors.length],\n borderWidth: 3,\n pointRadius: 4,\n tension: 0.4,\n cubicInterpolationMode: true,\n });\n });\n } else {\n const dataBalance = [];\n const dataNetWorth = [];\n const playerLabels = [];\n\n selectedPlayer.history.forEach(({ time, total, netWorth }, i) => {\n playerLabels.push(time);\n dataBalance.push({ x: time, y: total });\n dataNetWorth.push({ x: time, y: netWorth });\n });\n\n datasets.push({\n label: \"Balance\",\n data: dataBalance.reverse(),\n\n showLine: true,\n backgroundColor: \"blue\",\n borderColor: \"lime\",\n borderWidth: 3,\n pointRadius: 4,\n tension: 0.4,\n });\n\n datasets.push({\n label: \"Net Worth\",\n data: dataNetWorth.reverse(),\n\n showLine: true,\n backgroundColor: \"black\",\n borderColor: \"yellow\",\n borderWidth: 3,\n pointRadius: 4,\n tension: 0.4,\n });\n }\n\n return {\n datasets: datasets,\n };\n };\n\n useEffect(() => {\n try {\n var elemsCarousell = document.querySelectorAll(\".carousel\");\n // eslint-disable-next-line no-undef\n M.Carousel.init(elemsCarousell, {\n dist: -100,\n padding: 10,\n numVisible: 10,\n });\n } catch (e) {}\n });\n\n useEffect(() => {\n $(\"#bottomBar\").hide();\n\n try {\n var elems = document.querySelectorAll(\".collapsible\");\n // eslint-disable-next-line no-undef\n M.Collapsible.init(elems, {\n onOpenEnd: () => {\n try {\n var elemsCarousell =\n document.querySelectorAll(\".carousel\");\n // eslint-disable-next-line no-undef\n M.Carousel.init(elemsCarousell, {\n dist: -100,\n padding: 10,\n numVisible: 10,\n });\n } catch (e) {}\n },\n });\n // eslint-disable-next-line no-undef\n var instance = M.Collapsible.getInstance(elems[0]);\n instance.open(2);\n } catch (e) {}\n }, []);\n\n useEffect(() => {\n let history = [];\n players.forEach((player) => {\n history.push(...player.history);\n });\n\n let clone = { ...totalHistory };\n\n clone.history = history;\n\n settotalHistory(clone);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const selectPlayer = (player) => {\n setselectedPlayer(player);\n };\n\n return (\n <>\n
\n
\n
\n
\n {/* Title */}\n\n
\n
\n Player\n
\n
\n\n \n
\n
\n
\n
\n
    \n
  • \n
    \n apartment\n Properties\n
    \n
    \n {selectedPlayer === null && (\n

    \n {selectedPlayer === null\n ? \"No Player selected\"\n : selectedPlayer.properties\n .length === 0\n ? \"Player doesn't own any properties\"\n : \"\"}\n

    \n )}\n\n {selectedPlayer &&\n selectedPlayer.name === \"Total History\" && (\n

    \n /\n

    \n )}\n\n {selectedPlayer !== null &&\n selectedPlayer.name !== \"Total History\" && (\n
    \n {selectedPlayer.properties.map(\n (property, i) => {\n return (\n \n
    \n {}}\n clickCallback={() => {}}\n showType={\n \"rent\"\n }\n />\n
    \n
    \n );\n }\n )}\n
    \n )}\n
\n \n
  • \n
    \n history\n History\n
    \n
    \n {selectedPlayer === null && (\n

    \n {selectedPlayer === null\n ? \"No Player selected\"\n : selectedPlayer.properties\n .length === 0\n ? \"Player doesn't own any properties\"\n : \"\"}\n

    \n )}\n\n
    \n \n \n \n \n \n \n \n \n \n \n \n {selectedPlayer &&\n selectedPlayer.history\n .sort((a, b) => {\n return (\n new Date(b.time) -\n new Date(a.time)\n );\n })\n .map((data, i) => {\n let style =\n data.direction ===\n \"+\"\n ? \"green-text\"\n : data.direction ===\n \"-\"\n ? \"red-text\"\n : \"\";\n return (\n \n \n \n \n \n \n \n );\n })}\n \n
    \n Time\n \n Description\n \n Amount\n \n Total Money\n \n Net Worth\n
    \n {new Date(\n data.time\n ).toLocaleTimeString()}\n \n {data.msg}\n \n {PlayerClass.formatMoney(\n data.amount\n )}\n \n {PlayerClass.formatMoney(\n data.total\n )}\n \n {PlayerClass.formatMoney(\n data.netWorth\n )}\n
    \n
    \n
    \n
  • \n\n
  • \n
    \n trending_up\n Money Graph\n
    \n
    \n {selectedPlayer === null && (\n

    \n {selectedPlayer === null\n ? \"No Player selected\"\n : selectedPlayer.properties\n .length === 0\n ? \"Player doesn't own any properties\"\n : \"\"}\n

    \n )}\n\n {/* {selectedPlayer &&\n selectedPlayer.name === \"Total History\" && (\n

    \n /\n

    \n )} */}\n\n {selectedPlayer !== null && (\n \n )}\n
    \n
  • \n \n
    \n \n \n );\n}\n","import { PlayerClass } from \"./../../Data/PlayerClass\";\n\nexport const options = (name, messages) => {\n return {\n layout: {\n padding: 20,\n },\n scales: {\n y: {\n ticks: {\n color: \"white\",\n callback: function (value, index, values) {\n return PlayerClass.formatMoney(value);\n },\n },\n suggestedMin: 0,\n },\n x: {\n ticks: {\n color: \"white\",\n },\n type: \"time\",\n time: { displayFormats: { minute: \"HH:mm\" } },\n },\n },\n plugins: {\n legend: {\n position: \"bottom\",\n labels: {\n color: \"white\",\n align: \"end\",\n font: {\n size: 14,\n },\n },\n },\n\n title: {\n display: true,\n text: `${name}'s Money Plot`,\n color: \"orange\",\n font: {\n size: 32,\n },\n },\n zoom: {\n zoom: {\n wheel: {\n enabled: true,\n },\n pinch: {\n enabled: true,\n },\n overScaleMode: \"y\",\n },\n pan: {\n enabled: true,\n mode: \"xy\",\n },\n limits: {\n y: { min: 0, max: 250 * 10 ** 6 },\n },\n },\n },\n };\n};\n","import React from \"react\";\n\nimport $ from \"jquery\";\nimport OverviewMenu from \"./overviewScreen/OverviewMenu\";\n\nexport default function OverviewScreen({ players }) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").removeClass(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").addClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").removeClass(\"selected\");\n\n $(\".carousel\").hide();\n return (\n <>\n \n \n );\n}\n","import React, { useRef } from \"react\";\nimport { PlayerClass } from \"../../Data/PlayerClass\";\n\nimport \"./SettingsMenu.css\";\n\nexport default function SettingsMenu({\n startMoney,\n setStartMoney,\n maxHouses,\n setMaxHouses,\n}) {\n const startMoneyRef = useRef(null);\n const totalHousesRef = useRef(null);\n\n const updateStartMoney = () => {\n const newVal = startMoneyRef.current.value;\n\n if (newVal === \"\") {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No new value provided\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const val = PlayerClass.parseMoney(newVal);\n\n if (isNaN(val)) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Invalid Money Format\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n setStartMoney(val);\n };\n\n const updateTotalHouses = () => {\n const val = totalHousesRef.current.value;\n\n if (val === \"\") {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"No new value provided\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n const numInt = Number.parseInt(val);\n\n if (!Number.isInteger(numInt)) {\n // eslint-disable-next-line no-undef\n M.toast({\n html: \"Invalid Money Format\",\n classes: \"rounded red black-text\",\n });\n return;\n }\n\n setMaxHouses(val);\n };\n\n return (\n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n\n \n \n \n\n \n \n\n \n\n \n \n \n \n
    \n Option\n \n Current\n \n New\n \n Update\n
    \n Start Money\n \n {PlayerClass.formatMoney(\n startMoney\n )}\n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n Update\n \n sync_alt\n \n \n
    \n
    \n
    \n Total Houses\n \n {maxHouses}\n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n Update\n \n sync_alt\n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n );\n}\n","import React from \"react\";\nimport Logo from \"../components/logo/Logo\";\n\nimport $ from \"jquery\";\nimport SettingsMenu from \"./settingsScreen/SettingsMenu\";\n\nexport default function SettingScreen({\n setGameState,\n startMoney,\n setStartMoney,\n maxHouses,\n setMaxHouses,\n}) {\n $(\"#navbar_lobby\").removeClass(\"selected\");\n $(\"#navbar_spectate\").removeClass(\"selected\");\n $(\"#navbar_pay\").removeClass(\"selected\");\n $(\"#navbar_buy\").removeClass(\"selected\");\n $(\"#navbar_rent\").removeClass(\"selected\");\n $(\"#navbar_bank\").removeClass(\"selected\");\n $(\"#navbar_stocks\").removeClass(\"selected\");\n $(\"#navbar_overview\").removeClass(\"selected\");\n $(\"#navbar_sell\").removeClass(\"selected\");\n $(\"#navbar_settings\").addClass(\"selected\");\n\n $(\".carousel\").show();\n return (\n <>\n \n \n \n );\n}\n","import { BuildingClass } from \"./BuildingClass\";\nimport { PlayerClass } from \"./PlayerClass\";\nimport { PropertyClass } from \"./PropertyClass\";\nimport { StockClass } from \"./StockClass\";\n\nconst CircularJSON = require(\"circular-json\");\n\nexport const loadPlayers = () => {\n let array = [];\n try {\n let loadedPlayers = CircularJSON.parse(localStorage.getItem(\"players\"));\n\n loadedPlayers.forEach((player) => {\n let res = Object.assign(new PlayerClass(), player);\n //res.balance = Number.parseFloat(res.balance);\n array.push(res);\n });\n } catch (e) {\n console.log(\"No Players Loaded from Local Storage\");\n }\n\n return array;\n};\n\nexport const loadAvailableProperties = () => {\n let array = [];\n try {\n let loadedProperties = CircularJSON.parse(\n localStorage.getItem(\"availableProperties\")\n );\n\n loadedProperties.forEach((prop) => {\n let res = Object.assign(new PropertyClass(), prop);\n res.loadImage(res.name);\n array.push(res);\n });\n } catch (e) {\n console.log(\"No Properties Loaded from Local Storage\");\n }\n return array;\n};\n\nexport const loadBuildings = () => {\n let array = [];\n try {\n let loadedProperties = CircularJSON.parse(\n localStorage.getItem(\"buildings\")\n );\n\n loadedProperties.forEach((prop) => {\n let res = Object.assign(new BuildingClass(), prop);\n array.push(res);\n });\n } catch (e) {\n console.log(\"No Buildings Loaded from Local Storage\");\n }\n return array;\n};\n\nexport const loadBank = () => {\n let bank = null;\n try {\n let loadedBank = CircularJSON.parse(localStorage.getItem(\"bank\"));\n\n if (loadedBank === null) {\n throw new Error(\"\");\n }\n\n let res = Object.assign(new PlayerClass(), loadedBank);\n\n //res.balance = Number.parseFloat(res.balance);\n bank = res;\n } catch (e) {\n console.log(\"No Bank Loaded from Local Storage\");\n }\n\n return bank;\n};\n\nexport const loadStocks = () => {\n let array = [];\n try {\n let loadedStocks = CircularJSON.parse(localStorage.getItem(\"stocks\"));\n\n if (loadedStocks === null) {\n throw new Error(\"\");\n }\n\n loadedStocks.forEach((stock) => {\n let res = Object.assign(new StockClass(), stock);\n array.push(res);\n });\n } catch (e) {\n console.log(\"No Stocks Loaded from Local Storage\");\n }\n return array;\n};","import React, { useState, useEffect } from \"react\";\n\nimport { PlayerClass } from \"./../Data/PlayerClass\";\n\nimport Navbar from \"../components/navbar/Navbar\";\nimport Footer from \"../components/footer/Footer\";\nimport BottomBar from \"../components/bottomBar/BottomBar\";\n\nimport LobbyScreen from \"./LobbyScreen\";\nimport MainScreen from \"./MainScreen\";\nimport PayScreen from \"./PayScreen\";\nimport BuyScreen from \"./BuyScreen\";\nimport BankScreen from \"./BankScreen\";\nimport StocksScreen from \"./StocksScreen\";\nimport RentScreen from \"./RentScreen\";\nimport SellScreen from \"./SellScreen\";\nimport SpectateScreen from \"./SpectateScreen\";\nimport OverviewScreen from \"./OverviewScreen\";\nimport SettingScreen from \"./SettingsScreen\";\n\nimport io from \"socket.io-client\";\n\nimport { createStocks, loadBuildingData, loadPropertyData } from \"../Data/loadGameData\";\n\nimport {\n loadAvailableProperties,\n loadBank,\n loadBuildings,\n loadPlayers,\n loadStocks,\n} from \"../Data/loadLocalStorage\";\n\nimport \"./App.css\";\n\nconst serverconfig = require(\"../serverconfig.json\");\nconst CircularJSON = require(\"circular-json\");\n\nexport default function App() {\n //Player List, Game State\n const [players, setPlayers] = useState(loadPlayers() || []);\n\n const [availableProperties, setAvailableProperties] = useState(loadAvailableProperties() || []);\n\n const [buildings, setBuildings] = useState(loadBuildings() || []);\n\n const [startMoney, setStartMoney] = useState(\n localStorage.getItem(\"startMoney\") || 55 * 10 ** 6\n );\n const [maxHouses, setMaxHouses] = useState(localStorage.getItem(\"maxHouses\") || 25);\n\n const [gameState, setGameState] = useState(localStorage.getItem(\"gameState\") || \"lobby\");\n const [bank, setBank] = useState(loadBank() || null);\n\n const [gameID, setGameID] = useState(localStorage.getItem(\"gameID\") || \"null\");\n\n const [spectateID, setSpectateID] = useState(localStorage.getItem(\"spectateID\") || \"/\");\n\n const [stocks, setStocks] = useState(loadStocks() || []);\n\n const [socket, setSocket] = useState(null);\n const [socketConnected, setSocketConnected] = useState(false);\n\n //Update Local Storage\n useEffect(() => {\n const playerJson = CircularJSON.stringify(players);\n const bankJson = CircularJSON.stringify(bank);\n const stockJSON = CircularJSON.stringify(stocks);\n const availablePropertiesJSON = CircularJSON.stringify(availableProperties);\n\n const buildingsJson = CircularJSON.stringify(buildings);\n\n localStorage.setItem(\"players\", playerJson);\n localStorage.setItem(\"availableProperties\", availablePropertiesJSON);\n localStorage.setItem(\"buildings\", buildingsJson);\n localStorage.setItem(\"startMoney\", startMoney);\n localStorage.setItem(\"maxHouses\", maxHouses);\n localStorage.setItem(\"gameState\", gameState);\n localStorage.setItem(\"bank\", bankJson);\n localStorage.setItem(\"gameID\", gameID);\n localStorage.setItem(\"spectateID\", spectateID);\n localStorage.setItem(\"spectateID\", spectateID);\n localStorage.setItem(\"stocks\", stockJSON);\n }, [\n players,\n availableProperties,\n buildings,\n startMoney,\n maxHouses,\n gameState,\n bank,\n gameID,\n socket,\n socketConnected,\n spectateID,\n stocks,\n ]);\n\n //Send updates to spectators\n useEffect(() => {\n if (socket && socketConnected) {\n socket.emit(\"Data\", {\n groupID: gameID,\n players: CircularJSON.stringify(players),\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [gameID, players, socketConnected]);\n\n useEffect(() => {\n if (bank === null) {\n setBank(() => {\n return new PlayerClass(\"Bank\", 10 ** 10);\n });\n }\n\n if (availableProperties.length === 0) {\n loadPropertyData().then((data) => {\n setAvailableProperties(data);\n });\n }\n\n if (stocks.length === 0) {\n let stocks = createStocks();\n setStocks(stocks);\n }\n\n if (buildings.length === 0) {\n setBuildings(loadBuildingData());\n }\n if (gameID === \"null\") {\n const zeroPad = (num, places) => String(num).padStart(places, \"0\");\n setGameID(zeroPad(Math.round(Math.random() * 10 ** 6), 6));\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const newSocket = io(serverconfig.BACKEND_URL, {\n path: \"/monopoly/socket.io\",\n });\n setSocket(newSocket);\n\n try {\n (async function () {\n const checkIfOnline = () =>\n new Promise((resolve) => {\n newSocket.on(\"connect\", (data) => {\n newSocket.emit(\"checkIfOnline\");\n newSocket.on(\"isOnlineResponse\", (response) => {\n resolve(response);\n });\n });\n setTimeout(() => {\n resolve(false);\n }, 5000);\n });\n\n setSocketConnected(await checkIfOnline());\n })();\n } catch (e) {\n setSocketConnected(false);\n }\n\n return () => newSocket.close();\n }, [setSocket]);\n\n // Determine which main Content to load\n function Content() {\n switch (gameState) {\n case \"lobby\":\n return (\n \n );\n case \"main\":\n return ;\n case \"overview\":\n return ;\n case \"spectate\":\n return (\n \n );\n case \"settings\":\n return (\n \n );\n case \"pay\":\n return (\n \n );\n case \"buy\":\n return (\n \n );\n case \"rent\":\n return (\n \n );\n\n case \"sell\":\n return (\n \n );\n case \"bank\":\n return (\n \n );\n case \"stocks\":\n return (\n \n );\n default:\n return null;\n }\n }\n\n return (\n
    \n
    \n \n\n \n \n
    \n
    \n
    \n );\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport App from \"./containers/App\";\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n);\n"],"sourceRoot":""}