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

Merge branch 'server'

parents dcbdc78c 52aeaf6a
...@@ -70,7 +70,6 @@ GameServer.getRoomNumber = function() ...@@ -70,7 +70,6 @@ GameServer.getRoomNumber = function()
} while (true) } while (true)
} }
class GameRoom class GameRoom
{ {
constructor() constructor()
...@@ -201,7 +200,6 @@ class GameRoom ...@@ -201,7 +200,6 @@ class GameRoom
this.announceToRoom('syncRoomData', toSync); this.announceToRoom('syncRoomData', toSync);
console.log('[ROOM#'+this.roomId+'] Game Start with ' + this.currentPlayer.length + ' players'); console.log('[ROOM#'+this.roomId+'] Game Start with ' + this.currentPlayer.length + ' players');
this.announceToRoom('changePhase', GameServer.Phase.START);
this.announceToRoom('startGame'); this.announceToRoom('startGame');
this.startTime = Date.now(); this.startTime = Date.now();
} }
...@@ -213,6 +211,7 @@ class GameRoom ...@@ -213,6 +211,7 @@ class GameRoom
if (this.phaseChanger < 0 && checkTime - this.startTime > 60000) if (this.phaseChanger < 0 && checkTime - this.startTime > 60000)
{ {
this.currentPhase = GameServer.Phase.MAIN; this.currentPhase = GameServer.Phase.MAIN;
this.rateArrangePoint = 150;
this.announceToRoom('changePhase', GameServer.Phase.MAIN); this.announceToRoom('changePhase', GameServer.Phase.MAIN);
} }
else if (this.phaseChanger < 0) else if (this.phaseChanger < 0)
...@@ -220,6 +219,7 @@ class GameRoom ...@@ -220,6 +219,7 @@ class GameRoom
this.phaseChanger = setTimeout(function(room) this.phaseChanger = setTimeout(function(room)
{ {
room.currentPhase = GameServer.Phase.MAIN; room.currentPhase = GameServer.Phase.MAIN;
room.rateArrangePoint = 150;
room.announceToRoom('changePhase', GameServer.Phase.MAIN); room.announceToRoom('changePhase', GameServer.Phase.MAIN);
room.phaseChanger = -1; room.phaseChanger = -1;
}, 60000 - (checkTime - this.startTime), this); }, 60000 - (checkTime - this.startTime), this);
...@@ -227,10 +227,11 @@ class GameRoom ...@@ -227,10 +227,11 @@ class GameRoom
} }
else if (this.currentPhase === GameServer.Phase.MAIN) else if (this.currentPhase === GameServer.Phase.MAIN)
{ {
let playerLimit = Math.max(this.currentPlayer.length / 10, 3); let playerLimit = Math.min(Math.round(this.currentPlayer.length / 5), 3);
if (this.aliveCount <= playerLimit) if (this.aliveCount <= playerLimit)
{ {
this.currentPhase = GameServer.Phase.MUSIC; this.currentPhase = GameServer.Phase.MUSIC;
this.rateArrangePoint = 50;
this.announceToRoom('changePhase', GameServer.Phase.MUSIC); this.announceToRoom('changePhase', GameServer.Phase.MUSIC);
} }
} }
...@@ -292,7 +293,7 @@ class Player ...@@ -292,7 +293,7 @@ class Player
this.rank = -1; this.rank = -1;
this.playerTyping = 0; this.playerTyping = 0;
this.lastAttacks = []; // { attackerId, word, wordGrade, time } this.lastAttacks = []; // { attackerId, attacker, wrongCount, word, wordGrade, time }
this.lastAttack = null; this.lastAttack = null;
} }
...@@ -312,18 +313,22 @@ class Player ...@@ -312,18 +313,22 @@ class Player
if (this.lastAttacks.length > 0) if (this.lastAttacks.length > 0)
{ {
this.lastAttack = this.lastAttacks[this.lastAttacks.length - 1]; this.lastAttack = this.lastAttacks[this.lastAttacks.length - 1];
if (Date.now() - this.lastAttack.time > 40000) this.lastAttack = null; if (Date.now() - this.lastAttack.time > 20000) this.lastAttack = null;
else else
{ {
this.lastAttacks.forEach(function(element) this.lastAttacks.forEach(function(element)
{ {
if (Date.now() - element.time < 40000 && element.wordGrade > player.lastAttack.wordGrade) player.lastAttack = element; if (Date.now() - element.time < 20000)
{
if (element.wrongCount > player.lastAttack.wrongCount) player.lastAttack = element;
else if (element.wrongCount === player.lastAttack.wrongCount && element.wordGrade > player.lastAttack.wordGrade) player.lastAttack = element;
}
}); });
} }
} }
room.announceToRoom('defeat', this); room.announceToRoom('defeat', this);
console.log('[' + this.id + '] defeated, rank: ' + this.rank + ', ' + room.currentPlayer.length + 'player left'); console.log('[' + this.id + '] defeated, rank: ' + this.rank + ', ' + room.aliveCount + ' player left');
if (socket.playerData.currentRoom.aliveCount === 1) if (socket.playerData.currentRoom.aliveCount === 1)
{ {
......
...@@ -13,6 +13,8 @@ socket.on('alert', function(msg) // string errorcode ...@@ -13,6 +13,8 @@ socket.on('alert', function(msg) // string errorcode
ScenesData.gameScene.add.text(640, 360, '승리!!!!', {fontSize: '30pt'}) ScenesData.gameScene.add.text(640, 360, '승리!!!!', {fontSize: '30pt'})
.setPadding(5,5,5,5).setOrigin(0.5, 0.5).setDepth(11) .setPadding(5,5,5,5).setOrigin(0.5, 0.5).setDepth(11)
.setColor('#000000').setBackgroundColor('#ffffff'); .setColor('#000000').setBackgroundColor('#ffffff');
gameOver();
} }
//alert(toAlert); //alert(toAlert);
}); });
...@@ -22,6 +24,8 @@ socket.on('setId', function(msg) // {str, num playerNum} ...@@ -22,6 +24,8 @@ socket.on('setId', function(msg) // {str, num playerNum}
console.log(msg.str); console.log(msg.str);
PlayerData.id = msg.num; PlayerData.id = msg.num;
}); });
// init game
socket.on('enterRoom', function() socket.on('enterRoom', function()
{ {
Audio.killSound(ScenesData.menuScene, 'login'); Audio.killSound(ScenesData.menuScene, 'login');
...@@ -82,8 +86,6 @@ socket.on('setRoomCount', function(msg) ...@@ -82,8 +86,6 @@ socket.on('setRoomCount', function(msg)
} }
}, 200); }, 200);
}); });
// init game
socket.on('syncRoomData', function(msg) // {num roomNum, [] players} socket.on('syncRoomData', function(msg) // {num roomNum, [] players}
{ {
//console.log(msg); //console.log(msg);
...@@ -110,20 +112,56 @@ socket.on('changePhase', function(msg) // number Phase ...@@ -110,20 +112,56 @@ socket.on('changePhase', function(msg) // number Phase
{ {
console.log('phase changed from ' + WordSpace.CurrentPhase + ' to ' + msg); console.log('phase changed from ' + WordSpace.CurrentPhase + ' to ' + msg);
WordSpace.CurrentPhase = msg; WordSpace.CurrentPhase = msg;
WordSpace.pauseCycle(true);
// 여기서 종이 드르륵 열면됨
ScenesData.gameScene.scene.pause('gameScene');
setTimeout(function()
{
ScenesData.gameScene.scene.resume('gameScene');
// 여기서 종이 닫으면됨
WordSpace.pauseCycle(false);
//console.log('start again');
}, 5000);
}); });
socket.on('setPlayerTypingRate', function(msg) // number playerTypingRate socket.on('setPlayerTypingRate', function(msg) // number playerTypingRate
{ {
WordSpace.PlayerTypingRate = msg; WordSpace.PlayerTypingRate = msg;
//console.log('rate: ' + msg); //console.log('rate: ' + msg);
}); });
socket.on('writeWord', function(msg) // number playerId
{
console.log(msg + ' write word');
// msg의 id를 가진 사람이 writeWord한다.
});
socket.on('attackMode', function(msg) // number playerId
{
// if (msg's attackMode is false)
console.log(msg + ' is on attack Mode');
// msg의 id를 가진 사람이 attack Mode이다.
});
socket.on('attack', function(msg) // {number attackerId, number targetId}
{
// 이때 위의 attack Mode인 사람(msg.attackerId)을 해제해주자.
console.log(msg.attackerId + ' attack to ' + msg.targetId);
});
socket.on('attacked', function(msg) // object attackData socket.on('attacked', function(msg) // object attackData
{ {
//console.log('attacked by ' + msg.attacker.nickname); //console.log('attacked by ' + msg.attacker.nickname);
var timeout = setTimeout(function() let attackedEvent = new Cycle(function()
{ {
WordSpace.generateWord.Attack(ScenesData.gameScene, msg.text, msg.grade, msg.attacker, msg.isStrong, msg.isCountable); for (let i = 0; i < msg.multiple; i++) WordSpace.generateWord.Attack(ScenesData.gameScene, msg.text, msg.grade, msg.attacker, msg.isStrong, msg.isCountable);
}, 4000); attackedEvent.currentCycle.destroy();
console.log(timeout); WordSpace.attackedEvents.splice(WordSpace.attackedEvents.findIndex(function(element)
{
return element.cert === (msg.text + msg.attacker);
}), 1);
});
attackedEvent.cert = msg.text + msg.attacker;
attackedEvent.resetCycle(ScenesData.gameScene, 4000, 0, false);
WordSpace.attackedEvents.push(attackedEvent);
//console.log(timeout);
}); });
socket.on('defeat', function(msg) // object player socket.on('defeat', function(msg) // object player
{ {
...@@ -144,10 +182,9 @@ socket.on('gameEnd', function(msg) // object player ...@@ -144,10 +182,9 @@ socket.on('gameEnd', function(msg) // object player
{ {
console.log(msg.nickname + ' Win!!!!!!'); console.log(msg.nickname + ' Win!!!!!!');
}); });
socket.on('attackSucceed', function(msg) socket.on('attackSucceed', function(msg)
{ {
console.log('client'); //console.log('client');
let tempWord = WordSpace.generateWord.Name(ScenesData.gameScene, true, msg.victim); let tempWord = WordSpace.generateWord.Name(ScenesData.gameScene, true, msg.victim);
tempWord.destroy(); tempWord.destroy();
}); });
...@@ -155,7 +192,7 @@ socket.on('attackSucceed', function(msg) ...@@ -155,7 +192,7 @@ socket.on('attackSucceed', function(msg)
// out game // out game
socket.on('userDisconnect', function(msg) // {num index , num id, str nickname} socket.on('userDisconnect', function(msg) // {num index , num id, str nickname}
{ {
console.log(msg.index + ' / ' + msg.id + ' / ' + msg.nickname + ' disconnected'); //console.log(msg.index + ' / ' + msg.id + ' / ' + msg.nickname + ' disconnected');
RoomData.players[msg.index] = msg; RoomData.players[msg.index] = msg;
RoomData.aliveCount--; RoomData.aliveCount--;
}); });
\ No newline at end of file
...@@ -3,10 +3,7 @@ WordSpace.startCycle = function(scene) ...@@ -3,10 +3,7 @@ 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.varAdjustCycle.resetCycle(scene, 100, 0, true);
WordSpace.playerTypingCycle = setInterval(function() WordSpace.playerTypingCycle.resetCycle(scene, 500, 500, true);
{
socket.emit('setPlayerTyping', WordSpace.playerTyping);
}, 500);
} }
WordSpace.pauseCycle = function(isPause) WordSpace.pauseCycle = function(isPause)
...@@ -15,11 +12,8 @@ WordSpace.pauseCycle = function(isPause) ...@@ -15,11 +12,8 @@ WordSpace.pauseCycle = function(isPause)
WordSpace.nameCycle.currentCycle.paused = isPause; WordSpace.nameCycle.currentCycle.paused = isPause;
WordSpace.varAdjustCycle.currentCycle.paused = isPause; WordSpace.varAdjustCycle.currentCycle.paused = isPause;
WordSpace.attackGauge.pauseCycle(isPause); WordSpace.attackGauge.pauseCycle(isPause);
if (isPause) clearInterval(WordSpace.playerTypingCycle); WordSpace.playerTypingCycle.currentCycle.paused = isPause;
else WordSpace.playerTypingCycle = setInterval(function() WordSpace.attackedEvents.forEach(function(element) {element.currentCycle.paused = isPause});
{
socket.emit('setPlayerTyping', WordSpace.playerTyping);
}, 500);
} }
class Cycle //앞으로 cycle은 이 클래스를 사용해서 구현할 것 class Cycle //앞으로 cycle은 이 클래스를 사용해서 구현할 것
...@@ -65,4 +59,12 @@ WordSpace.varAdjustCycle = new Cycle(function() ...@@ -65,4 +59,12 @@ WordSpace.varAdjustCycle = new Cycle(function()
//WordSpace.GetPhase(); //WordSpace.GetPhase();
//WordSpace.GetPlayerTypingRate(); //WordSpace.GetPlayerTypingRate();
WordSpace.AdjustVarByPhase(WordSpace.playerTypingRate, WordSpace.CurrentPhase); WordSpace.AdjustVarByPhase(WordSpace.playerTypingRate, WordSpace.CurrentPhase);
}); });
\ No newline at end of file // playerTypingRate 갱신용 사이클
WordSpace.playerTypingCycle = new Cycle(function()
{
socket.emit('setPlayerTyping', {playerTyping: WordSpace.playerTyping, isWord: WordSpace.setPlayerTyping.writeWord, isAttackMode: Input.attackMode} );
WordSpace.setPlayerTyping.writeWord = false;
});
// 공격받을때의 일회용 이벤트들
WordSpace.attackedEvents = [];
\ No newline at end of file
...@@ -21,7 +21,7 @@ WordSpace.wordPhysicsGroup = null; ...@@ -21,7 +21,7 @@ WordSpace.wordPhysicsGroup = null;
WordSpace.GradeProb = [0.35, 0.6, 0.8]; WordSpace.GradeProb = [0.35, 0.6, 0.8];
WordSpace.Phase = {READY: 0, START: 1, MAIN: 2, MUSIC: 3}; WordSpace.Phase = {READY: 0, START: 1, MAIN: 2, MUSIC: 3};
WordSpace.CurrentPhase = WordSpace.Phase.READY; WordSpace.CurrentPhase = WordSpace.Phase.START;
WordSpace.playerTyping = 0; WordSpace.playerTyping = 0;
WordSpace.playerTypingRate = 0; WordSpace.playerTypingRate = 0;
...@@ -65,16 +65,7 @@ WordSpace.spaceInitiate = function(scene) ...@@ -65,16 +65,7 @@ WordSpace.spaceInitiate = function(scene)
WordSpace.AdjustVarByPhase = function(typingRate, phase) WordSpace.AdjustVarByPhase = function(typingRate, phase)
{ {
if(phase == WordSpace.Phase.READY) if(phase == WordSpace.Phase.START)
{
WordSpace.delay.WordSpawn = 10000;
WordSpace.delay.NameSpawn = 10000;
WordSpace.NameSpawnReduce = 0;
WordSpace.GradeProb[0] = 1;
WordSpace.GradeProb[1] = 1;
WordSpace.GradeProb[2] = 1;
}
else if(phase == WordSpace.Phase.START)
{ {
WordSpace.delay.WordSpawn = 3000; WordSpace.delay.WordSpawn = 3000;
WordSpace.delay.NameSpawn = 15000; WordSpace.delay.NameSpawn = 15000;
...@@ -359,7 +350,8 @@ WordSpace.findWord = function(wordText) ...@@ -359,7 +350,8 @@ WordSpace.findWord = function(wordText)
{ {
roomNum: RoomData.roomId, roomNum: RoomData.roomId,
victim: RoomData.myself, victim: RoomData.myself,
target: element.attacker.id target: element.attacker.id,
word: element.wordText
} }
socket.emit('defenseFailed', victimData); socket.emit('defenseFailed', victimData);
return true; return true;
...@@ -372,11 +364,13 @@ WordSpace.findWord = function(wordText) ...@@ -372,11 +364,13 @@ WordSpace.findWord = function(wordText)
WordSpace.setPlayerTyping = WordSpace.setPlayerTyping =
{ {
totalTyping: 0, totalTyping: 0,
writeWord: false,
add: function(wordText) add: function(wordText)
{ {
this.totalTyping += wordText != null ? WordReader.getWordTyping(wordText) : 0; this.totalTyping += wordText != null ? WordReader.getWordTyping(wordText) : 0;
WordSpace.playerTyping = this.totalTyping / WordSpace.gameTimer.now * 60 * 1000; WordSpace.playerTyping = this.totalTyping / WordSpace.gameTimer.now * 60 * 1000;
this.text.setText('현재 타수 : ' + WordSpace.playerTyping.toFixed(1)); this.text.setText('현재 타수 : ' + WordSpace.playerTyping.toFixed(1));
this.writeWord = wordText != '' ? true : false;
}, },
initiate: function(scene) initiate: function(scene)
{ {
...@@ -390,22 +384,40 @@ WordSpace.attack = function(wordText, grade) ...@@ -390,22 +384,40 @@ WordSpace.attack = function(wordText, grade)
if (wordText != '') if (wordText != '')
{ {
console.log('attack ' + wordText + ', grade: ' + grade); console.log('attack ' + wordText + ', grade: ' + grade);
let toSend = [];
WordSpace.nameGroup.forEach(function(element) WordSpace.nameGroup.forEach(function(element)
{ {
//console.log(RoomData.myself); let targetId = element.ownerId;
let attackData = let sendIdx = toSend.findIndex(function(element)
{
return element.target === targetId;
});
if (sendIdx !== -1)
{
toSend[sendIdx].multiple++;
}
else
{ {
roomNum: RoomData.roomId, let attackData =
attacker: RoomData.myself, {
target: element.ownerId, roomNum: RoomData.roomId,
text: wordText, attacker: RoomData.myself,
grade: grade, target: element.ownerId,
isStrong: element.isStrong text: wordText,
grade: grade,
isStrong: element.isStrong,
multiple: 1
}
toSend.push(attackData);
} }
socket.emit('attack', attackData);
element.physicsObj.destroy(); element.physicsObj.destroy();
element.wordObj.destroy(); element.wordObj.destroy();
}); });
toSend.forEach(function(element)
{
socket.emit('attack', element);
});
WordSpace.generateWord.Name(ScenesData.gameScene, false, null); WordSpace.generateWord.Name(ScenesData.gameScene, false, null);
WordSpace.generateWord.Name(ScenesData.gameScene, false, null); WordSpace.generateWord.Name(ScenesData.gameScene, false, null);
WordSpace.nameGroup = []; WordSpace.nameGroup = [];
......
...@@ -58,22 +58,29 @@ io.on('connection', function(socket) ...@@ -58,22 +58,29 @@ io.on('connection', function(socket)
{ {
try try
{ {
socket.playerData.playingData.playerTyping = msg; socket.playerData.playingData.playerTyping = msg.playerTyping;
if (socket.playerData.currentRoom.maxTypingPlayer.playerTyping < msg) if (socket.playerData.currentRoom.maxTypingPlayer.playerTyping < msg.playerTyping)
{ {
socket.playerData.currentRoom.maxTypingPlayer = socket.playerData.playingData; socket.playerData.currentRoom.maxTypingPlayer = socket.playerData.playingData;
} }
if (socket.playerData.currentRoom.minTypingPlayer.playerTyping > msg) if (socket.playerData.currentRoom.minTypingPlayer.playerTyping > msg.playerTyping)
{ {
socket.playerData.currentRoom.minTypingPlayer = socket.playerData.playingData; socket.playerData.currentRoom.minTypingPlayer = socket.playerData.playingData;
} }
let playerTypingRate = (msg - (socket.playerData.currentRoom.minTypingPlayer.playerTyping - socket.playerData.currentRoom.rateArrangePoint)) / let playerTypingRate = (msg.playerTyping - (socket.playerData.currentRoom.minTypingPlayer.playerTyping - socket.playerData.currentRoom.rateArrangePoint)) /
(socket.playerData.currentRoom.maxTypingPlayer.playerTyping - socket.playerData.currentRoom.minTypingPlayer.playerTyping + socket.playerData.currentRoom.rateArrangePoint * 2); (socket.playerData.currentRoom.maxTypingPlayer.playerTyping - socket.playerData.currentRoom.minTypingPlayer.playerTyping + socket.playerData.currentRoom.rateArrangePoint * 2);
socket.emit('setPlayerTypingRate', playerTypingRate); socket.emit('setPlayerTypingRate', playerTypingRate);
if (msg.isWord)
{
socket.playerData.currentRoom.announceToRoom('writeWord', socket.playerData.id);
}
if (msg.isAttackMode)
{
socket.playerData.currentRoom.announceToRoom('attackMode', socket.playerData.id);
}
} }
catch (e) catch (e) {console.log('[ERR] error catched on setPlayerTyping')}
{
}
}); });
socket.on('endCount', function() socket.on('endCount', function()
...@@ -88,6 +95,7 @@ io.on('connection', function(socket) ...@@ -88,6 +95,7 @@ io.on('connection', function(socket)
socket.on('attack', function(msg) socket.on('attack', function(msg)
{ {
socket.playerData.currentRoom.announceToTarget(msg.target, 'attacked', msg); socket.playerData.currentRoom.announceToTarget(msg.target, 'attacked', msg);
socket.playerData.currentRoom.announceToRoom('attack', {attackerId: msg.attacker.id, targetId: msg.target});
//console.log('attack ' + msg.target + ' by ' + msg.attacker.id + ' with ' + msg.text); //console.log('attack ' + msg.target + ' by ' + msg.attacker.id + ' with ' + msg.text);
setTimeout(function() setTimeout(function()
{ {
...@@ -98,16 +106,16 @@ io.on('connection', function(socket) ...@@ -98,16 +106,16 @@ io.on('connection', function(socket)
{ {
attackerId: msg.attacker.id, attackerId: msg.attacker.id,
attacker: msg.attacker.nickname, attacker: msg.attacker.nickname,
wrongCount: 0,
word: msg.text, word: msg.text,
wordGrade: msg.grade, wordGrade: msg.grade,
time: Date.now() time: Date.now()
} }
if (target.playerData.playingData.lastAttacks.length < 5) target.playerData.playingData.lastAttacks.push(dataToPush); target.playerData.playingData.lastAttacks.push(dataToPush);
else while (target.playerData.playingData.lastAttacks[0].time + 20000 < Date.now())
{ {
target.playerData.playingData.lastAttacks.splice(0, 1); target.playerData.playingData.lastAttacks.splice(0, 1);
target.playerData.playingData.lastAttacks.push(dataToPush);
} }
} }
}, 4000); }, 4000);
...@@ -121,6 +129,11 @@ io.on('connection', function(socket) ...@@ -121,6 +129,11 @@ io.on('connection', function(socket)
socket.on('defenseFailed', function(msg) socket.on('defenseFailed', function(msg)
{ {
socket.playerData.currentRoom.announceToTarget(msg.target, 'attackSucceed', msg); socket.playerData.currentRoom.announceToTarget(msg.target, 'attackSucceed', msg);
let wrongCountIndex = socket.playerData.playingData.lastAttacks.findIndex(function(element)
{
return (element.word === msg.word) && (element.attackerId === msg.target);
});
if (wrongCountIndex !== -1) socket.playerData.playingData.lastAttacks[wrongCountIndex].wrongCount++;
}); });
socket.on('disconnect', function(reason) socket.on('disconnect', function(reason)
......
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