diff --git a/src/game/lib/text/combo_text.js b/src/game/lib/text/combo_text.js new file mode 100644 index 0000000..4e59ee3 --- /dev/null +++ b/src/game/lib/text/combo_text.js @@ -0,0 +1,81 @@ +ComboText.prototype = Object.create(Phaser.Text.prototype); +ComboText.constructor = ComboText; + +function ComboText() { + Phaser.Text.call( + this, game, + game.world.width / 2, + ComboText.TEXT_POS_Y, + "", + ComboText.DEFAULT_TEXT_FONT + ); + + this.anchor.set(0.5); + this.inputEnabled = false; + + var grd = this.context.createLinearGradient(0, 0, 0, this.height); + grd.addColorStop(0, '#004CB3'); + grd.addColorStop(1, '#8ED6FF'); + // grd.addColorStop(0, '#FFD68E'); + // grd.addColorStop(1, '#B34C00'); + this.fill = grd; + // this.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + this.stroke = '#000'; + this.strokeThickness = 10; + + game.add.existing(this); + + this.hide(); +}; + +ComboText.prototype.show = function(comboCount, comboBonus) { + this.hide(); + + var message = comboCount + "콤보 : +" + NumberUtil.numberWithCommas(comboBonus) + " 점"; + this.text = message; + + this.alpha = 1; + this.scale.set(1); + + this.tweenScale = game.add.tween(this.scale); + this.tweenScale.to({x:0.7, y:0.7}, ComboText.TWEEN_SCALE_TIME, Phaser.Easing.Bounce.Out, true, 0); + this.tweenScale.onComplete.add(this.fadeOut, this); + this.tweenScale.start(); +} + +ComboText.prototype.fadeOut = function(comboCount) { + this.tweenFade = game.add.tween(this); + this.tweenFade.to({alpha:0}, ComboText.TWEEN_FADE_OUT_TIME, Phaser.Easing.Quadratic.In, true, 0); + this.tweenFade.onComplete.add(this.hide, this); + this.tweenFade.start(); +} + +ComboText.prototype.hide = function() { + if(this.tweenFade != null) { + this.tweenFade.stop(); + this.tweenFade = null + } + + if(this.tweenScale != null) { + this.tweenScale.stop(); + this.tweenScale = null; + } + + this.alpha = 0; + this.scale.set(1); +} + + + +ComboText.DEFAULT_TEXT_FONT = { + font: "bold 100px Arial", + fontStyle: "italic", + boundsAlignH: "center", // left, center. right + boundsAlignV: "middle", // top, middle, bottom + fill: "#fff" +}; + +ComboText.TEXT_POS_Y = 120; + +ComboText.TWEEN_SCALE_TIME = 700; +ComboText.TWEEN_FADE_OUT_TIME = 1000; \ No newline at end of file diff --git a/src/game/mouse/card_matching/game.js b/src/game/mouse/card_matching/game.js index 45b3492..628cabf 100644 --- a/src/game/mouse/card_matching/game.js +++ b/src/game/mouse/card_matching/game.js @@ -56,6 +56,7 @@ var Game = { this.initVariables(); + this.comboText = new ComboText(); // game stage game.stage.backgroundColor = '#4d4d4d'; @@ -105,6 +106,8 @@ var Game = { this.cardCharacterIndexList; this.randStageCharacterList; this.randCharacterListAfterShuffling; + + this.comboCount = 0; }, initCardVariables: function() { @@ -361,10 +364,14 @@ var Game = { this.setOpenCardInfo(col, row); if(this.isCardSelectEdgeAll() == true) { // selected 2 cards - if(this.isSameCharacterCard() == true) // selected same cards + if(this.isSameCharacterCard() == true) { // selected same cards this.clearSameTwoCards(); - else // selected different cards + this.increaseComboCount(); + this.addComboBonus(); + } else { // selected different cards this.resetDifferentTwoCards(); + this.resetComboBonus(); + } } } @@ -500,6 +507,24 @@ var Game = { + increaseComboCount: function() { + this.comboCount++; + }, + + addComboBonus: function() { + if(this.comboCount < 2) + return; + + var comboBonusScore = this.comboCount * 10; + this.comboText.show(this.comboCount, comboBonusScore); + }, + + resetComboBonus: function() { + this.comboCount = 0; + }, + + + setOpenCardInfo: function(col, row) { var cardIndex = this.getCardIndex(col, row); diff --git a/src/web/client/card_matching.html b/src/web/client/card_matching.html index 76602bc..e0c9b1b 100644 --- a/src/web/client/card_matching.html +++ b/src/web/client/card_matching.html @@ -45,6 +45,7 @@ +