Commit acb37829 authored by 18손재민's avatar 18손재민

Merge remote-tracking branch 'origin/server'

parents 745814fd 67495311
...@@ -2,7 +2,7 @@ var GameServer = GameServer || {}; ...@@ -2,7 +2,7 @@ var GameServer = GameServer || {};
GameServer.serverNumber = -1; GameServer.serverNumber = -1;
GameServer.Phase = {READY: 0, COUNT: -1, START: 1, MAIN: 2, MUSIC: 3}; GameServer.Phase = {READY: 0, COUNT: -1, START: 1, MAIN: 2, MUSIC: 3, GAMEEND: 4};
GameServer.connectCount = 0; GameServer.connectCount = 0;
GameServer.disconnectCount = 0; GameServer.disconnectCount = 0;
...@@ -82,7 +82,7 @@ class GameRoom ...@@ -82,7 +82,7 @@ class GameRoom
{ {
this.roomId = GameServer.getRoomNumber(); this.roomId = GameServer.getRoomNumber();
this.roomIndex = -1; this.roomIndex = -1;
this.startCount = 3; this.startCount = 2;
this.maxPlayer = 100; this.maxPlayer = 100;
this.nextRank = 100; this.nextRank = 100;
...@@ -215,13 +215,31 @@ class GameRoom ...@@ -215,13 +215,31 @@ class GameRoom
clearTimeout(this.startTimer); clearTimeout(this.startTimer);
this.startTimer = undefined; this.startTimer = undefined;
} }
this.announceToRoom('enterRoom'); if (this.currentPhase != GameServer.Phase.GAMEEND)
this.announceToRoom('syncRoomScene', this.currentPlayer); {
this.announceToRoom('setRoomCount', { this.announceToRoom('enterRoom');
isEnable: false, endTime: 0, playerCount: this.currentPlayer.length, this.announceToRoom('syncRoomScene', this.currentPlayer);
isEnter: false, player: {id: -1} this.announceToRoom('setRoomCount', {
}); isEnable: false, endTime: 0, playerCount: this.currentPlayer.length,
console.error('[ROOM#' + this.roomId + '] room Refreshed'); isEnter: false, player: {id: -1}
});
console.error('[ROOM#' + this.roomId + '] room Refreshed');
}
else
{
this.startTime = 0;
this.currentPlayer = [];
this.aliveCount = 0;
this.currentSocket = [];
this.currentPhase = GameServer.Phase.READY;
this.phaseChanger = -1;
this.countEndTime = 0;
this.rateArrangePoint = 300;
this.maxTypingPlayer = null;
this.minTypingPlayer = null;
console.log('[ROOM#' + this.roomId + '] room Refreshed with End of Game');
}
} }
startRoom() startRoom()
...@@ -308,20 +326,26 @@ class GameRoom ...@@ -308,20 +326,26 @@ class GameRoom
announceToRoom(_message, _data = null) announceToRoom(_message, _data = null)
{ {
this.currentSocket.forEach(function(element) if (this.currentPhase != GameServer.Phase.GAMEEND)
{ {
if(element.playerData.playingData.isInThisRoom) element.emit(_message, _data); this.currentSocket.forEach(function(element)
}); {
if(element.playerData.playingData.isInThisRoom) element.emit(_message, _data);
});
}
} }
announceToTarget(targetId, _message, _data = null) announceToTarget(targetId, _message, _data = null)
{ {
let targetSocketIndex = this.currentSocket.findIndex(function(element) if (this.currentPhase != GameServer.Phase.GAMEEND)
{ {
return element.playerData.id === targetId; let targetSocketIndex = this.currentSocket.findIndex(function(element)
}); {
//console.log('send to ' + targetSocketIndex + ', receivable? ' + this.currentSocket[targetSocketIndex].playerData.isReceivable); return element.playerData.id === targetId;
if (targetSocketIndex != -1 && this.currentSocket[targetSocketIndex].playerData.isReceivable) this.currentSocket[targetSocketIndex].emit(_message, _data); });
//console.log('send to ' + targetSocketIndex + ', receivable? ' + this.currentSocket[targetSocketIndex].playerData.isReceivable);
if (targetSocketIndex != -1 && this.currentSocket[targetSocketIndex].playerData.isReceivable) this.currentSocket[targetSocketIndex].emit(_message, _data);
}
} }
} }
...@@ -356,6 +380,7 @@ class Player ...@@ -356,6 +380,7 @@ class Player
this.isAlive = false; this.isAlive = false;
this.rank = room.nextRank--; this.rank = room.nextRank--;
if (this.tabCheckTime != undefined) clearTimeout(this.tabCheckTime);
socket.playerData.isReceivable = false; socket.playerData.isReceivable = false;
room.aliveCount--; room.aliveCount--;
...@@ -383,14 +408,16 @@ class Player ...@@ -383,14 +408,16 @@ class Player
room.announceToRoom('defeat', this); room.announceToRoom('defeat', this);
console.log('[' + this.id + '] defeated, rank: ' + this.rank + ', ' + room.aliveCount + ' player left'); console.log('[' + this.id + '] defeated, rank: ' + this.rank + ', ' + room.aliveCount + ' player left');
if (socket.playerData.currentRoom.aliveCount === 1) if (room.aliveCount === 1)
{ {
let winner = room.currentPlayer.find(function(element) let winner = room.currentPlayer.find(function(element)
{ {
return element.isAlive; return element.isAlive;
}); });
room.announceToRoom('gameEnd', winner); if (winner.tabCheckTime != undefined) clearTimeout(winner.tabCheckTime);
room.announceToRoom('gameEnd', winner.id);
room.announceToTarget(winner.id, 'alert', 'gameWin'); room.announceToTarget(winner.id, 'alert', 'gameWin');
room.currentPhase = GameServer.Phase.GAMEEND;
console.log('['+winner.id+']' + ' winner! ' + winner.nickname); console.log('['+winner.id+']' + ' winner! ' + winner.nickname);
} }
} }
......
...@@ -143,7 +143,8 @@ socket.on('changePhase', function(msg) // number Phase ...@@ -143,7 +143,8 @@ socket.on('changePhase', function(msg) // number Phase
}); });
socket.on('setPlayerTypingRate', function(msg) // number playerTypingRate socket.on('setPlayerTypingRate', function(msg) // number playerTypingRate
{ {
WordSpace.PlayerTypingRate = msg; WordSpace.playerTypingRate = msg;
WordSpace.adjustVarByPhase();
//console.log('rate: ' + msg); //console.log('rate: ' + msg);
}); });
socket.on('writeWord', function(msg) // number playerId socket.on('writeWord', function(msg) // number playerId
...@@ -244,10 +245,11 @@ socket.on('defeat', function(msg) // object player ...@@ -244,10 +245,11 @@ socket.on('defeat', function(msg) // object player
backToMenu(false); backToMenu(false);
} }
}); });
socket.on('gameEnd', function(msg) // object player socket.on('gameEnd', function(msg) // number winnerId
{ {
console.log(msg.nickname + ' Win!!!!!!'); const winner = RoomData.findPlayer(msg);
if(msg.id == RoomData.myself.id) console.log(winner.nickname + ' Win!!!!!!');
if(msg == RoomData.myself.id)
{ {
RoomData.myself.rank = 1; RoomData.myself.rank = 1;
backToMenu(true); backToMenu(true);
......
...@@ -2,7 +2,6 @@ WordSpace.startCycle = function(scene) ...@@ -2,7 +2,6 @@ WordSpace.startCycle = function(scene)
{ {
WordSpace.wordCycle.resetCycle(scene, 3000, 0, true); WordSpace.wordCycle.resetCycle(scene, 3000, 0, true);
WordSpace.nameCycle.resetCycle(scene, 3000, 0, true); WordSpace.nameCycle.resetCycle(scene, 3000, 0, true);
WordSpace.varAdjustCycle.resetCycle(scene, 100, 0, true);
WordSpace.playerTypingCycle.resetCycle(scene, 500, 500, true); WordSpace.playerTypingCycle.resetCycle(scene, 500, 500, true);
} }
...@@ -10,7 +9,6 @@ WordSpace.pauseCycle = function(isPause) ...@@ -10,7 +9,6 @@ WordSpace.pauseCycle = function(isPause)
{ {
WordSpace.wordCycle.currentCycle.paused = isPause; WordSpace.wordCycle.currentCycle.paused = isPause;
WordSpace.nameCycle.currentCycle.paused = isPause; WordSpace.nameCycle.currentCycle.paused = isPause;
WordSpace.varAdjustCycle.currentCycle.paused = isPause;
WordSpace.attackGauge.pauseCycle(isPause); WordSpace.attackGauge.pauseCycle(isPause);
WordSpace.playerTypingCycle.currentCycle.paused = isPause; WordSpace.playerTypingCycle.currentCycle.paused = isPause;
WordSpace.attackedEvents.forEach(function(element) {element.currentCycle.paused = isPause}); WordSpace.attackedEvents.forEach(function(element) {element.currentCycle.paused = isPause});
......
...@@ -65,34 +65,34 @@ WordSpace.spaceInitiate = function(scene) ...@@ -65,34 +65,34 @@ WordSpace.spaceInitiate = function(scene)
}); });
} }
WordSpace.AdjustVarByPhase = function(typingRate, phase) WordSpace.adjustVarByPhase = function()
{ {
if(phase == WordSpace.Phase.START) if(WordSpace.CurrentPhase == WordSpace.Phase.START)
{ {
WordSpace.delay.WordSpawn = 3000; WordSpace.delay.WordSpawn = 3000;
WordSpace.delay.NameSpawn = 15000; WordSpace.delay.NameSpawn = 15000;
WordSpace.NameSpawnReduce = 1000; WordSpace.NameSpawnReduce = 1000;
WordSpace.GradeProb[0] = 0.35; WordSpace.GradeProb[0] = 0.35;
WordSpace.GradeProb[1] = 1 - 0.4 * typingRate; WordSpace.GradeProb[1] = 1 - 0.4 * WordSpace.playerTypingRate;
WordSpace.GradeProb[2] = 1; WordSpace.GradeProb[2] = 1;
} }
else if(phase == WordSpace.Phase.MAIN) else if(WordSpace.CurrentPhase == WordSpace.Phase.MAIN)
{ {
WordSpace.delay.WordSpawn = 3000 - typingRate * 1000; WordSpace.delay.WordSpawn = 3000 - WordSpace.playerTypingRate * 1000;
WordSpace.delay.NameSpawn = 12000; WordSpace.delay.NameSpawn = 12000;
WordSpace.NameSpawnReduce = 1000; WordSpace.NameSpawnReduce = 1000;
WordSpace.GradeProb[0] = 0.5 - 0.5 * typingRate; WordSpace.GradeProb[0] = 0.5 - 0.5 * WordSpace.playerTypingRate;
WordSpace.GradeProb[1] = 1 - 0.5 * typingRate; WordSpace.GradeProb[1] = 1 - 0.5 * WordSpace.playerTypingRate;
WordSpace.GradeProb[2] = 1 - 0.15 * typingRate; WordSpace.GradeProb[2] = 1 - 0.15 * WordSpace.playerTypingRate;
} }
else if(phase == WordSpace.Phase.MUSIC) else if(WordSpace.CurrentPhase == WordSpace.Phase.MUSIC)
{ {
WordSpace.delay.WordSpawn = 1500; WordSpace.delay.WordSpawn = 1500;
WordSpace.delay.NameSpawn = 8000; WordSpace.delay.NameSpawn = 8000;
WordSpace.NameSpawnReduce = 400; WordSpace.NameSpawnReduce = 400;
WordSpace.GradeProb[0] = 0.2 - 0.2 * typingRate; WordSpace.GradeProb[0] = 0.2 - 0.2 * WordSpace.playerTypingRate;
WordSpace.GradeProb[1] = 0.8 - 0.45 * typingRate; WordSpace.GradeProb[1] = 0.8 - 0.45 * WordSpace.playerTypingRate;
WordSpace.GradeProb[2] = 0.9 - 0.15 * typingRate; WordSpace.GradeProb[2] = 0.9 - 0.15 * WordSpace.playerTypingRate;
} }
WordSpace.wordCycle.resetCycle(ScenesData.gameScene, WordSpace.delay.WordSpawn, WordSpace.wordCycle.currentCycle.getElapsed(), true); WordSpace.wordCycle.resetCycle(ScenesData.gameScene, WordSpace.delay.WordSpawn, WordSpace.wordCycle.currentCycle.getElapsed(), true);
WordSpace.nameCycle.resetCycle(ScenesData.gameScene, WordSpace.delay.NameSpawn, WordSpace.nameCycle.currentCycle.getElapsed(), true); WordSpace.nameCycle.resetCycle(ScenesData.gameScene, WordSpace.delay.NameSpawn, WordSpace.nameCycle.currentCycle.getElapsed(), true);
...@@ -530,14 +530,6 @@ WordSpace.resetGame = function() ...@@ -530,14 +530,6 @@ WordSpace.resetGame = function()
{ {
WordSpace.generateWord.Name(ScenesData.gameScene, false, null); WordSpace.generateWord.Name(ScenesData.gameScene, false, null);
}); });
//이건 뭐지
WordSpace.varAdjustCycle = new Cycle(function()
{
//나중에는 메세지 분석해서 Phase랑 playerTypingRate 받겠지만 일단 이렇게 해둠
//WordSpace.GetPhase();
//WordSpace.GetPlayerTypingRate();
WordSpace.AdjustVarByPhase(WordSpace.playerTypingRate, WordSpace.CurrentPhase);
});
// playerTypingRate 갱신용 사이클 // playerTypingRate 갱신용 사이클
WordSpace.playerTypingCycle = new Cycle(function() WordSpace.playerTypingCycle = new Cycle(function()
{ {
......
...@@ -62,30 +62,45 @@ io.on('connection', function(socket) ...@@ -62,30 +62,45 @@ io.on('connection', function(socket)
{ {
try try
{ {
socket.playerData.playingData.playerTyping = msg.playerTyping; let player = socket.playerData.playingData;
if (socket.playerData.currentRoom.maxTypingPlayer.playerTyping < msg.playerTyping) let room = socket.playerData.currentRoom;
player.playerTyping = msg.playerTyping;
if (room.maxTypingPlayer.playerTyping < msg.playerTyping)
{ {
socket.playerData.currentRoom.maxTypingPlayer = socket.playerData.playingData; room.maxTypingPlayer = player;
} }
if (socket.playerData.currentRoom.minTypingPlayer.playerTyping > msg.playerTyping) if (room.minTypingPlayer.playerTyping > msg.playerTyping)
{ {
socket.playerData.currentRoom.minTypingPlayer = socket.playerData.playingData; room.minTypingPlayer = player;
} }
let playerTypingRate = (msg.playerTyping - (socket.playerData.currentRoom.minTypingPlayer.playerTyping - socket.playerData.currentRoom.rateArrangePoint)) / let playerTypingRate = (msg.playerTyping - (room.minTypingPlayer.playerTyping - room.rateArrangePoint)) /
(socket.playerData.currentRoom.maxTypingPlayer.playerTyping - socket.playerData.currentRoom.minTypingPlayer.playerTyping + socket.playerData.currentRoom.rateArrangePoint * 2); (room.maxTypingPlayer.playerTyping - room.minTypingPlayer.playerTyping + room.rateArrangePoint * 2);
socket.emit('setPlayerTypingRate', playerTypingRate); socket.emit('setPlayerTypingRate', playerTypingRate);
if (msg.isWord) if (msg.isWord)
{ {
socket.playerData.currentRoom.announceToRoom('writeWord', socket.playerData.id); room.announceToRoom('writeWord', player.id);
} }
if (msg.isAttackMode) if (msg.isAttackMode)
{ {
socket.playerData.currentRoom.announceToRoom('attackMode', socket.playerData.id); room.announceToRoom('attackMode', player.id);
}
if (player.tabCheckTime != undefined)
{
clearTimeout(player.tabCheckTime);
player.tabCheckTime = setTimeout(function()
{
if (room.currentPhase != GameServer.Phase.GAMEEND) player.defeat();
}, 1000);
} }
else player.tabCheckTime = setTimeout(function()
{
if (room.currentPhase != GameServer.Phase.GAMEEND) player.defeat();
}, 1000);
} }
catch (e) { catch (e) {
console.error('[ERR] error catched on setPlayerTyping'); console.error('[ERR] error catched on setPlayerTyping (' + e + ')');
socket.disconnect(); socket.disconnect();
} }
}); });
...@@ -106,20 +121,17 @@ io.on('connection', function(socket) ...@@ -106,20 +121,17 @@ io.on('connection', function(socket)
room.startTimer = setTimeout(function() room.startTimer = setTimeout(function()
{ {
let deads = room.currentPlayer.filter(element => !element.isAlive); let deads = room.currentPlayer.filter(element => !element.isAlive);
if (room.aliveCount != 0) if (room.aliveCount != 0 && room.currentPlayer.length - deads.length >= room.startCount)
{ {
console.error('[ROOM#'+room.roomId+'] FORCE START!!!'); console.error('[ROOM#'+room.roomId+'] FORCE START!!!');
if (room.currentPlayer.length - deads.length >= room.startCount) room.startRoom();
deads.forEach(function(element)
{ {
room.startRoom(); element.defeat();
deads.forEach(function(element) });
{
element.defeat();
});
}
clearTimeout(room.startTimer); clearTimeout(room.startTimer);
} }
else else if (deads.length > 0)
{ {
deads.forEach(function(element) deads.forEach(function(element)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment