Commit 52234806 authored by 18신대성's avatar 18신대성

Merge branch 'server' into release

parents dfc0f826 14a0c0c2
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -3,20 +3,30 @@ ...@@ -3,20 +3,30 @@
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<script src="/socket.io/socket.io.js"></script> <script src="/socket.io/socket.io.js"></script>
<script src="js/phaser.js"></script> <script src="/js/phaser.js"></script>
<script src="js/ScenesData.js"></script> <script src="/js/ScenesData.js"></script>
<script src="js/Background.js"></script> <script src="/js/Background.js"></script>
<script src="js/Input.js"></script> <script src="/js/Input.js"></script>
<script src="js/WordSpace.js"></script> <script src="/js/WordSpace.js"></script>
<script src="js/GameCycle.js"></script> <script src="/js/GameCycle.js"></script>
<script src="js/WordObject.js"></script> <script src="/js/WordObject.js"></script>
<script src="js/WordReader.js"></script> <script src="/js/WordReader.js"></script>
<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> <script src="/js/Enums.js"></script>
<script src="js/ResourceLoader.js"></script> <script src="/js/ResourceLoader.js"></script>
<script src="js/UIObject.js"></script> <script src="/js/UIObject.js"></script>
<style media='screen' type='text/css'>
@font-face {
font-family: sejongFont;
src: url('assets/font/EBS주시경B.ttf');
font-weight:400;
font-weight:normal;
}
</style>
<div style="font-family:sejongFont; position:absolute; left:-1000px; visibility:hidden;">.</div>
<style> <style>
img { position: relative; width: 100%; height: 100%; z-index: 0;} img { position: relative; width: 100%; height: 100%; z-index: 0;}
...@@ -25,13 +35,13 @@ ...@@ -25,13 +35,13 @@
</head> </head>
<body> <body>
<div id="mainTitle"> <div id="mainTitle">
<img id="titleImg" src="assets/image/background/title.png" alt="title"> <img id="titleImg" src="/assets/image/background/title.png" alt="title">
<div id="dvLogin"> <div id="dvLogin">
<input id="userEmail" type="email" placeholder="email" style="width: 100%; height: 10%;"></br> <input id="userEmail" type="email" placeholder="email" style="width: 100%; height: 10%;"></br>
<input id="userPassword" type="password" placeholder="password" maxlength="17" style="width: 100%; height: 10%;"></br> <input id="userPassword" type="password" placeholder="password" maxlength="17" style="width: 100%; height: 10%;"></br>
<button id="joinBtn" style="width: 100%; height: 10%;">이메일로 가입하기</button></br> <button id="joinBtn" style="width: 100%; height: 10%;">이메일로 가입하기</button></br>
<button id="emailBtn" style="width: 100%; height: 10%;">이메일로 로그인</button></br> <button id="emailBtn" style="width: 100%; height: 10%;">이메일로 로그인</button></br>
<button id="googleBtn" style="width: 10%; height: 10%;"><img src="assets/title/googleBtn.png" style="object-fit: contain"></button></br> <button id="googleBtn" style="width: 10%; height: 10%;"><img src="/assets/title/googleBtn.png" style="object-fit: contain"></button></br>
</div> </div>
</div> </div>
...@@ -54,8 +64,8 @@ ...@@ -54,8 +64,8 @@
firebase.initializeApp(firebaseConfig); firebase.initializeApp(firebaseConfig);
</script> </script>
<script src="js/Client.js"></script> <script src="/js/Client.js"></script>
<script src="js/Main.js"></script> <script src="/js/main.js"></script>
<script src="js/FirebaseClient.js"></script> <script src="/js/FirebaseClient.js"></script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -3,7 +3,7 @@ var Audio = Audio || {} ...@@ -3,7 +3,7 @@ var Audio = Audio || {}
var bgm; var bgm;
Audio.loadSound = function(scene) Audio.loadSound = function(scene)
{ {
scene.load.audio('login', 'assets/sound/login.ogg'); scene.load.audio('login', 'assets/sound/newLogin.ogg');
scene.load.audio('startGame', 'assets/sound/startGame.ogg'); scene.load.audio('startGame', 'assets/sound/startGame.ogg');
scene.load.audio('attack', 'assets/sound/attackShort.ogg'); scene.load.audio('attack', 'assets/sound/attackShort.ogg');
scene.load.audio('inRoom', 'assets/sound/roomBGM.ogg'); scene.load.audio('inRoom', 'assets/sound/roomBGM.ogg');
......
...@@ -13,17 +13,17 @@ BackGround.otherCharacters = []; ...@@ -13,17 +13,17 @@ BackGround.otherCharacters = [];
BackGround.drawCharacter = function(scene) BackGround.drawCharacter = function(scene)
{ {
RoomData.myself.playerImage = scene.add.sprite(game.config.width / 2, game.config.height * 41 / 48, 'pyeongminWrite').setScale(0.45).setDepth(2); RoomData.myself.playerImage = scene.add.sprite(game.config.width / 2, game.config.height * 41 / 48, 'pyeongminWrite').setScale(0.45).setDepth(5);
RoomData.myself.position = new Phaser.Math.Vector2(RoomData.myself.playerImage.x, RoomData.myself.playerImage.y); RoomData.myself.position = new Phaser.Math.Vector2(RoomData.myself.playerImage.x, RoomData.myself.playerImage.y);
BackGround.characterPos = BackGround.characterPos.sort(function(){return 0.5-Math.random()}); BackGround.characterPos = BackGround.characterPos.sort(function(){return 0.5-Math.random()});
RoomData.players.forEach(function(element){ RoomData.players.forEach(function(element){
if(element.id != RoomData.myself.id) if(element.id != RoomData.myself.id)
{ {
element.position = BackGround.characterPos.pop(); element.position = BackGround.characterPos.pop();
element.playerImage = scene.add.sprite(element.position.x, element.position.y, 'pyeongminWrite').setScale(0.315).setDepth(1); element.playerImage = scene.add.sprite(element.position.x, element.position.y, 'pyeongminWrite').setScale(0.315).setDepth(5);
element.playerImage.flipX = element.position.x < game.config.width / 2 ? true : false; element.playerImage.flipX = element.position.x < game.config.width / 2 ? true : false;
element.nicknameText = scene.add.text(element.position.x, element.position.y - 90, element.nickname) element.nicknameText = scene.add.text(element.position.x, element.position.y - 90, element.nickname)
.setOrigin(0.5,0.5).setColor('#000000').setPadding(0.5,0.5,0.5,0.5).setDepth(1); .setOrigin(0.5,0.5).setColor('#000000').setPadding(0.5,0.5,0.5,0.5).setDepth(5.1);
6 } 6 }
}); });
} }
...@@ -32,7 +32,7 @@ BackGround.gameBackground = null; ...@@ -32,7 +32,7 @@ BackGround.gameBackground = null;
BackGround.drawBrain = function(scene) BackGround.drawBrain = function(scene)
{ {
BackGround.gameBackground = scene.add.sprite(game.config.width / 2, game.config.height / 2, 'gameBackground').setDisplaySize(game.config.width, game.config.height).setDepth(1); BackGround.gameBackground = scene.add.sprite(game.config.width / 2, game.config.height / 2, 'gameBackground').setDisplaySize(game.config.width, game.config.height).setDepth(3.1);
} }
BackGround.drawBackground = function(scene) BackGround.drawBackground = function(scene)
...@@ -42,10 +42,10 @@ BackGround.drawBackground = function(scene) ...@@ -42,10 +42,10 @@ BackGround.drawBackground = function(scene)
BackGround.drawMenu = function(scene) BackGround.drawMenu = function(scene)
{ {
scene.add.sprite(game.config.width / 2, game.config.height / 2, 'menuBackground').setDisplaySize(game.config.width, game.config.height).setDepth(1); scene.add.sprite(game.config.width / 2, game.config.height / 2, 'menuBackground').setDisplaySize(game.config.width, game.config.height).setDepth(3);
} }
BackGround.drawRoom = function(scene) BackGround.drawRoom = function(scene)
{ {
scene.add.sprite(game.config.width / 2, game.config.height / 2, 'roomBackground').setDisplaySize(game.config.width, game.config.height).setDepth(1); scene.add.sprite(game.config.width / 2, game.config.height / 2, 'roomBackground').setDisplaySize(game.config.width, game.config.height).setDepth(5.2);
} }
\ No newline at end of file
This diff is collapsed.
function FirebaseClient() function FirebaseClient()
{ {
this.init(); this.init();
this.initEvent(); this.initEvent();
this.isGameStarted = false;
} }
FirebaseClient.prototype.init = function() FirebaseClient.prototype.init = function()
...@@ -69,6 +70,7 @@ FirebaseClient.prototype.setLogin = function() ...@@ -69,6 +70,7 @@ FirebaseClient.prototype.setLogin = function()
.then(function() .then(function()
{ {
game = new Phaser.Game(config); game = new Phaser.Game(config);
fbClient.isGameStarted = true;
}); });
document.getElementById('mainTitle').style.display = 'none'; document.getElementById('mainTitle').style.display = 'none';
...@@ -77,7 +79,10 @@ FirebaseClient.prototype.setLogin = function() ...@@ -77,7 +79,10 @@ FirebaseClient.prototype.setLogin = function()
FirebaseClient.prototype.setLogOut = function() FirebaseClient.prototype.setLogOut = function()
{ {
if (game != null) game.destroy(true);
this.isGameStarted = false;
document.getElementById('mainTitle').style.display = 'block';
document.getElementById('titleImg').style.display = 'block';
} }
FirebaseClient.prototype.onEmailBtnClick = function() FirebaseClient.prototype.onEmailBtnClick = function()
...@@ -225,6 +230,9 @@ FirebaseClient.prototype.updateUserData = function(key, valueChanged, replace = ...@@ -225,6 +230,9 @@ FirebaseClient.prototype.updateUserData = function(key, valueChanged, replace =
if (beforeData.item != null) beforeData.item.push(valueChanged); if (beforeData.item != null) beforeData.item.push(valueChanged);
else beforeData.item = [valueChanged]; else beforeData.item = [valueChanged];
break; break;
case 'killCount':
beforeData.killCount = replace ? (valueChanged) : (beforeData.killCount + valueChanged);
break;
default: default:
console.log('[ERROR] database has no key for ' + key); console.log('[ERROR] database has no key for ' + key);
break; break;
...@@ -235,10 +243,22 @@ FirebaseClient.prototype.updateUserData = function(key, valueChanged, replace = ...@@ -235,10 +243,22 @@ FirebaseClient.prototype.updateUserData = function(key, valueChanged, replace =
document.addEventListener('DOMContentLoaded', function() document.addEventListener('DOMContentLoaded', function()
{ {
window.fbClient = new FirebaseClient(); window.fbClient = new FirebaseClient();
document.onkeydown = function(e)
{
if (!fbClient.isGameStarted && e.keyCode === 13)
{
fbClient.onEmailBtnClick();
}
}
console.log('done load'); console.log('done load');
}); });
document.onkeydown = function(e)
{
if (fbClient.isGameStarted && e.keyCode === 27) fbClient.logOut();
}
class UserData class UserData
{ {
constructor() constructor()
...@@ -246,13 +266,11 @@ class UserData ...@@ -246,13 +266,11 @@ class UserData
this.userName = prompt("유저의 이름을 입력해주세요."); this.userName = prompt("유저의 이름을 입력해주세요.");
this.exp = 0; this.exp = 0;
this.rank = -1; this.rank = -1;
this.hopae = this.hopae = [];
[
{name: prompt("첫번째 호패의 닉네임을 입력해주세요.\n(반드시 한글만 사용해주세요 띄어쓰기도 금지)"), type: 'wood'}
];
this.recentHopae = null; this.recentHopae = null;
this.title = []; this.title = [];
this.money = 0; this.money = 0;
this.item = []; this.item = [];
this.killCount = 0;
} }
} }
\ No newline at end of file
...@@ -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});
...@@ -38,33 +36,4 @@ class Cycle //앞으로 cycle은 이 클래스를 사용해서 구현할 것 ...@@ -38,33 +36,4 @@ class Cycle //앞으로 cycle은 이 클래스를 사용해서 구현할 것
if (this.currentCycle != null) this.currentCycle = this.currentCycle.reset(option); if (this.currentCycle != null) this.currentCycle = this.currentCycle.reset(option);
else this.currentCycle = scene.time.addEvent(option); else this.currentCycle = scene.time.addEvent(option);
} }
} }
\ No newline at end of file
//단어 생성 사이클
WordSpace.wordCycle = new Cycle(function()
{
WordSpace.genWordByProb(this);
});
//게임 오버 사이클
WordSpace.gameOverCycle = new Cycle(gameOver);
//호패 생성 사이클
WordSpace.nameCycle = new Cycle(function()
{
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 갱신용 사이클
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 @@ Input.attackOption = { ...@@ -21,7 +21,7 @@ Input.attackOption = {
Input.gameSceneEnterReaction = function() Input.gameSceneEnterReaction = function()
{ {
if (!Input.isEntered) if (RoomData.myself.isAlive && !Input.isEntered)
{ {
if (Input.attackMode) WordSpace.attack(Input.removeConVow(Input.finalInput), Input.attackOption.wordGrade); if (Input.attackMode) WordSpace.attack(Input.removeConVow(Input.finalInput), Input.attackOption.wordGrade);
else WordSpace.findWord(Input.finalInput); else WordSpace.findWord(Input.finalInput);
...@@ -384,7 +384,7 @@ Input.inputField = ...@@ -384,7 +384,7 @@ Input.inputField =
Input.pushInput = function(inputKey) Input.pushInput = function(inputKey)
{ {
if (this.justPressed != inputKey) if ((ScenesData.currentScene != 'gameScene' || RoomData.myself.isAlive) && this.justPressed != inputKey)
{ {
this.justPressed = inputKey; this.justPressed = inputKey;
let output; let output;
......
...@@ -2,7 +2,7 @@ var ResourceLoader = ResourceLoader || {}; ...@@ -2,7 +2,7 @@ var ResourceLoader = ResourceLoader || {};
ResourceLoader.loadBackGround = function(scene) ResourceLoader.loadBackGround = function(scene)
{ {
scene.load.image('brain', 'assets/image/background/brain.png'); scene.load.image('weightWarning', 'assets/image/background/weightWarning.png');
scene.load.image('baseBackground', 'assets/image/background/yellowBack.png'); scene.load.image('baseBackground', 'assets/image/background/yellowBack.png');
scene.load.image('gameBackground', 'assets/image/background/background_brain.png'); scene.load.image('gameBackground', 'assets/image/background/background_brain.png');
scene.load.image('menuBackground', 'assets/placeholder/menuBackground.png'); scene.load.image('menuBackground', 'assets/placeholder/menuBackground.png');
...@@ -42,7 +42,9 @@ ResourceLoader.loadImage = function(scene) ...@@ -42,7 +42,9 @@ ResourceLoader.loadImage = function(scene)
scene.load.image('pyeongminStand', 'assets/image/character/pyeongmin/pyeong_stand.png'); scene.load.image('pyeongminStand', 'assets/image/character/pyeongmin/pyeong_stand.png');
scene.load.spritesheet('wordBreak', 'assets/image/word/wordbreak.png', { frameWidth: 180, frameHeight: 180 }); scene.load.spritesheet('wordBreak', 'assets/image/word/wordbreak.png', { frameWidth: 180, frameHeight: 180 });
scene.load.image('phaseChangeBgr', 'assets/placeholder/phaseChange.png'); scene.load.spritesheet('phase1', 'assets/image/etc/scroll/startPhase/startPhase.png', { frameWidth: 280, frameHeight: 920 });
scene.load.spritesheet('phase2', 'assets/image/etc/scroll/bonPhase/bonPhase.png', { frameWidth: 280, frameHeight: 920 });
scene.load.spritesheet('phase3', 'assets/image/etc/scroll/poongPhase/poongPhase.png', { frameWidth: 280, frameHeight: 920 });
scene.load.image('attackPaper', 'assets/image/etc/paper_crumbled.png'); scene.load.image('attackPaper', 'assets/image/etc/paper_crumbled.png');
scene.load.image('panel', 'assets/placeholder/panel.png'); scene.load.image('panel', 'assets/placeholder/panel.png');
scene.load.image('button', 'assets/placeholder/button.png'); scene.load.image('button', 'assets/placeholder/button.png');
...@@ -55,56 +57,66 @@ ResourceLoader.loadAnimation = function(scene) ...@@ -55,56 +57,66 @@ ResourceLoader.loadAnimation = function(scene)
key: 'wordBreakAnim', key: 'wordBreakAnim',
frames: scene.anims.generateFrameNumbers('wordBreak'), frames: scene.anims.generateFrameNumbers('wordBreak'),
frameRate: 10, frameRate: 10,
repeat: 0, repeat: 0
hideOnComplete: false });
scene.anims.create({
key: 'phase1Anim',
frames: scene.anims.generateFrameNumbers('phase1'),
frameRate: 20,
repeat: 0
});
scene.anims.create({
key: 'phase2Anim',
frames: scene.anims.generateFrameNumbers('phase2'),
frameRate: 20,
repeat: 0
});
scene.anims.create({
key: 'phase3Anim',
frames: scene.anims.generateFrameNumbers('phase3'),
frameRate: 20,
repeat: 0
}); });
WordSpace.pyeongminAnims[Enums.characterAnim.sit] = scene.anims.create({ WordSpace.pyeongminAnims[Enums.characterAnim.sit] = scene.anims.create({
key: 'pyeongminSitAnim', key: 'pyeongminSitAnim',
frames: scene.anims.generateFrameNumbers('pyeongminSit'), frames: scene.anims.generateFrameNumbers('pyeongminSit'),
frameRate: 10, frameRate: 10,
repeat: 0, repeat: 0
hideOnComplete: false
}); });
WordSpace.pyeongminAnims[Enums.characterAnim.write] = scene.anims.create({ WordSpace.pyeongminAnims[Enums.characterAnim.write] = scene.anims.create({
key: 'pyeongminWriteAnim', key: 'pyeongminWriteAnim',
frames: scene.anims.generateFrameNumbers('pyeongminWrite'), frames: scene.anims.generateFrameNumbers('pyeongminWrite'),
frameRate: 10, frameRate: 10,
repeat: 0, repeat: 0
hideOnComplete: false
}); });
WordSpace.pyeongminAnims[Enums.characterAnim.notBurning] = scene.anims.create({ WordSpace.pyeongminAnims[Enums.characterAnim.notBurning] = scene.anims.create({
key: 'pyeongminnotBurningAnim', key: 'pyeongminnotBurningAnim',
frames: scene.anims.generateFrameNumbers('pyeongminWrite'), frames: scene.anims.generateFrameNumbers('pyeongminWrite'),
frameRate: 10, frameRate: 10,
repeat: -1, repeat: -1
hideOnComplete: false
}); });
WordSpace.pyeongminAnims[Enums.characterAnim.smallBurning] = scene.anims.create({ WordSpace.pyeongminAnims[Enums.characterAnim.smallBurning] = scene.anims.create({
key: 'pyeongminsmallBurningAnim', key: 'pyeongminsmallBurningAnim',
frames: scene.anims.generateFrameNumbers('pyeongminBurningSmall'), frames: scene.anims.generateFrameNumbers('pyeongminBurningSmall'),
frameRate: 10, frameRate: 10,
repeat: -1, repeat: -1
hideOnComplete: false
}); });
WordSpace.pyeongminAnims[Enums.characterAnim.bigBurning] = scene.anims.create({ WordSpace.pyeongminAnims[Enums.characterAnim.bigBurning] = scene.anims.create({
key: 'pyeongminbigBurningAnim', key: 'pyeongminbigBurningAnim',
frames: scene.anims.generateFrameNumbers('pyeongminBurningBig'), frames: scene.anims.generateFrameNumbers('pyeongminBurningBig'),
frameRate: 10, frameRate: 10,
repeat: -1, repeat: -1
hideOnComplete: false
}); });
WordSpace.pyeongminAnims[Enums.characterAnim.throw] = scene.anims.create({ WordSpace.pyeongminAnims[Enums.characterAnim.throw] = scene.anims.create({
key: 'pyeongminThrowAnim', key: 'pyeongminThrowAnim',
frames: scene.anims.generateFrameNumbers('pyeongminThrow'), frames: scene.anims.generateFrameNumbers('pyeongminThrow'),
frameRate: 10, frameRate: 10,
repeat: 0, repeat: 0
hideOnComplete: false
}); });
WordSpace.pyeongminAnims[Enums.characterAnim.gameOver] = scene.anims.create({ WordSpace.pyeongminAnims[Enums.characterAnim.gameOver] = scene.anims.create({
key: 'pyeongminGameOverAnim', key: 'pyeongminGameOverAnim',
frames: scene.anims.generateFrameNumbers('pyeongminGameOver'), frames: scene.anims.generateFrameNumbers('pyeongminGameOver'),
frameRate: 10, frameRate: 10,
repeat: 0, repeat: 0
hideOnComplete: false
}); });
} }
\ No newline at end of file
This diff is collapsed.
...@@ -10,7 +10,8 @@ UIObject.createLabel = function (scene, x, y, depth, image, size, align, text = ...@@ -10,7 +10,8 @@ UIObject.createLabel = function (scene, x, y, depth, image, size, align, text =
background: scene.add.sprite(x, y, image).setScale(size).setOrigin(0.5, 0.5).setDepth(depth), background: scene.add.sprite(x, y, image).setScale(size).setOrigin(0.5, 0.5).setDepth(depth),
text: scene.add.text(x, y, text, { text: scene.add.text(x, y, text, {
font: textSize + 'pt 궁서' font: textSize + 'pt sejongFont',
align: 'center'
}).setDepth(depth).setOrigin(textOriginX, textOriginY).setColor(textColor), }).setDepth(depth).setOrigin(textOriginX, textOriginY).setColor(textColor),
space: { space: {
......
...@@ -20,7 +20,7 @@ class WordObject ...@@ -20,7 +20,7 @@ class WordObject
var random = WordSpace.getSpawnPoint(lenRate); var random = WordSpace.getSpawnPoint(lenRate);
this.physicsObj = scene.physics.add.sprite(random.x, random.y, spriteName).setMass(this.wordWeight * 10).setScale(this.scale) this.physicsObj = scene.physics.add.sprite(random.x, random.y, spriteName).setMass(this.wordWeight * 10).setScale(this.scale)
.setFrictionX(0).setFrictionY(0).setBounce(0.5); .setFrictionX(0).setFrictionY(0).setBounce(0.5).setDepth(1);
this.physicsObj.wordCollider = null; this.physicsObj.wordCollider = null;
let dist = Phaser.Math.Distance.Between(this.physicsObj.x, this.physicsObj.y, WordSpace.gravityPoint.x, WordSpace.gravityPoint.y); let dist = Phaser.Math.Distance.Between(this.physicsObj.x, this.physicsObj.y, WordSpace.gravityPoint.x, WordSpace.gravityPoint.y);
let angle = Phaser.Math.Angle.Between(this.physicsObj.x, this.physicsObj.y, WordSpace.gravityPoint.x, WordSpace.gravityPoint.y); let angle = Phaser.Math.Angle.Between(this.physicsObj.x, this.physicsObj.y, WordSpace.gravityPoint.x, WordSpace.gravityPoint.y);
...@@ -31,11 +31,10 @@ class WordObject ...@@ -31,11 +31,10 @@ class WordObject
this.wordObj = scene.add.text(random.x, random.y, this.wordText, this.wordObj = scene.add.text(random.x, random.y, this.wordText,
{ {
fontSize: (this.scale * this.fontScale) +'pt', font: (this.scale * this.fontScale) +'pt sejongFont',
fontFamily: '"궁서", 궁서체, serif',
//fontStyle: (this.wordWeight > 5 ? 'bold' : '') //fontStyle: (this.wordWeight > 5 ? 'bold' : '')
}); });
this.wordObj.setColor(textColor).setOrigin(0.5,0.5); this.wordObj.setColor(textColor).setOrigin(0.5,0.5).setDepth(1);
this.createdTime = WordSpace.gameTimer.now; this.createdTime = WordSpace.gameTimer.now;
WordSpace.totalWeight += this.wordWeight; WordSpace.totalWeight += this.wordWeight;
WordSpace.totalWordNum += 1; WordSpace.totalWordNum += 1;
...@@ -54,7 +53,7 @@ class WordObject ...@@ -54,7 +53,7 @@ class WordObject
const forceIdx = WordSpace.wordForcedGroup.findIndex(function(item) {return this.isEqualObject(item.generationCode)}, this); const forceIdx = WordSpace.wordForcedGroup.findIndex(function(item) {return this.isEqualObject(item.generationCode)}, this);
if (forceIdx > -1) WordSpace.wordForcedGroup.splice(forceIdx, 1); if (forceIdx > -1) WordSpace.wordForcedGroup.splice(forceIdx, 1);
WordSpace.wordPhysicsGroup.remove(this.physicsObj); WordSpace.wordPhysicsGroup.remove(this.physicsObj);
let breakAnim = ScenesData.gameScene.add.sprite(this.physicsObj.x, this.physicsObj.y, 'wordBreak').setScale(0.5).setDepth(3).play('wordBreakAnim'); let breakAnim = ScenesData.gameScene.add.sprite(this.physicsObj.x, this.physicsObj.y, 'wordBreak').setScale(0.5).setDepth(1.1).play('wordBreakAnim');
setTimeout(function() { setTimeout(function() {
breakAnim.destroy(); breakAnim.destroy();
}, 200); }, 200);
...@@ -210,6 +209,7 @@ class AttackWord extends WordObject ...@@ -210,6 +209,7 @@ class AttackWord extends WordObject
attackerId: RoomData.myself.id, attackerId: RoomData.myself.id,
victimId: this.attacker.id, victimId: this.attacker.id,
text: this.wordText, text: this.wordText,
multiple: 1,
grade: Math.min(3, this.wordGrade + 1), grade: Math.min(3, this.wordGrade + 1),
attackOption: { attackOption: {
isStrong: false, isStrong: false,
...@@ -236,6 +236,7 @@ class NameWord extends WordObject ...@@ -236,6 +236,7 @@ class NameWord extends WordObject
this.wordWeight = 2; this.wordWeight = 2;
this.isStrong = _isStrong; this.isStrong = _isStrong;
this.isActive = true; this.isActive = true;
if(_isStrong) RoomData.myself.earnedStrongHopae++;
//console.log('Name : ' + player.nickname + ', Strong : ' + this.isStrong + ', Weight : ' + this.wordWeight); //console.log('Name : ' + player.nickname + ', Strong : ' + this.isStrong + ', Weight : ' + this.wordWeight);
} }
instantiate(scene, lenRate) instantiate(scene, lenRate)
...@@ -259,8 +260,7 @@ class NameWord extends WordObject ...@@ -259,8 +260,7 @@ class NameWord extends WordObject
{ {
this.physicsObj.setScale(this.follower.t < 0.2 ? 0.2 : this.follower.t * this.scale); this.physicsObj.setScale(this.follower.t < 0.2 ? 0.2 : this.follower.t * this.scale);
this.wordObj.setFont({ this.wordObj.setFont({
fontSize: (this.follower.t < 0.2 ? 0.05 : this.follower.t * this.scale * this.fontScale) +'pt', font: (this.follower.t < 0.2 ? 0.05 : this.follower.t * this.scale * this.fontScale) +'pt sejongFont',
fontFamily: '"궁서", 궁서체, serif',
fontStyle: (this.wordWeight > 5 ? 'bold' : '') fontStyle: (this.wordWeight > 5 ? 'bold' : '')
}); });
} }
...@@ -283,8 +283,8 @@ class NameWord extends WordObject ...@@ -283,8 +283,8 @@ class NameWord extends WordObject
if(!this.isStrong) WordSpace.attackGauge.add(this.wordTyping * 0.1); if(!this.isStrong) WordSpace.attackGauge.add(this.wordTyping * 0.1);
WordSpace.nameGroup.push(this); WordSpace.nameGroup.push(this);
this.isActive = false; this.isActive = false;
this.physicsObj.setVelocity(0, 0).setDepth(20); this.physicsObj.setVelocity(0, 0).setDepth(10.2);
this.wordObj.setPosition(this.physicsObj.x, this.physicsObj.y).setDepth(20); this.wordObj.setPosition(this.physicsObj.x, this.physicsObj.y).setDepth(10.2);
this.follower = { t: 0, vec: new Phaser.Math.Vector2() }; this.follower = { t: 0, vec: new Phaser.Math.Vector2() };
this.path = new Phaser.Curves.Spline([ this.path = new Phaser.Curves.Spline([
this.physicsObj.x, this.physicsObj.y, this.physicsObj.x, this.physicsObj.y,
...@@ -361,8 +361,10 @@ class ItemWord extends WordObject ...@@ -361,8 +361,10 @@ class ItemWord extends WordObject
{ {
case Enums.item.invincible: case Enums.item.invincible:
WordSpace.isInvincible = true; WordSpace.isInvincible = true;
socket.emit('itemStart', {id: RoomData.myself.id, itemType: Enums.item.invincible});
setTimeout(() => { setTimeout(() => {
WordSpace.isInvincible = false; WordSpace.isInvincible = false;
socket.emit('itemEnd', {id: RoomData.myself.id, itemType: Enums.item.invincible});
}, 5000); }, 5000);
break; break;
case Enums.item.nameList: case Enums.item.nameList:
......
var WordSpace = WordSpace || {}; var WordSpace = WordSpace || {};
// for test
WordSpace.weightTextObjForTest = null;
WordSpace.nameWordTextForTest = null; WordSpace.nameWordTextForTest = null;
WordSpace.killLogTextForTest = null;
WordSpace.killLogForTest = '';
WordSpace.nextWordCode = 0; WordSpace.nextWordCode = 0;
WordSpace.totalWeight = 0; //현재 단어 무게 총합 WordSpace.totalWeight = 0; //현재 단어 무게 총합
WordSpace.totalWordNum = 0; WordSpace.totalWordNum = 0;
WordSpace.brainCapacity = 200; //수용 가능한 단어 무게 최대치 WordSpace.brainCapacity = 200; //수용 가능한 단어 무게 최대치
WordSpace.gameTimer = null; //현재 게임 플레이 시간 타이머 WordSpace.gameTimer = null; //현재 게임 플레이 시간 타이머
WordSpace.isGameOver = false;
WordSpace.isTimerOn = false; WordSpace.isTimerOn = false;
WordSpace.isInvincible = false; WordSpace.isInvincible = false;
WordSpace.pyeongminAnims = []; WordSpace.pyeongminAnims = [];
WordSpace.wordGroup = []; WordSpace.wordGroup = [];
WordSpace.nameGroup = []; WordSpace.nameGroup = [];
WordSpace.attackPaperGroup = []; WordSpace.attackPaperGroup = null;
WordSpace.wordForcedGroup = []; WordSpace.wordForcedGroup = [];
WordSpace.wordPhysicsGroup = null; WordSpace.wordPhysicsGroup = null;
WordSpace.lastAttackGroup = [];
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};
...@@ -65,34 +63,34 @@ WordSpace.spaceInitiate = function(scene) ...@@ -65,34 +63,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);
...@@ -112,7 +110,7 @@ WordSpace.attackGauge = ...@@ -112,7 +110,7 @@ WordSpace.attackGauge =
generate: function(scene) generate: function(scene)
{ {
//console.log("created"); //console.log("created");
this.rectUI = scene.add.rectangle(game.config.width / 2, game.config.height * 5 / 6, 0, game.config.height * 11 / 720).setDepth(11); this.rectUI = scene.add.rectangle(game.config.width / 2, game.config.height * 5 / 6, 0, game.config.height * 11 / 720).setDepth(10.1);
}, },
add: function(plus) add: function(plus)
{ {
...@@ -143,7 +141,7 @@ WordSpace.attackGauge = ...@@ -143,7 +141,7 @@ WordSpace.attackGauge =
}; };
this.currentCycle = scene.time.addEvent(option); this.currentCycle = scene.time.addEvent(option);
this.text = scene.add.text(100,100,'게이지: ' + this.value.toFixed(1)).setDepth(10).setColor('#000000'); this.text = scene.add.text(100,100,'게이지: ' + this.value.toFixed(1)).setDepth(9.9).setColor('#000000');
//this.rectUI.setColor(this.gradeColor[0]); //this.rectUI.setColor(this.gradeColor[0]);
}, },
pauseCycle: function(bool) {this.currentCycle.paused = bool;}, pauseCycle: function(bool) {this.currentCycle.paused = bool;},
...@@ -222,10 +220,6 @@ function gameOver() ...@@ -222,10 +220,6 @@ function gameOver()
socket.emit('defeated'); socket.emit('defeated');
console.log('defeat'); console.log('defeat');
ScenesData.gameScene.add.text(game.config.width / 2, game.config.height / 2, '패배', {fontSize: '30pt'})
.setPadding(5,5,5,5).setOrigin(0.5, 0.5).setDepth(10)
.setColor('#000000').setBackgroundColor('#ffffff');
//alert('defeat');
} }
//게임 오버 판정을 위한 타이머 //게임 오버 판정을 위한 타이머
...@@ -347,7 +341,12 @@ WordSpace.setPlayerTyping = ...@@ -347,7 +341,12 @@ WordSpace.setPlayerTyping =
}, },
initiate: function(scene) initiate: function(scene)
{ {
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(9.9).setColor('#000000');
},
reset: function()
{
this.totalTyping = 0;
this.writeWord = false;
} }
} }
...@@ -416,14 +415,17 @@ WordSpace.attack = function(wordText, grade) ...@@ -416,14 +415,17 @@ WordSpace.attack = function(wordText, grade)
WordSpace.makeAttackPaper = function(scene, attackFrom, attackTo, multiple) WordSpace.makeAttackPaper = function(scene, attackFrom, attackTo, multiple)
{ {
var attackPaper = scene.add.sprite(attackFrom.x, attackFrom.y, 'attackPaper').setScale(0.5 * multiple).setDepth(3); let size = attackTo == RoomData.myself.position ? 1 : 0.7;
let xOffset = attackTo != RoomData.myself.position && attackTo.x < game.config.width / 2 ? -1 : 1;
var attackPaper = scene.add.sprite(attackFrom.x, attackFrom.y, 'attackPaper').setScale(0.5 * multiple).setDepth(5.2);
attackPaper.mask = new Phaser.Display.Masks.BitmapMask(scene, BackGround.gameBackground); attackPaper.mask = new Phaser.Display.Masks.BitmapMask(scene, BackGround.gameBackground);
attackPaper.throwTarget = attackTo; attackPaper.throwTarget = attackTo;
attackPaper.follower = { t: 0, vec: new Phaser.Math.Vector2() }; attackPaper.follower = { t: 0, vec: new Phaser.Math.Vector2() };
attackPaper.path = new Phaser.Curves.Spline([ attackPaper.path = new Phaser.Curves.Spline([
attackFrom.x, attackFrom.y, attackFrom.x, attackFrom.y,
(attackFrom.x + attackPaper.throwTarget.x) / 2, Math.min(attackFrom.y, attackPaper.throwTarget.y) - 100, (attackFrom.x + attackPaper.throwTarget.x) / 2, Math.min(attackFrom.y, attackPaper.throwTarget.y) - 100,
attackPaper.throwTarget.x, attackPaper.throwTarget.y - 10 attackPaper.throwTarget.x + 20 * size * xOffset, attackPaper.throwTarget.y - 50 * size
]); ]);
scene.tweens.add({ scene.tweens.add({
targets: attackPaper.follower, targets: attackPaper.follower,
...@@ -431,9 +433,8 @@ WordSpace.makeAttackPaper = function(scene, attackFrom, attackTo, multiple) ...@@ -431,9 +433,8 @@ WordSpace.makeAttackPaper = function(scene, attackFrom, attackTo, multiple)
ease: 'Linear', ease: 'Linear',
duration: 4000, duration: 4000,
repeat: 0, repeat: 0,
onComplete: function() { onComplete: function() {
attackPaper.destroy(); WordSpace.attackPaperGroup.remove(attackPaper, true);
WordSpace.attackPaperGroup = [];
} }
}); });
attackPaper.moveObject = function(obj) attackPaper.moveObject = function(obj)
...@@ -442,7 +443,7 @@ WordSpace.makeAttackPaper = function(scene, attackFrom, attackTo, multiple) ...@@ -442,7 +443,7 @@ WordSpace.makeAttackPaper = function(scene, attackFrom, attackTo, multiple)
obj.setPosition(obj.follower.vec.x, obj.follower.vec.y); obj.setPosition(obj.follower.vec.x, obj.follower.vec.y);
obj.angle = 720 * obj.follower.t; obj.angle = 720 * obj.follower.t;
} }
WordSpace.attackPaperGroup.push(attackPaper); WordSpace.attackPaperGroup.add(attackPaper);
} }
WordSpace.nameQueue = WordSpace.nameQueue =
...@@ -487,3 +488,70 @@ WordSpace.nameQueue = ...@@ -487,3 +488,70 @@ WordSpace.nameQueue =
this.shuffle(); this.shuffle();
} }
} }
WordSpace.changePhase = function(newPhase)
{
console.log('phase changed from ' + WordSpace.CurrentPhase + ' to ' + newPhase);
WordSpace.CurrentPhase = newPhase;
//WordSpace.pauseCycle(true);
// 여기서 종이 드르륵 열면됨
let phaseChangeBgr = ScenesData.gameScene.add.sprite(game.config.width / 2, game.config.height / 2, 'phase' + newPhase).setOrigin(0.5, 0.5).setDepth(9.9).play('phase' + newPhase + 'Anim');
//ScenesData.gameScene.scene.pause('gameScene');
setTimeout(function()
{
//ScenesData.gameScene.scene.resume('gameScene');
// 여기서 종이 닫으면됨
phaseChangeBgr.anims.playReverse('phase' + newPhase + 'Anim');
phaseChangeBgr.on('animationcomplete', function(currentAnim, currentFrame, sprite){sprite.destroy()});
Audio.playSound(ScenesData.gameScene, 'startGame');
//WordSpace.pauseCycle(false);
//console.log('start again');
}, 5000);
}
WordSpace.resetGame = function()
{
WordSpace.nextWordCode = 0;
WordSpace.totalWeight = 0; //현재 단어 무게 총합
WordSpace.totalWordNum = 0;
WordSpace.brainCapacity = 200; //수용 가능한 단어 무게 최대치
WordSpace.gameTimer = null; //현재 게임 플레이 시간 타이머
WordSpace.isGameOver = false;
WordSpace.isTimerOn = false;
WordSpace.isInvincible = false;
WordSpace.pyeongminAnims = [];
WordSpace.wordGroup = [];
WordSpace.nameGroup = [];
WordSpace.attackPaperGroup = null;
WordSpace.wordForcedGroup = [];
WordSpace.wordPhysicsGroup = null;
WordSpace.nameQueue.queue = [];
WordSpace.setPlayerTyping.reset();
WordSpace.isTimerOn = false;
WordSpace.attackGauge.resetValue();
WordSpace.CurrentPhase = WordSpace.Phase.START;
WordSpace.playerTyping = 0;
WordSpace.playerTypingRate = 0;
//단어 생성 사이클
WordSpace.wordCycle = new Cycle(function()
{
WordSpace.genWordByProb(this);
});
//게임 오버 사이클
WordSpace.gameOverCycle = new Cycle(gameOver);
//호패 생성 사이클
WordSpace.nameCycle = new Cycle(function()
{
WordSpace.generateWord.Name(ScenesData.gameScene, false, null);
});
// 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
var config = { var config = {
type: Phaser.AUTO, type: Phaser.CANVAS,
width: 1920, width: 1920,
height: 1080, height: 1080,
scale: { scale: {
......
...@@ -16,7 +16,7 @@ app.get('/', function(req, res) { ...@@ -16,7 +16,7 @@ app.get('/', function(req, res) {
server.listen(80, function() { server.listen(80, function() {
console.log('[SERVER] Listening on port ' + server.address().port); console.log('[SERVER] Listening on port ' + server.address().port);
GameServer.serverNumber = Math.floor(Math.random() * 1000 + 1); GameServer.serverNumber = Math.floor(Math.random() * 1000 + 1);
console.log('[SERVER] server number is ${GameServer.serverNumber}'); console.log('[SERVER] server number is ' + GameServer.serverNumber);
}); });
...@@ -48,56 +48,99 @@ io.on('connection', function(socket) ...@@ -48,56 +48,99 @@ io.on('connection', function(socket)
if(msg.length < 1) socket.emit('alert' ,'errNicknameEmpty'); if(msg.length < 1) socket.emit('alert' ,'errNicknameEmpty');
else else
{ {
let isAlreadyHave = false; socket.playerData.nickname = msg;
GameServer.currentPlayer.forEach(function(element) console.log('['+socket.playerData.id+'] nickname set to ' + msg);
{ GameServer.enterEmptyRoom(socket);
if (element.playerData.nickname === msg) isAlreadyHave = true;
});
if (isAlreadyHave) socket.emit('alert' ,'errNicknameOverlaped');
else
{
socket.playerData.nickname = msg;
console.log('['+socket.playerData.id+'] nickname set to ' + msg);
GameServer.enterEmptyRoom(socket);
}
} }
}); });
socket.on('exitFromRoom', function(msg){
GameServer.findPlayerSocket(msg).playerData.playingData.isInThisRoom = false;
});
socket.on('setPlayerTyping', function(msg) // number playerTyping socket.on('setPlayerTyping', function(msg) // number playerTyping
{ {
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) {
console.error('[ERR] error catched on setPlayerTyping (' + e + ')');
socket.disconnect();
} }
catch (e) {console.error('[ERR] error catched on setPlayerTyping')}
}); });
socket.on('endCount', function() socket.on('endCount', function()
{ {
socket.playerData.currentRoom.aliveCount--; socket.playerData.currentRoom.aliveCount--;
if (socket.playerData.currentRoom.aliveCount === 0) //console.log('counted, ' + socket.playerData.currentRoom.aliveCount);
socket.playerData.playingData.isAlive = true;
if (socket.playerData.currentRoom.aliveCount === 0 && socket.playerData.currentRoom.currentPlayer.length >= socket.playerData.currentRoom.startCount)
{ {
socket.playerData.currentRoom.startRoom(); socket.playerData.currentRoom.startRoom();
clearTimeout(socket.playerData.currentRoom.startTimer);
}
if (socket.playerData.currentRoom.startTimer === undefined)
{
const room = socket.playerData.currentRoom;
room.startTimer = setTimeout(function()
{
let deads = room.currentPlayer.filter(element => !element.isAlive);
if (room.aliveCount != 0 && room.currentPlayer.length - deads.length >= room.startCount)
{
console.error('[ROOM#'+room.roomId+'] FORCE START!!!');
room.startRoom();
deads.forEach(function(element)
{
element.defeat();
});
clearTimeout(room.startTimer);
}
else if (deads.length > 0)
{
deads.forEach(function(element)
{
room.currentSocket[element.index].disconnect();
room.exitRoom(element.id);
});
room.refreshRoom();
}
}, 2000);
} }
}); });
...@@ -144,22 +187,37 @@ io.on('connection', function(socket) ...@@ -144,22 +187,37 @@ io.on('connection', function(socket)
if (wrongCountIndex !== -1) socket.playerData.playingData.lastAttacks[wrongCountIndex].wrongCount++; if (wrongCountIndex !== -1) socket.playerData.playingData.lastAttacks[wrongCountIndex].wrongCount++;
}); });
socket.on('itemStart', function(msg) //playerID, item
{
socket.playerData.currentRoom.announceToRoom('someoneItemStart', msg);
});
socket.on('itemEnd', function(msg) //playerID, item
{
socket.playerData.currentRoom.announceToRoom('someoneItemEnd', msg);
});
socket.on('disconnect', function(reason) socket.on('disconnect', function(reason)
{ {
GameServer.disconnectCount++; GameServer.disconnectCount++;
let data = socket.playerData; let data = socket.playerData;
if (typeof data === undefined) if (data === undefined)
{ {
console.error('[ERROR] data is undefined'); console.error('[ERROR] data is undefined');
console.table(GameServer.currentPlayer); console.table(GameServer.currentPlayer);
GameServer.disconnectCount--;
} }
else // data.id is not undefined else // data.id is not undefined
{ {
disconnectUser(data, reason); disconnectUser(data, reason);
} }
const connectDiff = GameServer.connectCount - GameServer.disconnectCount; const connectDiff = GameServer.connectCount - GameServer.disconnectCount;
const playerCount = GameServer.currentPlayer.length const playerCount = GameServer.currentPlayer.length;
console.log({ connectDiff, playerCount }); if (connectDiff != playerCount)
{
console.log({ connectDiff, playerCount });
console.table(GameServer.currentPlayer);
}
socket.disconnect();
}); });
}); });
...@@ -178,20 +236,6 @@ var disconnectUser = function(data, reason) ...@@ -178,20 +236,6 @@ var disconnectUser = function(data, reason)
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.exitRoom(data.id); data.currentRoom.exitRoom(data.id);
if (data.currentRoom.aliveCount < data.currentRoom.startCount)
{
data.currentRoom.announceToRoom('setRoomCount',
{
isEnable: false, endTime: 0, playerCount: data.currentRoom.currentPlayer.length,
isEnter: false, player: data.playingData
});
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)
{ {
......
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