moved moving from client to server

This commit is contained in:
Wenszel 2021-04-30 13:17:49 +02:00
parent c8773ed546
commit b56c343d83
5 changed files with 67 additions and 6 deletions

View File

@ -13,9 +13,10 @@ router.post('/move', function (req, res){
if(doc){ if(doc){
// Updating position // Updating position
const updatedPawn = doc.pawns.findIndex(pawn => pawn._id == req.body.pawnId); const updatedPawn = doc.pawns.findIndex(pawn => pawn._id == req.body.pawnId);
doc.pawns[updatedPawn].position = req.body.position; doc.pawns[updatedPawn].position = getPosition(req.session.rolledNumber, doc.pawns[updatedPawn]);
console.log(getPosition(req.session.rolledNumber, doc.pawns[updatedPawn]));
// Capturing a pawn // Capturing a pawn
const pawnsOnPos = doc.pawns.filter( pawn => pawn.position == req.body.position); const pawnsOnPos = doc.pawns.filter( pawn => pawn.position == doc.pawns[updatedPawn].position);
pawnsOnPos.forEach( pawn => { pawnsOnPos.forEach( pawn => {
if(pawn.color !== req.session.color){ if(pawn.color !== req.session.color){
const index = doc.pawns.findIndex(i => i._id === pawn._id); const index = doc.pawns.findIndex(i => i._id === pawn._id);
@ -33,6 +34,7 @@ router.post('/move', function (req, res){
} }
// Updating timer // Updating timer
doc.nextMoveTime = Date.now()+15000; doc.nextMoveTime = Date.now()+15000;
// Pushing above data to database
RoomModel.findOneAndUpdate({_id: req.session.roomId}, doc, function(err, doc){ RoomModel.findOneAndUpdate({_id: req.session.roomId}, doc, function(err, doc){
res.send("Correctly Moved!"); res.send("Correctly Moved!");
}); });
@ -40,5 +42,64 @@ router.post('/move', function (req, res){
}); });
}); });
function getPosition(rolledNumber, pawn){
const { position, color } = pawn;
switch (color){
case 'red':
if(pawn.position + rolledNumber <= 73){
if(position >= 0 && position <= 3) {
return 16;
}else if(position <= 66 && position + rolledNumber >= 67){
return position + rolledNumber + 1;
}else{
return position + rolledNumber;
}
}else{
return position;
}
case 'blue':
if(pawn.position + rolledNumber <= 79){
if(position >= 4 && position <= 7){
return 55;
}else if(position <= 67 && position + rolledNumber > 67){
return position + rolledNumber - 52;
}else if(position <= 53 && position + rolledNumber >= 54){
return position + rolledNumber + 20;
}else{
return position + rolledNumber;
}
}else{
return position;
}
case 'green':
if(pawn.position + rolledNumber <= 85){
if(position >= 8 && position <= 11){
return 42;
}else if(position <= 67 && position + rolledNumber > 67){
return position + rolledNumber - 52;
}else if(position <= 40 && position + rolledNumber >= 41){
return position + rolledNumber + 39;
}else{
return position + rolledNumber;
}
}else{
return position;
}
case 'yellow':
if(pawn.position + rolledNumber <= 85){
if(position >= 12 && position <= 15){
return 29;
}else if(position <= 67 && position + rolledNumber > 67){
return position + rolledNumber - 52;
}else if(position <= 27 && position + rolledNumber >= 28){
return position + rolledNumber + 58;
}else{
return position + rolledNumber;
}
}else{
return position;
}
}
};
module.exports = router; module.exports = router;

View File

@ -18,7 +18,7 @@ var changeReadyState = (req, res, exit) =>{
} }
if(updatedPlayers.filter(player => player.ready).length >= 2){ if(updatedPlayers.filter(player => player.ready).length >= 2){
updatedDoc.started = true; updatedDoc.started = true;
updatedDoc.players = updatedDoc.players.map(player => player.ready === true); updatedDoc.players.forEach(player => player.ready = true);
updatedDoc.nextMoveTime = Date.now() + 15000; updatedDoc.nextMoveTime = Date.now() + 15000;
updatedDoc.players[0].nowMoving = true; updatedDoc.players[0].nowMoving = true;
} }

View File

@ -59,7 +59,7 @@ router.post('/add', function (req, res) {
updateObj.full = true; // Room is full updateObj.full = true; // Room is full
updateObj.started = true; // Game started updateObj.started = true; // Game started
updateObj.nextMoveTime = Date.now() + 15000; updateObj.nextMoveTime = Date.now() + 15000;
updateObj.players = updateObj.players.map(player => player.ready === true); updateObj.players.forEach(player => player.ready = true);
updateObj.players[0].nowMoving = true; //First joined player moving updateObj.players[0].nowMoving = true; //First joined player moving
updateObj.pawns = getStartPositions(); updateObj.pawns = getStartPositions();
} }

View File

@ -11,7 +11,7 @@ const Dice = ({ rolledNumberCallback, nowMoving }) => {
const [rolledNumber, setRolledNumber] = useState(); const [rolledNumber, setRolledNumber] = useState();
const [images] = useState([one, two, three, four, five, six]); const [images] = useState([one, two, three, four, five, six]);
const handleRoll = () => { const handleRoll = () => {
axios.get('http://localhost:3000/game/roll').then(response => { axios.get('http://localhost:3000/game/roll', {withCredentials: true}).then(response => {
const utterance = new SpeechSynthesisUtterance(response.data.number); const utterance = new SpeechSynthesisUtterance(response.data.number);
speechSynthesis.speak(utterance); speechSynthesis.speak(utterance);
setRolledNumber(response.data.number); setRolledNumber(response.data.number);

View File

@ -55,7 +55,7 @@ const Map = ({ pawns, nowMoving, rolledNumber }) => {
y = event.clientY - rect.top; y = event.clientY - rect.top;
for(const pawn of pawns){ for(const pawn of pawns){
if (ctx.isPointInPath(pawn.circle, x, y)) { if (ctx.isPointInPath(pawn.circle, x, y)) {
axios.post('http://localhost:3000/game/move', {pawnId: pawn._id, position: hintPawn.position}, {withCredentials: true}) axios.post('http://localhost:3000/game/move', {pawnId: pawn._id}, {withCredentials: true, mode: 'cors'})
.then(() => { .then(() => {
setHintPawn(null); setHintPawn(null);
}); });