|
|
- /**
- * Object used for storing rooms
- * @param capacityP -- the number of people that can be in room
- * @param pass -- the room password -- null if none
- * @param owner -- the person who is creating the room
- */
-
- //used for the getting the word array
- const utils = require("./utils.js");
-
-
-
- class Room
- {
- //max capacity of room -- default is 4 for now
- var capacity;
-
- //name of the room
- var roomName;
-
- //list of words used in the game
- //7 for now will change later to be room specific
- var words = utils.getRandomWords(7);
-
- var currentWord = words.pop();
-
- //list players -- so we can push requests to them
- var users = [];
-
- //increments when rounds pass
- var currentRound = 0;
-
- // the password of the room -- null if no password
- var password;
-
- /**
- 1 = Waiting for users
- 2 = Word shown, Waiting for response from users
- 3 = Showing Result
- 4 = Game Over, Display Final Results
- */
- var state = 1;
- }
-
- module.exports =
- {
- /**
- * Constructor for the module to initialise variables
- * @param capacityP
- * @param pass
- * @param owner
- */
- createRoom: function(capacityP, pass, owner)
- {
- this.addUser(owner);
- password = pass;
- capacity = capacityP;
- roomName = owner.name;
- },
-
- /**
- * creates json to send in the 'roomUpdate' socket event
- *
- * {users: gameState: roundWinner: currentWord: }
- */
- generateRoomUpdate: function()
- {
- var result = new Object();
-
- result.users = [];
-
- users.forEach(function(u)
- {
- result.users.push(u.genJASON());
- });
-
- //sort the users based on score
- var countOuter = 0;
- var countInner = 0;
- var countSwap = 0;
-
- // var swapped;
- // do
- // {
- // countOuter++;
- // swapped = false;
- // for(var i = 0; i < result.users.length; i++)
- // {
- // countInner++;
- // if(result.users[i].score && result.users[i + 1].score &&
- // result.users[i].score > result.users[i + 1].score)
- // {
- // countSwap++;
- // var temp = result.users[i];
- // result.users[i] = result.users[j];
- // result.users[j] = temp;
- // swapped = true;
- // }
- // }
- // } while(swapped);
-
-
- result.gameState = state;
-
-
- //sets round winner
- var rWinner = -1;
-
- for(var i = 0; i < users.length; i++)
- {
- if(rWinner < users[i].roundScore)
- {
- result.roundWinner = users[i].name;
- rWinner = users[i].roundScore;
- }
- }
-
- result.currentWord = currentWord;
-
- return result;
- },
-
- /**
- * grabs roomUpdate json and beams it to every user in the channel
- */
- sendRoomUpdate: function()
- {
- var message = this.generateRoomUpdate();
- this.users.forEach(function(u)
- {
- //console.log("room update called");
- u.socket.emit('roomUpdate', message);
- //console.log(message);
- });
- },
- /**
- * adds a user to a room
- * @param p
- * return 0 if they could join
- */
- addUser: function(player)
- {
- //console.log("user added");
- //check if room is not full
- this.users.push(player);
- player.room = this;
-
- if(this.users.length == this.capacity)
- {
- this.state = 2;
- }
-
- console.log("user added to room " + player.name);
- //console.log(this.users);
-
- this.update();
- },
-
- /**
- * Removes a specific user from the room and adjusts the size of the array
- * if the array is empty, the room closes
- * @param p
- */
- removeUser: function(p)
- {
- console.log("remove users fnc called");
- var temp = new Array();
-
- for(var i = 0; i < temp.length; i++)
- {
- if(p.name === users[i].name)
- {
-
- }
- else
- {
- temp.push(users[i]);
- }
- }
-
- users = temp;
-
- //if room is empty remove the room from rooms list
- if(users.length == 0)
- {
- console.log("room scrubbed");
- delete rooms[roomName];
- }
-
- this.update();
- },
-
- /**
- * Whether or not a user can join this room -- checks for number of people are
- * already in the room and the password
- * @param p
- * @returns {boolean}
- */
- canJoin: function(p)
- {
- if(password == null)
- {
- return (users.length < capacity);
- }
- else
- {
- return (users.length < capacity) && (p === password);
- }
- },
- /**
- * starts new round for the room -- called once all the players have submitted
- */
- newRound: function()
- {
- console.log("new round started");
- if(words.length == 0)
- {
- state == 4;
- }
- else
- {
- currentRound++;
- users.forEach(function(u)
- {
- u.submission = '';
- });
- currentWord = words.pop();
- state = 2;
- }
- this.sendRoomUpdate();
- },
- //updates room variables
- update: function()
- {
- switch(state)
- {
- case 1: //waiting for users to join
- {
- if(users.length == capacity)
- {
- this.newRound();
- }
- break;
- }
- case 2: // waiting for responses
- {
- var flag = true;
- var test = "";
- users.forEach(function(u)
- {
- test+=u.submission;
- if(u.submission === '')
- {
- flag = false;
- }
- });
- console.log("big stuff " + test);
- if(flag)
- {
- state = 3;
- this.newRound();
- // setTimeout(function() {
- //
- // }, 4000);
- }
- break;
- }
- case 3: // showing results -- time out fnc
- {
- console.log("error &&&&&&&&&&&&&&&&&&");
- break;
- }
- case 4: //game over display final result
- {
- //sqlStuff.dumpRoom(this);
- break;
- }
- default:
- {
- console.log("You don goof up")
- }
- }
- console.log(state + " state");
- this.sendRoomUpdate();
- }
- };
|