added painting pawns based on data from server
This commit is contained in:
parent
148fa85601
commit
c1db9e4bb8
@ -1,6 +1,24 @@
|
|||||||
var express = require('express');
|
var express = require('express');
|
||||||
var router = express.Router();
|
var router = express.Router();
|
||||||
|
|
||||||
|
function setNextPlayer(req, res){
|
||||||
|
RoomModel.findOne({_id: req.session.roomId}, function (err, doc){
|
||||||
|
if (err) {
|
||||||
|
res.status(500).send(err)
|
||||||
|
} else {
|
||||||
|
const index = doc.players.findIndex( player => player.nowMoving === true);
|
||||||
|
const roomSize = doc.player.length;
|
||||||
|
doc.players[index].nowMoving = false;
|
||||||
|
if(index++ === roomSize){
|
||||||
|
doc.players[0].nowMoving = true;
|
||||||
|
}else{
|
||||||
|
doc.players[index].nowMoving = true;
|
||||||
|
}
|
||||||
|
RoomModel.findOneAndUpdate({_id: req.session.roomId}, doc);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
router.get('/roll', function (req, res){
|
router.get('/roll', function (req, res){
|
||||||
res.send({number: Math.ceil(Math.random() * 6)});
|
res.send({number: Math.ceil(Math.random() * 6)});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
var express = require('express');
|
var express = require('express');
|
||||||
var router = express.Router();
|
var router = express.Router();
|
||||||
var RoomModel = require('../schemas/room');
|
var RoomModel = require('../schemas/room');
|
||||||
|
|
||||||
var changeReadyState = (req, res, exit) =>{
|
var changeReadyState = (req, res, exit) =>{
|
||||||
RoomModel.findOne({_id: req.session.roomId}, function (err, doc){
|
RoomModel.findOne({_id: req.session.roomId}, function (err, doc){
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -12,13 +11,11 @@ var changeReadyState = (req, res, exit) =>{
|
|||||||
let index = updatedPlayers.findIndex(
|
let index = updatedPlayers.findIndex(
|
||||||
player => (player._id).toString() == (req.session.playerId).toString()
|
player => (player._id).toString() == (req.session.playerId).toString()
|
||||||
);
|
);
|
||||||
console.log(doc, updatedPlayers, index);
|
|
||||||
if(!exit) updatedPlayers[index].ready = !updatedPlayers[index].ready;
|
if(!exit) updatedPlayers[index].ready = !updatedPlayers[index].ready;
|
||||||
else updatedPlayers[index].ready = false;
|
else updatedPlayers[index].ready = false;
|
||||||
const updatedDoc = {
|
const updatedDoc = {
|
||||||
players: updatedPlayers
|
players: updatedPlayers
|
||||||
}
|
}
|
||||||
console.log(updatedPlayers.filter(player => player.ready).length);
|
|
||||||
if(updatedPlayers.filter(player => player.ready).length >= 2){
|
if(updatedPlayers.filter(player => player.ready).length >= 2){
|
||||||
updatedDoc.started = true;
|
updatedDoc.started = true;
|
||||||
updatedDoc.players[0].nowMoving = true;
|
updatedDoc.players[0].nowMoving = true;
|
||||||
|
|||||||
@ -1,16 +1,27 @@
|
|||||||
var express = require('express');
|
const express = require('express');
|
||||||
var router = express.Router();
|
const router = express.Router();
|
||||||
|
const RoomModel = require('../schemas/room');
|
||||||
|
|
||||||
var RoomModel = require('../schemas/room');
|
const colors = ['red','blue','green','yellow'];
|
||||||
|
|
||||||
var colors = ['red','blue','green','yellow'];
|
function getStartPositions(){
|
||||||
|
const startPositions = [];
|
||||||
|
for( let i = 0; i < 16; i++){
|
||||||
|
let pawn = {};
|
||||||
|
pawn.position = i;
|
||||||
|
if(i < 4) pawn.color = colors[0];
|
||||||
|
else if(i < 8) pawn.color = colors[1];
|
||||||
|
else if(i < 12) pawn.color = colors[2];
|
||||||
|
else if (i < 16) pawn.color = colors[3]
|
||||||
|
startPositions.push(pawn);
|
||||||
|
}
|
||||||
|
return startPositions;
|
||||||
|
}
|
||||||
|
|
||||||
//creating new room in db
|
//creating new room in db
|
||||||
router.post('/add', function (req, res) {
|
router.post('/add', function (req, res) {
|
||||||
RoomModel.findOne( { full: false, started: false }, function (err, results) {
|
RoomModel.findOne( { full: false, started: false }, function (err, results) {
|
||||||
if (err) {
|
if (err) console.log(err);
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
if (!results) {
|
if (!results) {
|
||||||
let newRoom = new RoomModel({
|
let newRoom = new RoomModel({
|
||||||
createDate: new Date,
|
createDate: new Date,
|
||||||
@ -22,6 +33,7 @@ router.post('/add', function (req, res) {
|
|||||||
ready: false,
|
ready: false,
|
||||||
color: colors[0]
|
color: colors[0]
|
||||||
}],
|
}],
|
||||||
|
pawns: getStartPositions(),
|
||||||
});
|
});
|
||||||
newRoom.save()
|
newRoom.save()
|
||||||
.then(function(){
|
.then(function(){
|
||||||
@ -46,6 +58,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.players[0].nowMoving = true; //First joined player moving
|
updateObj.players[0].nowMoving = true; //First joined player moving
|
||||||
|
updateObj.pawns = startPositions
|
||||||
}
|
}
|
||||||
RoomModel.findOneAndUpdate(
|
RoomModel.findOneAndUpdate(
|
||||||
{ _id: results._id }, //find room by id
|
{ _id: results._id }, //find room by id
|
||||||
|
|||||||
@ -6,6 +6,7 @@ var RoomSchema = new Schema({
|
|||||||
createDate: Date,
|
createDate: Date,
|
||||||
started: Boolean,
|
started: Boolean,
|
||||||
full: Boolean,
|
full: Boolean,
|
||||||
|
timer: Number,
|
||||||
players: [{
|
players: [{
|
||||||
name: String,
|
name: String,
|
||||||
color: String,
|
color: String,
|
||||||
|
|||||||
@ -5,9 +5,10 @@ import Dice from './game-board-components/Dice'
|
|||||||
import Navbar from './Navbar'
|
import Navbar from './Navbar'
|
||||||
|
|
||||||
const Gameboard = ({id}) => {
|
const Gameboard = ({id}) => {
|
||||||
|
const [pawns, setPawns] = useState([]);
|
||||||
const [players, setPlayers] = useState([]);
|
const [players, setPlayers] = useState([]);
|
||||||
const [nowMoving, setNowMoving] = useState(false);
|
const [nowMoving, setNowMoving] = useState(false);
|
||||||
|
const [started, setStarted] = useState(false);
|
||||||
//fetching players data to display them in navbar
|
//fetching players data to display them in navbar
|
||||||
const fetchData = () => {
|
const fetchData = () => {
|
||||||
axios.get('http://localhost:3000/room/',{
|
axios.get('http://localhost:3000/room/',{
|
||||||
@ -19,12 +20,14 @@ const Gameboard = ({id}) => {
|
|||||||
name: "...",
|
name: "...",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
setPlayers(response.data.players);
|
|
||||||
if(id===response.data.players.find(player => player.nowMoving === true)?._id){
|
if(id===response.data.players.find(player => player.nowMoving === true)?._id){
|
||||||
setNowMoving(true);
|
setNowMoving(true);
|
||||||
}else{
|
}else{
|
||||||
setNowMoving(false);
|
setNowMoving(false);
|
||||||
}
|
}
|
||||||
|
setPlayers(response.data.players);
|
||||||
|
setPawns(response.data.pawns);
|
||||||
|
setStarted(response.data.started);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
@ -33,9 +36,9 @@ const Gameboard = ({id}) => {
|
|||||||
},[]);
|
},[]);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Navbar players={players}/>
|
<Navbar players={players} started={started}/>
|
||||||
{nowMoving ? <Dice nowMoving={nowMoving}/> : null}
|
{nowMoving ? <Dice nowMoving={nowMoving}/> : null}
|
||||||
<Map/>
|
<Map pawns={pawns}/>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -2,13 +2,13 @@ import React from 'react';
|
|||||||
import NameContainer from './navbar-components/NameContainer'
|
import NameContainer from './navbar-components/NameContainer'
|
||||||
import ReadyButton from './navbar-components/ReadyButton'
|
import ReadyButton from './navbar-components/ReadyButton'
|
||||||
import './Navbar.css';
|
import './Navbar.css';
|
||||||
const Navbar = ( { players }) => {
|
const Navbar = ( { players, started }) => {
|
||||||
return(
|
return(
|
||||||
<div className="navbar-container">
|
<div className="navbar-container">
|
||||||
{players.map( (player, index) =>
|
{players.map( (player, index) =>
|
||||||
<NameContainer key={index} player = {player}/>
|
<NameContainer key={index} player = {player}/>
|
||||||
)}
|
)}
|
||||||
<ReadyButton/>
|
{started ? null : <ReadyButton/>}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,44 +1,33 @@
|
|||||||
import React, { useEffect, useState, useRef } from 'react';
|
import React, { useEffect, useState, useRef } from 'react';
|
||||||
|
import positions from './positions';
|
||||||
import './Map.css';
|
import './Map.css';
|
||||||
import axios from 'axios'
|
|
||||||
const Map = () => {
|
|
||||||
//map of positions <1,92> and their equivalent of pixels in canvas
|
|
||||||
const mapOfLocations = {
|
|
||||||
};
|
|
||||||
//obj schema: {color: [pos,pos,pos]}
|
|
||||||
const [pawnPositions, setPawnPositions] = useState({
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
const Map = ({ pawns }) => {
|
||||||
const paintPawn = (context, x, y, color) =>{
|
const paintPawn = (context, x, y, color) =>{
|
||||||
|
console.log(x,y,color);
|
||||||
context.fillStyle = color
|
context.fillStyle = color
|
||||||
context.beginPath();
|
context.beginPath();
|
||||||
context.arc(x, y, 12, 0, 2 * Math.PI);
|
context.arc(x, y, 12, 0, 2 * Math.PI);
|
||||||
context.stroke();
|
context.stroke();
|
||||||
context.fill();
|
context.fill();
|
||||||
}
|
}
|
||||||
const fetchData = () => {
|
|
||||||
axios.get('http://localhost:3000/game',{withCredentials: true})
|
|
||||||
.then(response => setPawnPositions(response.data.positions))
|
|
||||||
}
|
|
||||||
const canvasRef = useRef(null)
|
const canvasRef = useRef(null)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
//fetchData();
|
|
||||||
const canvas = canvasRef.current
|
const canvas = canvasRef.current
|
||||||
const context = canvas.getContext('2d')
|
const context = canvas.getContext('2d')
|
||||||
var image = new Image();
|
var image = new Image();
|
||||||
image.src = 'https://img-9gag-fun.9cache.com/photo/a8GdpYZ_460s.jpg'
|
image.src = 'https://img-9gag-fun.9cache.com/photo/a8GdpYZ_460s.jpg'
|
||||||
image.onload = function() {
|
image.onload = function() {
|
||||||
context.drawImage(image, 0 , 0);
|
context.drawImage(image, 0 , 0);
|
||||||
/* pawnPositions.forEach( pawn => {
|
pawns.forEach( pawn => {
|
||||||
paintPawn(context, pawn.x,pawn.y,'#ffa1a1')
|
console.log("rysuje")
|
||||||
|
console.log(positions[pawn.position]);
|
||||||
|
paintPawn(context, positions[pawn.position].x, positions[pawn.position].y, pawn.color);
|
||||||
})
|
})
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
}, [pawns]);
|
||||||
}, []);
|
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<canvas className="canvas-container" width={480} height={480} ref={canvasRef}></canvas>
|
<canvas className="canvas-container" width={480} height={480} ref={canvasRef}></canvas>
|
||||||
)
|
)
|
||||||
|
|||||||
24
src/components/game-board-components/positions.js
Normal file
24
src/components/game-board-components/positions.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
const positions = [
|
||||||
|
// Red base
|
||||||
|
{x: 67, y: 67},
|
||||||
|
{x: 67, y: 116},
|
||||||
|
{x: 117, y: 67},
|
||||||
|
{x: 117, y: 116},
|
||||||
|
// Blue base
|
||||||
|
{x: 67, y: 343},
|
||||||
|
{x: 67, y: 392},
|
||||||
|
{x: 117, y: 343},
|
||||||
|
{x: 117, y: 392},
|
||||||
|
// Green base
|
||||||
|
{x: 343, y: 343},
|
||||||
|
{x: 392, y: 392},
|
||||||
|
{x: 392, y: 343},
|
||||||
|
{x: 343, y: 392},
|
||||||
|
// Yellow base
|
||||||
|
{x: 343, y: 67},
|
||||||
|
{x: 392, y: 116},
|
||||||
|
{x: 392, y: 67},
|
||||||
|
{x: 343, y: 116},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default positions;
|
||||||
Loading…
Reference in New Issue
Block a user