From c049ed18ad70f483eecac06f7b59799c36236b34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A2=E1=84=91=E1=85=B3=E1=86=AF=20=E1=84=82?= =?UTF-8?q?=E1=85=A9=E1=84=90=E1=85=B3=E1=84=87=E1=85=AE=E1=86=A8?= Date: Tue, 15 May 2018 10:40:06 +0900 Subject: [PATCH] Add: show heart_full, heart_empty --- resources/image/ui/heart_empty.png | Bin 0 -> 6671 bytes resources/image/ui/heart_full.png | Bin 0 -> 4621 bytes src/game/lib/heart_gauge.js | 50 +++++++++++---- src/game/lib/heart_manager.js | 78 +++++++++++++---------- src/game/mouse/space_invaders/game.js | 19 +++--- src/game/mouse/space_invaders/loading.js | 6 +- test/test_heart_manager.js | 58 ++++++++--------- 7 files changed, 126 insertions(+), 85 deletions(-) create mode 100644 resources/image/ui/heart_empty.png create mode 100644 resources/image/ui/heart_full.png diff --git a/resources/image/ui/heart_empty.png b/resources/image/ui/heart_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..30d36e70bd6ca46315fa59b1aa1d6671058e88d2 GIT binary patch literal 6671 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 Z0RX>5OH(MSGQt1=002ovPDHLkV1l~e)M5Yt literal 0 HcmV?d00001 diff --git a/resources/image/ui/heart_full.png b/resources/image/ui/heart_full.png new file mode 100644 index 0000000000000000000000000000000000000000..469b13a39c13e3bae0e51804fe17755d36cbcfd0 GIT binary patch literal 4621 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 { - console.log(this.heartManager.getHearts()); - } + this.heartManager.addOnChangeCountListener( + () => { this.onChangeCountListener(); } ); + + this.heartManager.addOnChangeMaxCountListener( + () => { this.onChangeMaxCountListener(); } + ); + + let startPosX = 950; + let posY = 30; + for(let i = 0; i < HeartManager.HEART_MAX_COUNT; i++) { + let heart = game.add.sprite(startPosX - i * 30, posY, "heart_full"); + heart.anchor.set(0.5); + heart.scale.set(1); + heart.alpha = 0; + this.hearts.push(heart); + } }; -} + onChangeCountListener() { + this.updateHearts(); + } -HeartGauge.DEFAULT_TEXT_FONT = { - font: "30px Arial", - boundsAlignH: "center", // left, center. right - boundsAlignV: "middle", // top, middle, bottom - fill: "#fff" -}; + onChangeMaxCountListener() { + this.updateHearts(); + } -HeartGauge.MOVE_UP_AMOUNT_PX = 50; \ No newline at end of file + start() { + this.updateHearts(); + } + + updateHearts() { + for(let i = 0; i < this.heartManager.getMaxCount(); i++) { + if(i < this.heartManager.getCount()) + this.hearts[i].loadTexture("heart_full"); + else + this.hearts[i].loadTexture("heart_empty"); + + this.hearts[i].alpha = 1; + } + } +} \ No newline at end of file diff --git a/src/game/lib/heart_manager.js b/src/game/lib/heart_manager.js index 8787a53..df7f35a 100644 --- a/src/game/lib/heart_manager.js +++ b/src/game/lib/heart_manager.js @@ -1,10 +1,11 @@ class HeartManager { constructor() { - this.countHearts = HeartManager.DEFAULT_MAX_COUNT; - this.countMaxHearts = HeartManager.DEFAULT_MAX_COUNT; + this.countHearts = HeartManager.DEFAULT_COUNT; + this.countMaxHearts = HeartManager.DEFAULT_COUNT; - this.onChangeHeartListeners = []; + this.onChangeCountListeners = []; + this.onChangeMaxCountListeners = []; this.onChangeGameOverListeners = []; } @@ -16,14 +17,24 @@ class HeartManager { } } - addOnChangeHeartListener(onChangeFunction) { - this.onChangeHeartListeners.push(onChangeFunction); + addOnChangeCountListener(onChangeFunction) { + this.onChangeCountListeners.push(onChangeFunction); } - removeOnChangeHeartListener(onChangeFunction) { - let itemIndex = this.onChangeHeartListeners.indexOf(onChangeFunction); + removeOnChangeCountListener(onChangeFunction) { + let itemIndex = this.onChangeCountListeners.indexOf(onChangeFunction); if(itemIndex > -1) - this.onChangeHeartListeners.splice(itemIndex, 1); + this.onChangeCountListeners.splice(itemIndex, 1); + } + + addOnChangeMaxCountListener(onChangeMaxFunction) { + this.onChangeMaxCountListeners.push(onChangeMaxFunction); + } + + removeOnChangeMaxCountListener(onChangeMaxFunction) { + let itemIndex = this.onChangeMaxCountListeners.indexOf(onChangeMaxFunction); + if(itemIndex > -1) + this.onChangeMaxCountListeners.splice(itemIndex, 1); } addOnChangeGameOverListener(onChangeGameOverFunction) { @@ -37,12 +48,13 @@ class HeartManager { } removeAllListeners() { - this.onChangeHeartListeners = []; + this.onChangeCountListeners = []; + this.onChangeMaxCountListeners = []; this.onChangeGameOverListeners = []; } - setHearts(amount) { + setCount(amount) { let beforeCountHearts = this.countHearts; this.countHearts = amount; if(this.countHearts < 0) @@ -51,25 +63,35 @@ class HeartManager { this.countHearts = this.countMaxHearts; if(beforeCountHearts !== this.countHearts) - this.callListener(this.onChangeHeartListeners); + this.callListener(this.onChangeCountListeners); if(this.countHearts === 0) this.callListener(this.onChangeGameOverListeners); } - setMaxHearts(amount) { - this.countMaxHearts = amount; - - if(this.countHearts > this.countMaxHearts) - this.countHearts = this.countMaxHearts; - } - - getHearts() { + getCount() { return this.countHearts; } + setMaxCount(amount) { + let beforeCountHearts = this.countMaxHearts; + this.countMaxHearts = amount; + if(this.countMaxHearts > HeartManager.HEART_MAX_COUNT) + this.countMaxHearts = HeartManager.HEART_MAX_COUNT; + + if(beforeCountHearts !== this.countMaxHearts) + this.callListener(this.onChangeMaxCountListeners); + + if(this.countHearts > this.countMaxHearts) + this.setCount(this.countMaxHearts); + } + + getMaxCount() { + return this.countMaxHearts; + } + addHearts(amount) { - this.setHearts(this.countHearts + amount); + this.setCount(this.countHearts + amount); } @@ -77,19 +99,7 @@ class HeartManager { this.addHearts(-1 * amount); } - setScore(value) { - let beforeScore = this.score; - this.score = value; - - // update score - if(beforeScore !== this.score) - this.callListener(this.onChangeHeartListeners); - - // update high score - if(this.score > this.highScore) - this.callListener(this.onChangeGameOverListeners); - } - } -HeartManager.DEFAULT_MAX_COUNT = 3; \ No newline at end of file +HeartManager.DEFAULT_COUNT = 3; +HeartManager.HEART_MAX_COUNT = 5; \ No newline at end of file diff --git a/src/game/mouse/space_invaders/game.js b/src/game/mouse/space_invaders/game.js index eb2a03c..f94df59 100644 --- a/src/game/mouse/space_invaders/game.js +++ b/src/game/mouse/space_invaders/game.js @@ -6,6 +6,8 @@ class Game { create() { this.game.stage.backgroundColor = '#4d4d4d'; + this.initListeners(); + // top let backButton = new BackButton( () => { location.href = '../../web/client/menu_app.html'; @@ -13,11 +15,7 @@ class Game { let scoreBoard = new ScoreBoard(); let heartGauge = new HeartGauge(heartManager); - heartManager.addOnChangeGameOverListener( - () => { - this.gameOver(); - } - ); + heartGauge.start(); let fullscreenButton = new FullscreenButton(this.game); @@ -51,6 +49,11 @@ class Game { screenBottom.printBottomRightText(sessionStorageManager.playerName); + this.startGame(); + // this.countDown(); + } + + initListeners() { scoreManager.addOnChangeScoreListener( score => { console.log("onChangeScore : " + score); scoreBoard.printScore(NumberUtil.numberWithCommas(score)); @@ -60,8 +63,9 @@ class Game { screenBottom.printBottomLeftText("최고 기록 : " + NumberUtil.numberWithCommas(highScore)); }); - this.startGame(); - // this.countDown(); + heartManager.addOnChangeGameOverListener( + () => { this.gameOver(); } + ); } /* @@ -118,7 +122,6 @@ class Game { } onAlienEscaped() { - console.log("onAlienEscaped"); heartManager.breakHearts(1); } diff --git a/src/game/mouse/space_invaders/loading.js b/src/game/mouse/space_invaders/loading.js index b92c5f9..060a277 100644 --- a/src/game/mouse/space_invaders/loading.js +++ b/src/game/mouse/space_invaders/loading.js @@ -33,8 +33,10 @@ class Loading { } startLoading() { - this.game.load.image('icon_fullscreen', '../../../resources/image/icon/fullscreen_white.png'); - this.game.load.image('alien_normal', '../../../resources/image/character/alien_normal.png'); + this.game.load.image('icon_fullscreen', '../../../resources/image/icon/fullscreen_white.png'); + this.game.load.image('alien_normal', '../../../resources/image/character/alien_normal.png'); + this.game.load.image('heart_full', '../../../resources/image/ui/heart_full.png'); + this.game.load.image('heart_empty', '../../../resources/image/ui/heart_empty.png'); // this.game.load.image('a', '../../../resources/image/icon/fullscreen_white.png'); // this.game.load.image('b', '../../../resources/image/icon/fullscreen_white.png'); // this.game.load.image('c', '../../../resources/image/icon/fullscreen_white.png'); diff --git a/test/test_heart_manager.js b/test/test_heart_manager.js index 0dccd89..09a0f20 100644 --- a/test/test_heart_manager.js +++ b/test/test_heart_manager.js @@ -1,63 +1,63 @@ let heartManager = new HeartManager(); QUnit.test( "MaxCount", function( assert ) { - heartManager.setHearts(3); - assert.equal(heartManager.getHearts(), 3); + heartManager.setCount(3); + assert.equal(heartManager.getCount(), 3); - heartManager.setMaxHearts(5); - assert.equal(heartManager.getHearts(), 3); + heartManager.setMaxCount(5); + assert.equal(heartManager.getCount(), 3); - heartManager.setMaxHearts(3); - assert.equal(heartManager.getHearts(), 3); + heartManager.setMaxCount(3); + assert.equal(heartManager.getCount(), 3); - heartManager.setMaxHearts(2); - assert.equal(heartManager.getHearts(), 2); + heartManager.setMaxCount(2); + assert.equal(heartManager.getCount(), 2); }); -QUnit.test( "setHearts", function( assert ) { - heartManager.setMaxHearts(3); +QUnit.test( "setCount", function( assert ) { + heartManager.setMaxCount(3); - heartManager.setHearts(3); - assert.equal(heartManager.getHearts(), 3); + heartManager.setCount(3); + assert.equal(heartManager.getCount(), 3); - heartManager.setHearts(2); - assert.equal(heartManager.getHearts(), 2); + heartManager.setCount(2); + assert.equal(heartManager.getCount(), 2); }); QUnit.test( "addHearts", function( assert ) { - heartManager.setMaxHearts(3); + heartManager.setMaxCount(3); - heartManager.setHearts(1); - assert.equal(heartManager.getHearts(), 1); + heartManager.setCount(1); + assert.equal(heartManager.getCount(), 1); heartManager.addHearts(1); - assert.equal(heartManager.getHearts(), 2); + assert.equal(heartManager.getCount(), 2); - heartManager.setHearts(1); - assert.equal(heartManager.getHearts(), 1); + heartManager.setCount(1); + assert.equal(heartManager.getCount(), 1); heartManager.addHearts(2); - assert.equal(heartManager.getHearts(), 3); + assert.equal(heartManager.getCount(), 3); - heartManager.setHearts(1); - assert.equal(heartManager.getHearts(), 1); + heartManager.setCount(1); + assert.equal(heartManager.getCount(), 1); heartManager.addHearts(3); - assert.equal(heartManager.getHearts(), 3); + assert.equal(heartManager.getCount(), 3); }); QUnit.test( "breakHearts", function( assert ) { - heartManager.setMaxHearts(3); + heartManager.setMaxCount(3); - heartManager.setHearts(3); - assert.equal(heartManager.getHearts(), 3); + heartManager.setCount(3); + assert.equal(heartManager.getCount(), 3); heartManager.breakHearts(1); - assert.equal(heartManager.getHearts(), 2); + assert.equal(heartManager.getCount(), 2); heartManager.breakHearts(2); - assert.equal(heartManager.getHearts(), 0); + assert.equal(heartManager.getCount(), 0); }); \ No newline at end of file