You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cardGame/gameMod.js

114 lines
3.7 KiB
JavaScript

// For anything related to the actual game itself (kinda)
// this will be split into different bits, but should be what manages a rooms
// game states, and alladat
// Basically here to prevent circular dependencies (where I can)
// PlayerId is using array 0,1,2 for now, not the actual id
// actual Id would be better, but the player should be passed correctly
// from the client. They can edit data, but server-side validation SHOULD prevent
// in the future
function passTurn(roomId, playerId){
// TODO:Check playerId and roomId before doing the stuff, to verify the user
// IS the user, and in the room
let playerTurn = global.roomData[roomId].itemData.component.playerTurn;
//global.socketAlert(roomData[roomId].playerData[playerId].socketId, playerTurn, 'log');
if(playerTurn != playerId){
global.socketAlert(roomData[roomId].playerData[playerId].socketId, 'Not your turn', 'alert');
return false;
};
// Turns are 0,1,0,1 at the mo, no coinflip or re-order, etc. so this JANK is ok for now
// %2 as 2 players and Ids are 0 and 1 so it works
let newPlayerTurn = (playerTurn + 1)%maxPlayersPerRoom;
global.roomData[roomId].itemData.component.playerTurn = newPlayerTurn;
// If it's back to the player that went first, the turn count increased too
if(playerTurn == 0){
global.roomData[roomId].itemData.component.turn++;
}
// Send turn data to each player
// Probably via the sockets in room (as could be spectators in future)
let clients = global.io.sockets.adapter.rooms.get(roomId);
for (const clientId of clients) {
const clientSocket = global.io.sockets.sockets.get(clientId);
console.log('>> '+clientSocket.playerId+' passed turn');
// Send the data back
let turnData = {
'playerTurn': newPlayerTurn,
'turn': global.roomData[roomId].itemData.component.turn,
};
global.io.to(clientSocket.id).emit('responsePassTurn', turnData);
}
// Let the player know it's their turn via alert too (in case tabbed out)
global.socketAlert(roomData[roomId].playerData[newPlayerTurn].socketId, 'Your turn', 'alert');
// Start of the new players turn, draw a card
drawACard(roomId, newPlayerTurn);
}
function drawACard(roomId, playerId){
if(global.roomData[roomId].itemData.component.cardCount.hand[playerId] >= 2){
global.socketAlert(roomData[roomId].playerData[playerId].socketId, 'Hand full; cannot draw card', 'alert');
return false;
}
// Change position to last position available in hand
let fromPosition = global.roomData[roomId].itemData.component.cardCount.deck[playerId]; // 'Bottom' of deck
let toPosition = global.roomData[roomId].itemData.component.cardCount.hand[playerId]; // Rightmost hand pos
// from inDeck to hand
// change the listPositions of both (only return listPosition of hand ids?)
// Reduce deckSize by 1 for the player that drew
global.roomData[roomId].itemData.component.cardCount.deck[playerId]--;
// And increase the hand size by 1
global.roomData[roomId].itemData.component.cardCount.hand[playerId]++;
// TODO: Move card from deck to hand for the player. Dupe what I've got in board for
// this, but tidy it up
//global.roomData[roomId].itemData.component.inDeck = newPlayerTurn;
//global.roomData[roomId].itemData.component.hand = newPlayerTurn;
// Then emit the deckSize and hand size to all the player's sockets
let clients = global.io.sockets.adapter.rooms.get(roomId);
for (const clientId of clients) {
const clientSocket = global.io.sockets.sockets.get(clientId);
console.log('>> '+clientSocket.playerId+' drew card');
// Send the data back
global.io.to(clientSocket.id).emit(
'responseDrawCard'
,global.roomData[roomId].itemData.component.cardCount
);
}
// Emit the 'hand' and related cardData for cards in the players hand
}
module.exports = {
passTurn
};