var mongo = require("./mongoHelp.js") const charityGen = require("./charitygen.js") const uuidv4 = require('uuid/v4') function shuffle(arr) { var i, j, temp for (i = arr.length - 1; i > 0; i--) { j = Math.floor(Math.random() * (i + 1)) temp = arr[i] arr[i] = arr[j] arr[j] = temp } return arr } const game = { init: async (gameID) => { gameObj = await mongo.get("embezzle", "gamelist", { "gameID": gameID }) gameObj = gameObj[0] //gen charities gameObj.charities = [] gameObj.distributionLog = [] gameObj.accuseLog = {} console.log(gameObj) for (let index = 0; index < gameObj.players.length; index++) { gameObj.charities.push({ charityID: uuidv4(), name: charityGen(), capital: 0 }) } //assign charities to users gameObj.secretLink = [] gameObj.players.forEach((element, index) => { charity = gameObj.charities[index] console.log(element) let link = { charity: charity.charityID, owner: element.name } gameObj.secretLink.push(link) }) // Randomise the order of the arrays shuffle(gameObj.charities) //set board funds gameObj.players.forEach(element => { element.funds = 10000000 element.status = "Employed" }) //update game mongo.update("embezzle", "gamelist", { "gameID": gameID }, gameObj) }, myCharity: async (gameID, ownerID) => { name = await mongo.get("embezzle", "players", { "_id": ownerID }) name = name[0].name secret = await mongo.get("embezzle", "gamelist", { "gameID": gameID }) secret = secret[0].secretLink let mine = "" secret.forEach(element => { console.log(element.owner,name) if (element.name == name) { mine = element.name } }) chairtyObj = { charity: mine } return chairtyObj }, charityList: async (gameID) => { charArr = await mongo.get("embezzle", "gamelist", { "gameID": gameID }) charArr = charArr[0].charities return ({ charatiesArr: charArr }) }, playerList: async (gameID) => { gameObj = await mongo.get("embezzle", "gamelist", { "gameID": gameID }) players = gameObj[0].players return ({ charatiesArr: players }) }, boardFunding: async (gameID, ownerID) => { name = await mongo.get("embezzle", "players", { "_id": ownerID }) name = name[0].name players = await mongo.get("embezzle", "gamelist", { "gameID": gameID }) players = players[0].players result = "" players.forEach(element => { if (element.name == name) { result = name } }) }, distribution: async (gameID, ownerID, charityID, amount) => { //get the player info gameObj = await mongo.get("embezzle", "gamelist", { "gameID": gameID }) gameObj = gameObj[0] if (gameObj.status != "distribution") { return({error:"You have tried to distribute funds when it is not the distribution round"}) } player = await mongo.get("embezzle", "players", { "_id": ownerID }) player = player[0] //Wipe out the accuse log read for the next round gameObj.accuseLog={} // Check if we have two players left and if so, decide on a winner employedCount = 0 gameObj.players.forEach(element => { if (element.status == "Employed") { employedCount++ } }) if (employedCount < 3) { return game.winner(gameID) } // Now we know the game is still on-going: //add users funds to the charity & subtract donation from users funds //check if user is trying to allocate too much money & set the amount so the users funds are wiped out if (amount > player.funds) { amount=player.funds } gameObj.charities.forEach( element => { if (element.charityID == charityID) { element.capital = element.capital+amount player.funds = player.funds - amount gameObj.distributionLog.push({ donator:player.name, amount: amount, charity: element.name }) } }) reaminingFunding = 0 gameObj.players.forEach(element => { reaminingFunding= reaminingFunding+element.funds if (reaminingFunding == 0) { roundStatus(gameID) } }) mongo.update("embezzle", "gamelist", { "gameID": gameID }, gameObj) return ({log: gameObj.distributionLog}) }, accuse: async (gameID, ownerID, player) => { //??? }, winner: async (gameID) => { winner = await mongo.get("embezzle", "gamelist", { "gameID": gameID }) winer = winner[0].winner }, roundStatus: async (gameID) => { gameObj = await mongo.get("embezzle", "gamelist", { "gameID": gameID }) gameObj = gameObj[0] if (typeof gameObj == undefined || gameObj == "accuse") { gameObj.status = "distribution" } else { gameObj.status = "accuse" } mongo.update("embezzle", "gamelist", { "gameID": gameID }, gameObj) }, } module.exports = game