Commit 52bea875 authored by 18손재민's avatar 18손재민

플레이어 스킨 바꾸기 구현 wip. 현재 스킨에 번호를 부여해서 로드하게 했음

parent bfb49672
......@@ -82,7 +82,7 @@ class GameRoom
{
this.roomId = GameServer.getRoomNumber();
this.roomIndex = -1;
this.startCount = 5;
this.startCount = 2;
this.maxPlayer = 100;
this.nextRank = 100;
......@@ -143,7 +143,7 @@ class GameRoom
{
if (this.currentPhase === GameServer.Phase.READY)
{
this.endTime = Date.now() + 30000; // 방 대기 시간
this.endTime = Date.now() + 1000; // 방 대기 시간
this.announceToRoom('setRoomCount',
{
isEnable: true, endTime: this.endTime, playerCount: this.currentPlayer.length,
......
......@@ -13,14 +13,16 @@ BackGround.otherCharacters = [];
BackGround.drawCharacter = function(scene)
{
RoomData.myself.playerImage = scene.add.sprite(game.config.width / 2, game.config.height * 41 / 48, 'pyeongminWrite').setScale(0.45).setDepth(5);
RoomData.myself.playerImage = scene.add.sprite(game.config.width / 2, game.config.height * 41 / 48, Enums.characterSkin[WordSpace.myCharacterSkin] + 'Write')
.setScale(0.45).setDepth(5);
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()});
RoomData.players.forEach(function(element){
if(element.id != RoomData.myself.id)
{
element.position = BackGround.characterPos.pop();
element.playerImage = scene.add.sprite(element.position.x, element.position.y, 'pyeongminWrite').setScale(0.315).setDepth(5);
element.playerImage = scene.add.sprite(element.position.x, element.position.y, Enums.characterSkin[WordSpace.myCharacterSkin] + 'Write')
.setScale(0.315).setDepth(5);
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)
.setOrigin(0.5,0.5).setColor('#000000').setPadding(0.5,0.5,0.5,0.5).setDepth(5.1);
......
......@@ -223,7 +223,7 @@ socket.on('defeat', function(msg) // object player
let victim = RoomData.findPlayer(msg.id);
RoomData.aliveCount--;
victim.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.gameOver]);
victim.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.gameOver]);
if (msg.lastAttack != null)
......@@ -313,6 +313,7 @@ socket.on('defeat', function(msg) // object player
{
var keys = Object.keys(Enums.item);
WordSpace.generateWord.Item(ScenesData.gameScene, Enums.item[keys[keys.length * Math.random() << 0]]);
Audio.playSound(ScenesData.gameScene, 'getItem');
RoomData.myself.killCount++;
}
}
......@@ -392,6 +393,7 @@ socket.on('attackSucceed', function(msg)
{
//console.log('client');
let tempWord = WordSpace.generateWord.Name(ScenesData.gameScene, true, RoomData.findPlayer(msg.victimId));
tempWord.instantiate(ScenesData.gameScene);
let victimPos = RoomData.findPlayer(msg.victimId).position;
tempWord.physicsObj.setPosition(victimPos.x, victimPos.y);
tempWord.wordObj.setPosition(tempWord.physicsObj.x, tempWord.physicsObj.y);
......@@ -415,9 +417,10 @@ var gameEndMenu = function(isWin)
let earnedMoney = 0;
if(isWin) earnedMoney += 20;
earnedMoney += RoomData.myself.killCount * 3;
earnedMoney += parseInt(WordSpace.playerTypingRate / 10);
earnedMoney += parseInt(WordSpace.playerTyping / 10);
earnedMoney += Math.max(20, Math.pow(RoomData.myself.attackSucceed, 2));
earnedMoney += parseInt(20 * (1 - (RoomData.myself.rank - 1) / (RoomData.players.length - 1)));
earnedMoney = parseInt(earnedMoney / 40);
Input.inputField.text.destroy();
......
var Enums = Enums || {};
Enums.characterAnim = { sit: 0, write: 1, notBurning: 2, smallBurning: 3, bigBurning: 4, throw: 5, hit: 6, gameOver: 7 }
Enums.item = {invincible: "무적", nameList: "명단", charge: "충전", clean: "청소", heavy: "중량", dark: "암흑"}
\ No newline at end of file
Enums.item = {invincible: "무적", nameList: "명단", charge: "충전", clean: "청소", heavy: "중량", dark: "암흑"}
Enums.characterSkin = ["pyeongmin", "yangban"]
\ No newline at end of file
......@@ -281,7 +281,7 @@ class UserData
this.recentHopae = null;
this.title = [];
this.money = 0;
this.item = [];
this.item = [0];
this.killCount = 0;
}
}
\ No newline at end of file
......@@ -40,6 +40,14 @@ ResourceLoader.loadImage = function(scene)
scene.load.spritesheet('pyeongminGameOver', 'assets/image/character/pyeongmin/balladang/pyeong_balladang.png', { frameWidth: 720, frameHeight: 700 });
scene.load.image('pyeongminStand', 'assets/image/character/pyeongmin/pyeong_stand.png');
scene.load.spritesheet('yangbanSit', 'assets/image/character/pyeongmin/pyeong_sit.png', { frameWidth: 521, frameHeight: 610 });
scene.load.spritesheet('yangbanWrite', 'assets/image/character/pyeongmin/write/pyeong_write.png', { frameWidth: 521, frameHeight: 610 });
scene.load.spritesheet('yangbanThrow', 'assets/image/character/pyeongmin/throw/pyeong_throw.png', { frameWidth: 521, frameHeight: 610 });
scene.load.spritesheet('yangbanBurningSmall', 'assets/image/character/pyeongmin/burning/pyeong_burning_small.png', { frameWidth: 521, frameHeight: 610 });
scene.load.spritesheet('yangbanBurningBig', 'assets/image/character/pyeongmin/burning/pyeong_burning_big.png', { frameWidth: 521, frameHeight: 610 });
scene.load.spritesheet('yangbanGameOver', 'assets/image/character/pyeongmin/balladang/pyeong_balladang.png', { frameWidth: 720, frameHeight: 700 });
scene.load.image('yangbanStand', 'assets/image/character/pyeongmin/pyeong_stand.png');
scene.load.spritesheet('wordBreak', 'assets/image/word/wordbreak.png', { frameWidth: 180, frameHeight: 180 });
scene.load.spritesheet('hopaeSceneInput', 'assets/image/word/hopaeSceneInput.png', { frameWidth: 239, frameHeight: 45 });
scene.load.spritesheet('gameSceneInput', 'assets/image/etc/wordSpace/wordspace.png', { frameWidth: 253, frameHeight: 67 });
......@@ -99,46 +107,52 @@ ResourceLoader.loadAnimation = function(scene)
frameRate: 20,
repeat: 0
});
WordSpace.pyeongminAnims[Enums.characterAnim.sit] = scene.anims.create({
key: 'pyeongminSitAnim',
frames: scene.anims.generateFrameNumbers('pyeongminSit'),
frameRate: 10,
repeat: 0
});
WordSpace.pyeongminAnims[Enums.characterAnim.write] = scene.anims.create({
key: 'pyeongminWriteAnim',
frames: scene.anims.generateFrameNumbers('pyeongminWrite'),
frameRate: 10,
repeat: 0
});
WordSpace.pyeongminAnims[Enums.characterAnim.notBurning] = scene.anims.create({
key: 'pyeongminnotBurningAnim',
frames: scene.anims.generateFrameNumbers('pyeongminWrite'),
frameRate: 10,
repeat: -1
});
WordSpace.pyeongminAnims[Enums.characterAnim.smallBurning] = scene.anims.create({
key: 'pyeongminsmallBurningAnim',
frames: scene.anims.generateFrameNumbers('pyeongminBurningSmall'),
frameRate: 10,
repeat: -1
});
WordSpace.pyeongminAnims[Enums.characterAnim.bigBurning] = scene.anims.create({
key: 'pyeongminbigBurningAnim',
frames: scene.anims.generateFrameNumbers('pyeongminBurningBig'),
frameRate: 10,
repeat: -1
});
WordSpace.pyeongminAnims[Enums.characterAnim.throw] = scene.anims.create({
key: 'pyeongminThrowAnim',
frames: scene.anims.generateFrameNumbers('pyeongminThrow'),
frameRate: 10,
repeat: 0
});
WordSpace.pyeongminAnims[Enums.characterAnim.gameOver] = scene.anims.create({
key: 'pyeongminGameOverAnim',
frames: scene.anims.generateFrameNumbers('pyeongminGameOver'),
frameRate: 10,
repeat: 0
});
for(let i = 0; i < 2; i++)
{
WordSpace.characterAnims[i][Enums.characterAnim.sit] = scene.anims.create({
key: Enums.characterSkin[i] + 'SitAnim',
frames: scene.anims.generateFrameNumbers(Enums.characterSkin[i] + 'Sit'),
frameRate: 10,
repeat: 0
});
WordSpace.characterAnims[i][Enums.characterAnim.write] = scene.anims.create({
key: Enums.characterSkin[i] + 'WriteAnim',
frames: scene.anims.generateFrameNumbers(Enums.characterSkin[i] + 'Write'),
frameRate: 10,
repeat: 0
});
WordSpace.characterAnims[i][Enums.characterAnim.notBurning] = scene.anims.create({
key: Enums.characterSkin[i] + 'notBurningAnim',
frames: scene.anims.generateFrameNumbers(Enums.characterSkin[i] + 'Write'),
frameRate: 10,
repeat: -1
});
WordSpace.characterAnims[i][Enums.characterAnim.smallBurning] = scene.anims.create({
key: Enums.characterSkin[i] + 'smallBurningAnim',
frames: scene.anims.generateFrameNumbers(Enums.characterSkin[i] + 'BurningSmall'),
frameRate: 10,
repeat: -1
});
WordSpace.characterAnims[i][Enums.characterAnim.bigBurning] = scene.anims.create({
key: Enums.characterSkin[i] + 'bigBurningAnim',
frames: scene.anims.generateFrameNumbers(Enums.characterSkin[i] + 'BurningBig'),
frameRate: 10,
repeat: -1
});
WordSpace.characterAnims[i][Enums.characterAnim.throw] = scene.anims.create({
key: Enums.characterSkin[i] + 'ThrowAnim',
frames: scene.anims.generateFrameNumbers(Enums.characterSkin[i] + 'Throw'),
frameRate: 10,
repeat: 0
});
WordSpace.characterAnims[i][Enums.characterAnim.gameOver] = scene.anims.create({
key: Enums.characterSkin[i] + 'GameOverAnim',
frames: scene.anims.generateFrameNumbers(Enums.characterSkin[i] + 'GameOver'),
frameRate: 10,
repeat: 0
});
}
}
\ No newline at end of file
......@@ -35,6 +35,7 @@ var menuScene = new Phaser.Class(
create: function()
{
ResourceLoader.loadAnimation(this);
BackGround.drawMenu(this);
Audio.playSound(this, 'login');
ScenesData.menuScene.tutorialFrame = 0;
......@@ -135,7 +136,8 @@ var menuScene = new Phaser.Class(
this.organizeHopae();
this.createCurrentHopae();
this.myCharacter = this.add.sprite(game.config.width / 2, game.config.height / 2, 'pyeongminStand').setOrigin(0.5, 0.5).setDepth(5).setScale(0.8);
this.myCharacter = this.add.sprite(game.config.width / 2, game.config.height / 2, Enums.characterSkin[WordSpace.myCharacterSkin] + 'Stand')
.setOrigin(0.5, 0.5).setDepth(5).setScale(0.8);
this.roomEnterDialog = this.rexUI.add.dialog({
x: game.config.width / 2,
......@@ -456,7 +458,6 @@ var gameScene = new Phaser.Class(
{
WordSpace.gameTimer = new Phaser.Time.Clock(this);
WordSpace.gameTimer.start();
ResourceLoader.loadAnimation(this);
CSVParsing.CSVParse(this);
BackGround.drawBackground(this);
BackGround.drawBrain(this);
......
......@@ -57,7 +57,6 @@ class WordObject
setTimeout(function() {
breakAnim.destroy();
}, 200);
Audio.playSound(ScenesData.gameScene, 'killWord');
}
attract()
......@@ -109,8 +108,9 @@ class NormalWord extends WordObject
super.destroy();
if(isNormallyRemoved)
{
RoomData.myself.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.write]);
RoomData.myself.playerImage.anims.chain(WordSpace.pyeongminAnims[Enums.characterAnim.sit]);
Audio.playSound(ScenesData.gameScene, 'killWord');
RoomData.myself.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.write]);
RoomData.myself.playerImage.anims.chain(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.sit]);
switch(this.wordGrade)
{
case 0: WordSpace.attackGauge.add(2.5); break;
......@@ -190,8 +190,9 @@ class AttackWord extends WordObject
super.destroy();
if(isNormallyRemoved)
{
RoomData.myself.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.write]);
RoomData.myself.playerImage.anims.chain(WordSpace.pyeongminAnims[Enums.characterAnim.sit]);
Audio.playSound(ScenesData.gameScene, 'killWord');
RoomData.myself.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.write]);
RoomData.myself.playerImage.anims.chain(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.sit]);
switch(this.wordGrade)
{
case 0: WordSpace.attackGauge.add(2.5); break;
......@@ -262,10 +263,7 @@ class NameWord extends WordObject
if(this.isStrong)
{
this.physicsObj.setScale(this.follower.t < 0.2 ? 0.2 : this.follower.t * this.scale);
this.wordObj.setFont({
font: (this.follower.t < 0.2 ? 0.05 : this.follower.t * this.scale * this.fontScale) +'pt sejongFont',
fontStyle: (this.wordWeight > 5 ? 'bold' : '')
});
this.wordObj.setScale((this.follower.t < 0.2 ? 0.2 : this.follower.t * this.scale) * 0.9);
}
}
}
......@@ -274,8 +272,9 @@ class NameWord extends WordObject
super.destroy();
if(isNormallyRemoved)
{
RoomData.myself.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.write]);
RoomData.myself.playerImage.anims.chain(WordSpace.pyeongminAnims[Enums.characterAnim.sit]);
Audio.playSound(ScenesData.gameScene, 'killWord');
RoomData.myself.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.write]);
RoomData.myself.playerImage.anims.chain(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.sit]);
ScenesData.gameScene.physics.world.removeCollider(this.physicsObj.wordCollider);
WordSpace.wordGroup.forEach(function(element)
{
......@@ -303,10 +302,6 @@ class NameWord extends WordObject
duration: 2000,
repeat: 0
});
//이동경로 디버그
/*var graphics = ScenesData.gameScene.add.graphics();
graphics.lineStyle(2, 0xffffff, 1);
this.path.draw(graphics);*/
}
}
}
......@@ -361,8 +356,9 @@ class ItemWord extends WordObject
super.destroy();
if(isNormallyRemoved)
{
RoomData.myself.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.write]);
RoomData.myself.playerImage.anims.chain(WordSpace.pyeongminAnims[Enums.characterAnim.sit]);
Audio.playSound(ScenesData.gameScene, 'killWord');
RoomData.myself.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.write]);
RoomData.myself.playerImage.anims.chain(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.sit]);
WordSpace.attackGauge.add(0.5);
switch(this.itemType)
{
......
......@@ -12,6 +12,10 @@ WordSpace.isTimerOn = false;
WordSpace.isInvincible = false;
WordSpace.pyeongminAnims = [];
WordSpace.characterAnims = Array(2).fill(null).map(() => Array());
WordSpace.myCharacterSkin = 0;
WordSpace.wordGroup = [];
WordSpace.nameGroup = [];
WordSpace.attackPaperGroup = null;
......@@ -192,7 +196,6 @@ WordSpace.generateWord =
Item: function(scene, itemType, lenRate)
{
word = new ItemWord(itemType);
Audio.playSound(ScenesData.gameScene, 'getItem');
WordSpace.pushWord(scene, word, lenRate);
return word;
}
......@@ -277,16 +280,16 @@ WordSpace.findWord = function(wordText)
switch(tempAttackOption.wordCount)
{
case 2:
RoomData.myself.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.notBurning]);
RoomData.myself.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.notBurning]);
break;
case 3:
RoomData.myself.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.smallBurning]);
RoomData.myself.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.smallBurning]);
break;
case 4:
RoomData.myself.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.smallBurning]);
RoomData.myself.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.smallBurning]);
break;
case 5:
RoomData.myself.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.bigBurning]);
RoomData.myself.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.bigBurning]);
break;
default:
console.log('Improper attack option.');
......@@ -396,8 +399,8 @@ WordSpace.attack = function(wordText, grade)
WordSpace.attackGauge.resetValue();
WordSpace.setPlayerTyping.add(wordText);
RoomData.myself.playerImage.play(WordSpace.pyeongminAnims[Enums.characterAnim.throw]);
RoomData.myself.playerImage.anims.chain(WordSpace.pyeongminAnims[Enums.characterAnim.sit]);
RoomData.myself.playerImage.play(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.throw]);
RoomData.myself.playerImage.anims.chain(WordSpace.characterAnims[WordSpace.myCharacterSkin][Enums.characterAnim.sit]);
Input.attackOption.isHeavy = false;
Input.attackOption.isDark = false;
}
......@@ -492,7 +495,8 @@ WordSpace.changePhase = function(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');
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()
{
......@@ -515,7 +519,6 @@ WordSpace.resetGame = function()
WordSpace.isGameOver = false;
WordSpace.isTimerOn = false;
WordSpace.isInvincible = false;
WordSpace.pyeongminAnims = [];
WordSpace.wordGroup = [];
WordSpace.nameGroup = [];
......
......@@ -13,7 +13,7 @@ app.get('/', function(req, res) {
});
// http 기본 포트(80)에 서버 열기
server.listen(80, function() {
server.listen(8080, function() {
console.log(new Date().toLocaleTimeString('ko-KR') + ' [SERVER] Listening on port ' + server.address().port);
GameServer.serverNumber = Math.floor(Math.random() * 1000 + 1);
console.log(new Date().toLocaleTimeString('ko-KR') + ' [SERVER] server number is ' + GameServer.serverNumber);
......
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