Commit 11a48a49 authored by 18신대성's avatar 18신대성

Merge branch 'wordspace'

parents 61daf001 164931b7
This diff is collapsed.
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
<script src="js/CSVParsing.js"></script> <script src="js/CSVParsing.js"></script>
<script src="js/SelectWord.js"></script> <script src="js/SelectWord.js"></script>
<script src="js/BGMsound.js"></script> <script src="js/BGMsound.js"></script>
<script src="js/Enums.js"></script>
</head> </head>
<body> <body>
<script src="js/Client.js"></script> <script src="js/Client.js"></script>
......
...@@ -6,7 +6,8 @@ BackGround.myCharacter = null; ...@@ -6,7 +6,8 @@ BackGround.myCharacter = null;
BackGround.loadImage = function(scene) BackGround.loadImage = function(scene)
{ {
scene.load.image('brainGround', 'assets/image/background/background_brain.png'); scene.load.image('brainGround', 'assets/image/background/background_brain.png');
scene.load.image('menuBackground', 'assets/placeholder/menuBackground.png') scene.load.image('menuBackground', 'assets/placeholder/menuBackground.png');
scene.load.image('roomBackground', 'assets/placeholder/roomBackground.png');
} }
BackGround.drawCharacter = function(scene) BackGround.drawCharacter = function(scene)
...@@ -23,3 +24,8 @@ BackGround.drawMenu = function(scene) ...@@ -23,3 +24,8 @@ BackGround.drawMenu = function(scene)
{ {
scene.add.sprite(640, 360, 'menuBackground').setDisplaySize(1282, 722).setDepth(1); scene.add.sprite(640, 360, 'menuBackground').setDisplaySize(1282, 722).setDepth(1);
} }
BackGround.drawRoom = function(scene)
{
scene.add.sprite(640, 360, 'roomBackground').setDisplaySize(1282, 722).setDepth(1);
}
\ No newline at end of file
...@@ -14,27 +14,84 @@ socket.on('alert', function(msg) // string errorcode ...@@ -14,27 +14,84 @@ socket.on('alert', function(msg) // string errorcode
socket.on('setId', function(msg) // {str, num playerNum} socket.on('setId', function(msg) // {str, num playerNum}
{ {
console.log(msg.str); console.log(msg.str);
PlayerData.idNum = msg.num; PlayerData.id = msg.num;
}); });
socket.on('enterRoom', function() socket.on('enterRoom', function()
{ {
Audio.killSound(ScenesData.menuScene, 'login'); Audio.killSound(ScenesData.menuScene, 'login');
game.scene.remove('menuScene'); game.scene.remove('menuScene');
game.scene.start('roomScene'); game.scene.start('roomScene');
});
socket.on('syncRoomScene', function(msg)
{
setTimeout(function()
{
for (let i = 0; i < msg.length; i++)
{
let randX = Math.random() * 1120 + 80;
let randY = Math.random() * 380 + 100;
var playerSet =
{
sprite: ScenesData.roomScene.add.sprite(randX, randY, 'playerStand').setOrigin(0.5, 0.5).setScale(0.2, 0.2),
nickname: ScenesData.roomScene.add.text(randX-10, randY-60, msg[i].nickname).setOrigin(0.5,0.5).setColor('#000000').setPadding(0.5,0.5,0.5,0.5),
id: msg[i].id
}
ScenesData.roomScene.players.push(playerSet);
}
}, 100);
}); });
socket.on('setCount', function(msg) socket.on('setRoomCount', function(msg)
{ {
setTimeout(function()
{
ScenesData.roomScene.isCounting = msg.isEnable; ScenesData.roomScene.isCounting = msg.isEnable;
ScenesData.roomScene.endTime = msg.endTime; ScenesData.roomScene.endTime = msg.endTime;
ScenesData.roomScene.peopleCount = msg.playerCount;
if (msg.isEnter) // generate charactor
{
let randX = Math.random() * 1120 + 80;
let randY = Math.random() * 380 + 100;
var playerSet =
{
sprite: ScenesData.roomScene.add.sprite(randX, randY, 'playerStand').setOrigin(0.5, 0.5).setScale(0.2, 0.2),
nickname: ScenesData.roomScene.add.text(randX-10, randY-60, msg.player.nickname).setOrigin(0.5,0.5).setColor('#000000').setPadding(0.5,0.5,0.5,0.5),
id: msg.player.id
}
ScenesData.roomScene.players.push(playerSet);
}
else // remove charactor
{
let idx = ScenesData.roomScene.players.findIndex(function(element)
{
return element.id === msg.player.id;
});
if (idx != -1)
{
ScenesData.roomScene.players[idx].sprite.destroy();
ScenesData.roomScene.players[idx].nickname.destroy();
ScenesData.roomScene.players.splice(idx, 1);
}
}
}, 200);
}); });
// init game // init game
socket.on('syncRoomData', function(msg) // {num roomNum, [] players} socket.on('syncRoomData', function(msg) // {num roomNum, [] players}
{ {
console.log(msg); //console.log(msg);
RoomData.roomNum = msg.roomNum; RoomData.roomId = msg.roomId;
RoomData.players = msg.players; RoomData.players = msg.players;
RoomData.aliveCount = msg.players.length; RoomData.aliveCount = msg.players.length;
RoomData.players.forEach(function(element)
{
if(element.id === PlayerData.id)
{
RoomData.myself = element;
return;
}
});
}); });
socket.on('startGame', function() socket.on('startGame', function()
{ {
...@@ -55,9 +112,10 @@ socket.on('setPlayerTypingRate', function(msg) // number playerTypingRate ...@@ -55,9 +112,10 @@ socket.on('setPlayerTypingRate', function(msg) // number playerTypingRate
}); });
socket.on('attacked', function(msg) // object attackData socket.on('attacked', function(msg) // object attackData
{ {
//console.log('attacked by ' + msg.attacker.nickname);
setTimeout(function() setTimeout(function()
{ {
WordSpace.generateWord.Attack(ScenesData.gameScene, msg.text, msg.grade, msg.attacker, msg.isStrong); WordSpace.generateWord.Attack(ScenesData.gameScene, msg.text, msg.grade, msg.attacker, msg.isStrong, msg.isCountable);
}, 4000); }, 4000);
}); });
socket.on('defeat', function(msg) // object player socket.on('defeat', function(msg) // object player
......
var Enums = Enums || {}; var Enums = Enums || {};
Enums.characterAnim = { write: 0, attackWrite: 1, throw: 2, hit: 3 }
\ No newline at end of file
...@@ -42,28 +42,63 @@ var roomScene = new Phaser.Class( ...@@ -42,28 +42,63 @@ var roomScene = new Phaser.Class(
preload: function() preload: function()
{ {
ScenesData.roomScene = this; ScenesData.roomScene = this;
BackGround.loadImage(this);
this.load.image('playerStand', 'assets/image/character/pyeongmin/pyeong_stand.png');
}, },
create: function() create: function()
{ {
BackGround.drawRoom(this);
this.players = [];
this.isCounting = false; this.isCounting = false;
this.isCountEnd = false;
this.endTime = 0; this.endTime = 0;
this.peopleCount = 1; this.peopleCount = 1;
this.countText = this.add.text(640, 360, '사람들을 위해 대기중입니다...').setOrigin(0.5, 0.5).setColor('#000000'); this.countText = this.add.text(640, 360, '사람들을 위해 대기중입니다...').setOrigin(0.5, 0.5).setColor('#000000').setBackgroundColor('#ffffff').setDepth(10).setPadding(5,5,5,5);
this.peopleText = this.add.text(640, 100, '1 / 10').setOrigin(0.5, 0.5).setColor('#000000'); this.peopleText = this.add.text(640, 80, '1 / 10').setOrigin(0.5, 0.5).setColor('#000000').setBackgroundColor('#ffffff').setDepth(10);
}, },
update: function() update: function()
{ {
this.peopleText.setText(this.peopleCount + ' / 10'); this.peopleText.setText(this.peopleCount + ' / 10');
if (this.isCounting) if (this.isCounting)
{ {
this.countText.setText(((this.endTime - Date.now()) / 1000).toFixed(1)); this.countText.setText(((this.endTime - Date.now()) / 1000).toFixed(1));
if (this.endTime - Date.now() < 0) if (this.endTime < Date.now())
{ {
//console.log('end Count');
setTimeout(() => {
socket.emit('endCount'); socket.emit('endCount');
}, (Phaser.Math.Distance.Between(0, 0, 640, 800) * 3));
this.isCounting = false; this.isCounting = false;
this.isCountEnd = true;
this.players.forEach(function(element){
element.follower = { t: 0, vec: new Phaser.Math.Vector2() };
element.path = new Phaser.Curves.Line([
element.sprite.x, element.sprite.y,
640, 800
]);
ScenesData.roomScene.tweens.add({
targets: element.follower,
t: 1,
ease: 'Linear',
duration: Phaser.Math.Distance.Between(element.sprite.x, element.sprite.y, 640, 800) * 3,
repeat: 0
});
});
}
} }
else if (this.isCountEnd)
{
this.players.forEach(function(element){
element.path.getPoint(element.follower.t, element.follower.vec);
element.sprite.setPosition(element.follower.vec.x, element.follower.vec.y);
element.nickname.setPosition(element.sprite.x - 10, element.sprite.y - 60);
});
this.countText.setText('잠시만 기다려주세요...');
} }
else else
{ {
...@@ -95,6 +130,8 @@ var gameScene = new Phaser.Class( ...@@ -95,6 +130,8 @@ var gameScene = new Phaser.Class(
create: function() create: function()
{ {
WordSpace.gameTimer = new Phaser.Time.Clock(this);
WordSpace.gameTimer.start();
WordSpace.loadAnimation(this); WordSpace.loadAnimation(this);
CSVParsing.CSVParse(this); CSVParsing.CSVParse(this);
BackGround.drawBrain(this); BackGround.drawBrain(this);
...@@ -119,14 +156,8 @@ var gameScene = new Phaser.Class( ...@@ -119,14 +156,8 @@ var gameScene = new Phaser.Class(
WordSpace.nameWordTextForTest = ScenesData.gameScene.add.text(50,400,'현재 가진 호패들 : 없음').setDepth(10).setColor('#000000'); WordSpace.nameWordTextForTest = ScenesData.gameScene.add.text(50,400,'현재 가진 호패들 : 없음').setDepth(10).setColor('#000000');
WordSpace.nameQueue.initiate(); WordSpace.nameQueue.initiate();
RoomData.players.forEach(function(element)
{ // for test
if(element.nickname == PlayerData.nickname)
{
RoomData.myself = element;
return;
}
});
WordSpace.attackGauge.add(11); WordSpace.attackGauge.add(11);
}, },
......
class WordObject class WordObject
{ {
constructor(text, isNameWord = false) constructor(text, isNameWord = false)
{ {
this.generationCode = WordSpace.nextWordCode++; this.generationCode = WordSpace.nextWordCode++;
this.wordText = text; this.wordText = text;
this.wordTyping = WordReader.getWordTyping(this.wordText); this.wordTyping = WordReader.getWordTyping(this.wordText);
this.wordGrade = WordReader.getWordGrade(this.wordTyping); this.wordGrade = WordReader.getWordGrade(this.wordTyping);
this.wordWeight = WordReader.getWordWeight(this.wordGrade); this.wordWeight = WordReader.normalWeight[3 - this.wordGrade];
//console.log("wordTyping : " + this.wordTyping + '\n' + "wordGrade : " + this.wordGrade + '\n' + "wordWeight : " + this.wordWeight + '\n'); //console.log("wordTyping : " + this.wordTyping + '\n' + "wordGrade : " + this.wordGrade + '\n' + "wordWeight : " + this.wordWeight + '\n');
this.wordSpeed = 0.5; this.wordSpeed = 0.5;
this.isNameWord = isNameWord; this.isNameWord = isNameWord;
...@@ -49,10 +50,11 @@ class WordObject ...@@ -49,10 +50,11 @@ class WordObject
{ {
fontSize: (this.scale * this.fontScale) +'pt', fontSize: (this.scale * this.fontScale) +'pt',
fontFamily: '"궁서", 궁서체, serif', fontFamily: '"궁서", 궁서체, serif',
fontStyle: (this.wordWeight > 5 ? 'bold' : '') //fontStyle: (this.wordWeight > 5 ? 'bold' : '')
}); });
if (!this.isNameWord) this.wordObj.setColor('#000000').setOrigin(0.5,0.5); if (!this.isNameWord) this.wordObj.setColor('#000000').setOrigin(0.5,0.5);
else this.wordObj.setColor('#ffffff').setOrigin(0.45,0.5); else this.wordObj.setColor('#ffffff').setOrigin(0.45,0.5);
this.createdTime = WordSpace.gameTimer.now;
WordSpace.totalWeight += this.wordWeight; WordSpace.totalWeight += this.wordWeight;
WordSpace.totalWordNum += 1; WordSpace.totalWordNum += 1;
WordSpace.setGameOverTimer(); WordSpace.setGameOverTimer();
...@@ -79,7 +81,7 @@ class WordObject ...@@ -79,7 +81,7 @@ class WordObject
this.wordObj.destroy(); this.wordObj.destroy();
this.physicsObj.destroy(); this.physicsObj.destroy();
} }
BackGround.myCharacter.play(WordSpace.pyeongminAnims[0]); BackGround.myCharacter.play(WordSpace.pyeongminAnims[Enums.characterAnim.write]);
} }
attract() attract()
...@@ -136,20 +138,50 @@ class NormalWord extends WordObject ...@@ -136,20 +138,50 @@ class NormalWord extends WordObject
class AttackWord extends WordObject class AttackWord extends WordObject
{ {
constructor(text, _wordGrade, _playerData, isStrong) constructor(text, _wordGrade, _playerData, _isStrong, _isCountable = true, lenRate)
{ {
super(text); super(text);
this.wordGrade = _wordGrade; this.wordGrade = _wordGrade;
this.wordWeight = WordReader.getWordWeight(this.wordGrade); this.wordWeight = _isStrong ? WordReader.strongAttackWeight[3 - this.wordGrade] : WordReader.attackWeight[3 - this.wordGrade];
if(WordReader.getWordTyping(_playerData.nickname) > 9) if(WordReader.getWordTyping(_playerData.nickname) > 9)
this.wordWeight += this.wordWeight * 0.2 * (WordReader.getWordTyping(_playerData.nickname) - 9); this.wordWeight += this.wordWeight * 0.2 * (WordReader.getWordTyping(_playerData.nickname) - 9);
this.wordWeight *= isStrong ? 3 : 2;
this.attacker = _playerData; this.attacker = _playerData;
this.counterTime = WordSpace.gameTimer.now + 1000 * (this.wordTyping <= (5 - _wordGrade) * 2.5 ? this.wordTyping / (Math.max(200, WordSpace.playerTyping) / 60) * 1.5 : if(!_isCountable) this.counterTime = 0;
else this.counterTime = WordSpace.gameTimer.now + 1000 * (this.wordTyping <= (5 - _wordGrade) * 2.5 ? this.wordTyping / (Math.max(200, WordSpace.playerTyping) / 60) * 1.5 :
((5 - _wordGrade) * 3 + (this.wordTyping - (5 - _wordGrade) * 2.5) * 2.5) / (Math.max(200, WordSpace.playerTyping) / 60) * 1.5); ((5 - _wordGrade) * 3 + (this.wordTyping - (5 - _wordGrade) * 2.5) * 2.5) / (Math.max(200, WordSpace.playerTyping) / 60) * 1.5);
console.log('Attack text : ' + text + ', Attacker : ' + this.attacker.nickname + ', Weight : ' + this.wordWeight); console.log('Attack text : ' + text + ', Attacker : ' + this.attacker.nickname + ', Weight : ' + this.wordWeight);
console.log('Counter time : ' + this.counterTime); console.log('Counter time : ' + this.counterTime);
} }
instantiate(scene, lenRate)
{
super.instantiate(scene, lenRate);
this.maskBackground = scene.physics.add.sprite(this.physicsObj.x, this.physicsObj.y, 'wordBgr' + this.wordGrade + '_' + Math.min(Math.max(2, this.wordText.length), 6))
.setTint(Phaser.Display.Color.GetColor(120, 120, 120)).setScale(this.scale);
this.maskBackground.alpha = 0.5;
this.shape = scene.make.graphics();
var rect = new Phaser.Geom.Rectangle(0, 0, this.maskBackground.width * this.scale, this.maskBackground.height * this.scale);
this.shape.fillStyle(0xffffff).fillRectShape(rect);
this.mask = this.shape.createGeometryMask();
this.maskBackground.setMask(this.mask);
this.maskStart = this.physicsObj.x;
this.maskEnd = this.physicsObj.x - this.physicsObj.width * this.scale;
}
attract()
{
super.attract();
if(WordSpace.gameTimer.now < this.counterTime)
{
this.maskBackground.setPosition(this.physicsObj.x, this.physicsObj.y);
this.shape.x = this.physicsObj.x + (this.maskEnd - this.maskStart) *
((WordSpace.gameTimer.now - this.createdTime) / (this.counterTime - this.createdTime)) - this.physicsObj.width * this.scale / 2;
this.shape.y = this.physicsObj.y - this.physicsObj.height * this.scale / 2;
}
else if(this.maskBackground != null) this.maskBackground.destroy();
}
destroy() destroy()
{ {
switch(this.wordGrade) switch(this.wordGrade)
...@@ -162,11 +194,23 @@ class AttackWord extends WordObject ...@@ -162,11 +194,23 @@ class AttackWord extends WordObject
} }
if(WordSpace.gameTimer.now < this.counterTime) if(WordSpace.gameTimer.now < this.counterTime)
{ {
console.log(this.attacker);
let tempWord = WordSpace.generateWord.Name(ScenesData.gameScene, true, this.attacker); let tempWord = WordSpace.generateWord.Name(ScenesData.gameScene, true, this.attacker);
tempWord.physicsObj.setPosition(this.physicsObj.x, this.physicsObj.y);
tempWord.wordObj.setPosition(tempWord.physicsObj.x, tempWord.physicsObj.y);
tempWord.destroy(); tempWord.destroy();
let attackData =
{
roomNum: RoomData.roomId,
attacker: RoomData.myself,
target: this.attacker.id,
text: this.wordText,
grade: Math.min(3, this.wordGrade + 1),
isStrong: false,
isCountable: false
}
socket.emit('attack', attackData);
} }
//WordSpace.nameGroup.push(new NameWord(this.attacker, true)); if(this.maskBackground != null) this.maskBackground.destroy();
super.destroy(); super.destroy();
} }
} }
...@@ -185,7 +229,8 @@ class NameWord extends WordObject ...@@ -185,7 +229,8 @@ class NameWord extends WordObject
attract() attract()
{ {
if(this.isActive) super.attract(); if(this.isActive) super.attract();
else{ else
{
this.path.getPoint(this.follower.t, this.follower.vec); this.path.getPoint(this.follower.t, this.follower.vec);
this.physicsObj.setPosition(this.follower.vec.x, this.follower.vec.y); this.physicsObj.setPosition(this.follower.vec.x, this.follower.vec.y);
this.wordObj.setPosition(this.physicsObj.x, this.physicsObj.y); this.wordObj.setPosition(this.physicsObj.x, this.physicsObj.y);
......
...@@ -54,9 +54,6 @@ WordReader.getWordGrade = function(_wordTyping) ...@@ -54,9 +54,6 @@ WordReader.getWordGrade = function(_wordTyping)
17 <= _wordTyping && _wordTyping < 26 ? 0 : -1; 17 <= _wordTyping && _wordTyping < 26 ? 0 : -1;
} }
WordReader.getWordWeight = function(_wordGrade) WordReader.normalWeight = [3, 5, 7, 10];
{ WordReader.attackWeight = [6, 8, 12, 15];
return _wordGrade == 3 ? 3 : WordReader.strongAttackWeight = [10, 13, 16, 20];
_wordGrade == 2 ? 5 : \ No newline at end of file
_wordGrade == 1 ? 7 : 10;
}
\ No newline at end of file
...@@ -256,20 +256,27 @@ WordSpace.loadAnimation = function(scene) ...@@ -256,20 +256,27 @@ WordSpace.loadAnimation = function(scene)
repeat: 0, repeat: 0,
hideOnComplete: false hideOnComplete: false
}); });
WordSpace.pyeongminAnims.push(scene.anims.create({ WordSpace.pyeongminAnims[Enums.characterAnim.write] = scene.anims.create({
key: 'write', key: 'pyeongminWriteAnim',
frames: scene.anims.generateFrameNumbers('pyeongminWrite'), frames: scene.anims.generateFrameNumbers('pyeongminWrite'),
frameRate: 10, frameRate: 10,
repeat: 0, repeat: 0,
hideOnComplete: false hideOnComplete: false
})); });
WordSpace.pyeongminAnims.push(scene.anims.create({ WordSpace.pyeongminAnims[Enums.characterAnim.attackWrite] = scene.anims.create({
key: 'throw', key: 'pyeongminattackWriteAnim',
frames: scene.anims.generateFrameNumbers('pyeongminWrite'),
frameRate: 10,
repeat: -1,
hideOnComplete: false
});
WordSpace.pyeongminAnims[Enums.characterAnim.throw] = scene.anims.create({
key: 'pyeongminThrowAnim',
frames: scene.anims.generateFrameNumbers('pyeongminThrow'), frames: scene.anims.generateFrameNumbers('pyeongminThrow'),
frameRate: 10, frameRate: 10,
repeat: 0, repeat: 0,
hideOnComplete: false hideOnComplete: false
})); });
} }
WordSpace.generateWord = WordSpace.generateWord =
...@@ -280,9 +287,9 @@ WordSpace.generateWord = ...@@ -280,9 +287,9 @@ WordSpace.generateWord =
WordSpace.pushWord(scene, word, lenRate); WordSpace.pushWord(scene, word, lenRate);
return word; return word;
}, },
Attack: function(scene, wordText, grade, attacker, isStrong, lenRate) Attack: function(scene, wordText, grade, attacker, isStrong, isCountable, lenRate)
{ {
word = new AttackWord(wordText, grade, attacker, isStrong); word = new AttackWord(wordText, grade, attacker, isStrong, isCountable);
WordSpace.pushWord(scene, word, lenRate); WordSpace.pushWord(scene, word, lenRate);
return word; return word;
}, },
...@@ -373,6 +380,8 @@ WordSpace.findWord = function(wordText) ...@@ -373,6 +380,8 @@ WordSpace.findWord = function(wordText)
Input.attackMode = true; Input.attackMode = true;
WordSpace.attackGauge.pauseCycle(true); WordSpace.attackGauge.pauseCycle(true);
WordSpace.setPlayerTyping.add(wordText); WordSpace.setPlayerTyping.add(wordText);
BackGround.myCharacter.play(WordSpace.pyeongminAnims[Enums.characterAnim.attackWrite]);
BackGround.myCharacter.anims.msPerFrame /= (4 - WordSpace.attackGauge.getAttackOption().wordGrade);
} }
else // 오타 체크 else // 오타 체크
{ {
...@@ -394,7 +403,7 @@ WordSpace.findWord = function(wordText) ...@@ -394,7 +403,7 @@ WordSpace.findWord = function(wordText)
console.log('Attack word : ' + element.wordText + ' of ' + element.attacker.nickname + ' 오타임'); console.log('Attack word : ' + element.wordText + ' of ' + element.attacker.nickname + ' 오타임');
let victimData = let victimData =
{ {
roomNum: RoomData.roomNum, roomNum: RoomData.roomId,
victim: RoomData.myself, victim: RoomData.myself,
target: element.attacker.id target: element.attacker.id
} }
...@@ -417,8 +426,6 @@ WordSpace.setPlayerTyping = ...@@ -417,8 +426,6 @@ WordSpace.setPlayerTyping =
}, },
initiate: function(scene) initiate: function(scene)
{ {
WordSpace.gameTimer = new Phaser.Time.Clock(scene);
WordSpace.gameTimer.start();
this.text = scene.add.text(100,200,'현재 타수 : ' + WordSpace.playerTyping.toFixed(1)).setDepth(10).setColor('#000000'); this.text = scene.add.text(100,200,'현재 타수 : ' + WordSpace.playerTyping.toFixed(1)).setDepth(10).setColor('#000000');
} }
} }
...@@ -431,9 +438,10 @@ WordSpace.attack = function(wordText, grade) ...@@ -431,9 +438,10 @@ WordSpace.attack = function(wordText, grade)
console.log('attack ' + wordText + ', grade: ' + grade); console.log('attack ' + wordText + ', grade: ' + grade);
WordSpace.nameGroup.forEach(function(element) WordSpace.nameGroup.forEach(function(element)
{ {
//console.log(RoomData.myself);
let attackData = let attackData =
{ {
roomNum: RoomData.roomNum, roomNum: RoomData.roomId,
attacker: RoomData.myself, attacker: RoomData.myself,
target: element.ownerId, target: element.ownerId,
text: wordText, text: wordText,
...@@ -450,7 +458,7 @@ WordSpace.attack = function(wordText, grade) ...@@ -450,7 +458,7 @@ WordSpace.attack = function(wordText, grade)
WordSpace.attackGauge.resetValue(); WordSpace.attackGauge.resetValue();
WordSpace.setPlayerTyping.add(wordText); WordSpace.setPlayerTyping.add(wordText);
BackGround.myCharacter.play(WordSpace.pyeongminAnims[1]); BackGround.myCharacter.play(WordSpace.pyeongminAnims[Enums.characterAnim.throw]);
} }
else WordSpace.attackGauge.cutValue(0.3); else WordSpace.attackGauge.cutValue(0.3);
Input.maxInput = 6; Input.maxInput = 6;
...@@ -463,8 +471,10 @@ WordSpace.nameQueue = ...@@ -463,8 +471,10 @@ WordSpace.nameQueue =
queue: [], queue: [],
shuffle: function() shuffle: function()
{ {
let tempIdx, tempElement, tempLength; let tempIdx, tempElement, tempLength, tempQueue = [];
let tempQueue = RoomData.players; RoomData.players.forEach(function(element){
tempQueue.push(element.index)
})
for(tempLength = tempQueue.length; tempLength; tempLength -= 1) for(tempLength = tempQueue.length; tempLength; tempLength -= 1)
{ {
tempIdx = Math.floor(Math.random() * tempLength); tempIdx = Math.floor(Math.random() * tempLength);
...@@ -474,7 +484,7 @@ WordSpace.nameQueue = ...@@ -474,7 +484,7 @@ WordSpace.nameQueue =
} }
tempQueue.forEach(function(element) tempQueue.forEach(function(element)
{ {
if(element.id != PlayerData.idNum && element.isAlive) if(RoomData.players[element].id != PlayerData.id && RoomData.players[element].isAlive)
WordSpace.nameQueue.queue.push(element); WordSpace.nameQueue.queue.push(element);
}); });
}, },
...@@ -482,7 +492,8 @@ WordSpace.nameQueue = ...@@ -482,7 +492,8 @@ WordSpace.nameQueue =
{ {
let tempElement = WordSpace.nameQueue.queue.shift(); let tempElement = WordSpace.nameQueue.queue.shift();
if(WordSpace.nameQueue.queue.length <= RoomData.aliveCount) this.shuffle(); if(WordSpace.nameQueue.queue.length <= RoomData.aliveCount) this.shuffle();
return tempElement; if(!RoomData.players[tempElement].isAlive) return WordSpace.nameQueue.pop();
else return RoomData.players[tempElement];
}, },
initiate: function() initiate: function()
{ {
......
...@@ -23,13 +23,13 @@ var game = new Phaser.Game(config) ...@@ -23,13 +23,13 @@ var game = new Phaser.Game(config)
//테스트용이므로 차후 수정 요망 //테스트용이므로 차후 수정 요망
var PlayerData = PlayerData || {}; var PlayerData = PlayerData || {};
PlayerData.idNum = -1; //플레이어 아이디, 고유 번호 PlayerData.id = -1; //플레이어 아이디, 고유 번호
PlayerData.nickname = '홍길동'; //플레이어 닉네임 PlayerData.nickname = '홍길동'; //플레이어 닉네임
// 현재 들어가있는 Game Room의 정보 // 현재 들어가있는 Game Room의 정보
var RoomData = RoomData || {}; var RoomData = RoomData || {};
RoomData.roomNum = -1; RoomData.roomId = -1;
RoomData.myself = null; RoomData.myself = null;
RoomData.players = null; RoomData.players = null;
RoomData.aliveCount = -1; RoomData.aliveCount = -1;
\ No newline at end of file
...@@ -25,12 +25,11 @@ io.on('connection', function(socket) ...@@ -25,12 +25,11 @@ io.on('connection', function(socket)
{ {
id: GameServer.getPlayerNumber(), id: GameServer.getPlayerNumber(),
nickname: '게스트', nickname: '게스트',
socketId: socket,
currentRoom: null, currentRoom: null,
playingData: null, playingData: null,
isReceivable: false isReceivable: false
}; };
GameServer.currentPlayer.push(socket.playerData); GameServer.currentPlayer.push(socket);
console.log('['+socket.playerData.id+'] client request'); console.log('['+socket.playerData.id+'] client request');
socket.emit('setId', socket.emit('setId',
{ {
...@@ -44,14 +43,14 @@ io.on('connection', function(socket) ...@@ -44,14 +43,14 @@ io.on('connection', function(socket)
let isAlreadyHave = false; let isAlreadyHave = false;
GameServer.currentPlayer.forEach(function(element) GameServer.currentPlayer.forEach(function(element)
{ {
if (element.nickname === msg) isAlreadyHave = true; if (element.playerData.nickname === msg) isAlreadyHave = true;
}); });
if (isAlreadyHave) socket.emit('alert' ,'errNicknameOverlaped'); if (isAlreadyHave) socket.emit('alert' ,'errNicknameOverlaped');
else else
{ {
socket.playerData.nickname = msg; socket.playerData.nickname = msg;
console.log('['+socket.playerData.id+'] nickname set to ' + msg); console.log('['+socket.playerData.id+'] nickname set to ' + msg);
GameServer.enterEmptyRoom(socket.playerData); GameServer.enterEmptyRoom(socket);
} }
}); });
...@@ -76,15 +75,15 @@ io.on('connection', function(socket) ...@@ -76,15 +75,15 @@ io.on('connection', function(socket)
socket.playerData.currentRoom.aliveCount--; socket.playerData.currentRoom.aliveCount--;
if (socket.playerData.currentRoom.aliveCount === 0) if (socket.playerData.currentRoom.aliveCount === 0)
{ {
GameServer.startRoom(GameServer.findRoomIndex(socket.playerData.currentRoom.roomNum)); socket.playerData.currentRoom.startRoom();
} }
}); });
socket.on('attack', function(msg) socket.on('attack', function(msg)
{ {
GameServer.announceToTarget(GameServer.findRoomIndex(msg.roomNum), msg.target, 'attacked', msg); socket.playerData.currentRoom.announceToTarget(msg.target, 'attacked', msg);
//console.log('find ' + msg.target + ' by ' + msg.attacker.idNum + ' with ' + msg.text); //console.log('attack ' + msg.target + ' by ' + msg.attacker.id + ' with ' + msg.text);
let target = GameServer.findPlayer(msg.target); let target = GameServer.findPlayerSocket(msg.target);
if (target != null) if (target != null)
{ {
let dataToPush = let dataToPush =
...@@ -96,23 +95,23 @@ io.on('connection', function(socket) ...@@ -96,23 +95,23 @@ io.on('connection', function(socket)
time: Date.now() time: Date.now()
} }
if (target.playingData.lastAttacks.length < 5) target.playingData.lastAttacks.push(dataToPush); if (target.playerData.playingData.lastAttacks.length < 5) target.playerData.playingData.lastAttacks.push(dataToPush);
else else
{ {
target.playingData.lastAttacks.splice(0, 1); target.playerData.playingData.lastAttacks.splice(0, 1);
target.playingData.lastAttacks.push(dataToPush); target.playerData.playingData.lastAttacks.push(dataToPush);
} }
} }
}); });
socket.on('defeated', function() socket.on('defeated', function()
{ {
GameServer.playerDefeat(socket.playerData); socket.playerData.playingData.defeat();
}); });
socket.on('defenseFailed', function(msg) socket.on('defenseFailed', function(msg)
{ {
GameServer.announceToTarget(GameServer.findRoomIndex(msg.roomNum), msg.target, 'attackSucceed', msg); socket.playerData.currentRoom.announceToTarget(msg.target, 'attackSucceed', msg);
}); });
socket.on('disconnect', function(reason) socket.on('disconnect', function(reason)
...@@ -128,31 +127,38 @@ io.on('connection', function(socket) ...@@ -128,31 +127,38 @@ io.on('connection', function(socket)
console.log('['+ data.id +'] client disconnected, reason: ' + reason); console.log('['+ data.id +'] client disconnected, reason: ' + reason);
let idxToDel = GameServer.currentPlayer.findIndex(function(element) let idxToDel = GameServer.currentPlayer.findIndex(function(element)
{ {
return element.id === data.id; return element.playerData.id === data.id;
}); });
if (idxToDel != -1) if (idxToDel != -1)
{ {
GameServer.currentPlayer.splice(idxToDel, 1);
// 룸에서도 제거 // 룸에서도 제거
if (data.currentRoom != null) if (data.currentRoom != null)
{ {
if (data.currentRoom.currentPhase === GameServer.Phase.READY || data.currentRoom.currentPhase === GameServer.Phase.COUNT) if (data.currentRoom.currentPhase === GameServer.Phase.READY || data.currentRoom.currentPhase === GameServer.Phase.COUNT)
{ {
data.currentRoom.currentPlayer[data.playingData.index] = null; data.currentRoom.exitRoom(data.id);
data.currentRoom.currentSocket[data.playingData.index] = null; if (data.currentRoom.aliveCount < data.currentRoom.startCount)
data.currentRoom.aliveCount--; {
if (data.currentRoom.aliveCount < GameServer.startCount) data.currentRoom.announceToRoom('setRoomCount',
{ {
GameServer.announceToRoom(GameServer.findRoomIndex(data.currentRoom.roomNum), 'setCount', {isEnable: false, endTime: 0}); isEnable: false, endTime: 0, playerCount: data.currentRoom.currentPlayer.length,
isEnter: false, player: data.playingData
});
data.currentRoom.currentPhase = GameServer.Phase.READY; data.currentRoom.currentPhase = GameServer.Phase.READY;
} }
else data.currentRoom.announceToRoom('setRoomCount',
{
isEnable: true, endTime: data.currentRoom.endTime, playerCount: data.currentRoom.currentPlayer.length,
isEnter: false, player: data.playingData
});
} }
else if (data.playingData.isAlive) else if (data.playingData.isAlive)
{ {
GameServer.playerDefeat(socket.playerData); data.playingData.defeat();
GameServer.announceToRoom(GameServer.findRoomIndex(data.currentRoom.roomNum), 'userDisconnect', data.playingData); data.currentRoom.announceToRoom('userDisconnect', data.playingData);
} }
} }
GameServer.currentPlayer.splice(idxToDel, 1);
} }
console.log('['+ data.id +'] disconnect complete'); console.log('['+ data.id +'] disconnect complete');
} }
......
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