diff --git a/src/game/lib/realtime_stage_timer.js b/src/game/lib/realtime_stage_timer.js
index 043a3fd..685ccd1 100644
--- a/src/game/lib/realtime_stage_timer.js
+++ b/src/game/lib/realtime_stage_timer.js
@@ -1,11 +1,13 @@
-function RealtimeStageTimer(timeLimitMS) {
- this.timeLimit = timeLimitMS;
+function RealtimeStageTimer(timeLimitSec) {
+ this.timeLimit = timeLimitSec;
this.startTime = 0;
this.elapsedTime = 0;
+ this.isStarted = false;
this.isPaused = true;
this.onTimeUpdate = null;
+ this.onTimeOver = null;
this.timerEvent = null;
}
@@ -14,7 +16,14 @@ RealtimeStageTimer.prototype.setTimeUpdateEvent = function(eventMethod) {
this.onTimeUpdate = eventMethod;
}
+RealtimeStageTimer.prototype.setTimeOverEvent = function(eventMethod) {
+ this.onTimeOver = eventMethod;
+}
+
RealtimeStageTimer.prototype.start = function() {
+ if(this.isStarted === true)
+ return;
+
this.isPaused = false;
this.startTime = game.time.totalElapsedSeconds();
@@ -27,13 +36,22 @@ RealtimeStageTimer.prototype.start = function() {
RealtimeStageTimer.prototype.pause = function() {
this.isPaused = true;
+
+ this.sendElapsedTime();
}
RealtimeStageTimer.prototype.resume = function() {
this.isPaused = false;
+
+ this.sendElapsedTime();
}
RealtimeStageTimer.prototype.stop = function() {
+ this.isStarted = false;
+ this.isPaused = true;
+
+ this.sendElapsedTime();
+
var recordTime = game.time.totalElapsedSeconds() - this.startTime;
this.removeTimer();
@@ -45,6 +63,17 @@ RealtimeStageTimer.prototype.updateTimer = function() {
return;
this.elapsedTime = game.time.totalElapsedSeconds() - this.startTime;
+
+ var timeLeft = this.timeLimit - this.elapsedTime;
+ if(timeLeft < 0) {
+ this.stop();
+
+ if(this.onTimeOver !== null)
+ this.onTimeOver();
+
+ return;
+ }
+
this.sendElapsedTime();
}
diff --git a/src/game/lib/util/time_util.js b/src/game/lib/util/time_util.js
index 6d04e99..29d47d6 100644
--- a/src/game/lib/util/time_util.js
+++ b/src/game/lib/util/time_util.js
@@ -46,6 +46,87 @@ TimeUtil.getTwoDigitSecondFromMS = function(timeMS) {
+TimeUtil.getFullHourFromSec = function(timeSec) {
+ return Math.floor(timeSec / TimeUtil.HOUR_SEC);
+}
+
+TimeUtil.getHourFromSec = function(timeSec) {
+ return TimeUtil.getFullHourFromSec(timeSec) % 24;
+}
+
+TimeUtil.getTwoDigitHourFromSec = function(timeSec) {
+ var twoDigitHour = TimeUtil.getHourFromSec(timeSec);
+ return StringUtil.getNumberStartWithZero(twoDigitHour, 2);
+}
+
+
+TimeUtil.getFullMinuteFromSec = function(timeSec) {
+ return Math.floor(timeSec / TimeUtil.MINUTE_SEC);
+}
+
+TimeUtil.getMinuteFromSec = function(timeSec) {
+ return TimeUtil.getFullMinuteFromSec(timeSec) % 60;
+}
+
+TimeUtil.getTwoDigitMinuteFromSec = function(timeSec) {
+ var twoDigitMinute = TimeUtil.getMinuteFromSec(timeSec);
+ return StringUtil.getNumberStartWithZero(twoDigitMinute, 2);
+}
+
+
+TimeUtil.getFullSecondFromSec = function(timeSec) {
+ return Math.floor(timeSec / TimeUtil.SECOND_SEC);
+}
+
+TimeUtil.getSecondFromSec = function(timeSec) {
+ return TimeUtil.getFullSecondFromSec(timeSec) % 60;
+}
+
+TimeUtil.getTwoDigitSecondFromSec = function(timeSec) {
+ var twoDigitSecond = TimeUtil.getSecondFromSec(timeSec);
+ return StringUtil.getNumberStartWithZero(twoDigitSecond, 2);
+}
+
+
+
+TimeUtil.printTimeFromSec = function(timeSec) {
+ var fullTime = "";
+
+ var twoDigitHour = TimeUtil.getTwoDigitHourFromSec(timeSec);
+ if(twoDigitHour !== "00")
+ fullTime = twoDigitHour + "시간 ";
+
+ var twoDigitMinute = TimeUtil.getTwoDigitMinuteFromSec(timeSec);
+ if(twoDigitMinute !== "00")
+ fullTime = fullTime + twoDigitMinute + "분 ";
+
+ var twoDigitSecond = TimeUtil.getTwoDigitSecondFromSec(timeSec);
+ fullTime = fullTime + twoDigitSecond + "초";
+
+ return fullTime;
+}
+
+
+TimeUtil.printHHMMSSFromSec = function(timeSec) {
+ var fullTime = "";
+
+ var twoDigitHour = TimeUtil.getTwoDigitHourFromSec(timeSec);
+ if(twoDigitHour !== "00")
+ fullTime = twoDigitHour + ":";
+
+ var twoDigitMinute = TimeUtil.getTwoDigitMinuteFromSec(timeSec);
+ if(twoDigitMinute !== "00")
+ fullTime = fullTime + twoDigitMinute + ":";
+
+ var twoDigitSecond = TimeUtil.getTwoDigitSecondFromSec(timeSec);
+ fullTime = fullTime + twoDigitSecond;
+
+ return fullTime;
+}
+
+
+
+
TimeUtil.getYYYYMMDD = function(date) {
// return date.toISOString().slice(0,10);
@@ -75,4 +156,10 @@ TimeUtil.printMonthDay = function(date) {
TimeUtil.SECOND_MS = 1000;
TimeUtil.MINUTE_MS = TimeUtil.SECOND_MS * 60;
TimeUtil.HOUR_MS = TimeUtil.MINUTE_MS * 60;
-TimeUtil.DAY_MS = TimeUtil.HOUR_MS * 24;
\ No newline at end of file
+TimeUtil.DAY_MS = TimeUtil.HOUR_MS * 24;
+
+
+TimeUtil.SECOND_SEC = 1;
+TimeUtil.MINUTE_SEC = TimeUtil.SECOND_SEC * 60;
+TimeUtil.HOUR_SEC = TimeUtil.MINUTE_SEC * 60;
+TimeUtil.DAY_SEC = TimeUtil.HOUR_SEC * 24;
\ No newline at end of file
diff --git a/src/game/typing/examination/game.js b/src/game/typing/examination/game.js
index 54c6a30..1522161 100644
--- a/src/game/typing/examination/game.js
+++ b/src/game/typing/examination/game.js
@@ -46,26 +46,22 @@ TypingExamination.prototype.create = function() {
this.averageTypingSpeedText = new AverageTypingSpeed();
- this.textTimer = this.makeDefaultText(960, 30);
- this.textTimer.anchor.set(1, 0.5);
- this.textTimer.fontSize = 30;
+ this.textTimer = null;
+ this.realtimeStageTimer = new RealtimeStageTimer(TypingExamination.GAME_TIME_SEC);
+ this.realtimeStageTimer.setTimeUpdateEvent(
+ (function(timeLeftSec) {
+ if(this.textTimer === null)
+ return;
- this.stageTimer = new RealtimeStageTimer(Phaser.Timer.SECOND * 300);
- this.stageTimer.setTimeUpdateEvent(
- (function(timeLeftMS) {
- this.textTimer.text = "남은 시간 : " + Math.floor(timeLeftMS);
+ this.textTimer.text = TimeUtil.printHHMMSSFromSec(timeLeftSec);
}).bind(this)
);
- this.stageTimer.start();
- /*
- this.stageTimer = new StageTimer(
- TypingExamination.GAME_TIME_SEC,
+ this.realtimeStageTimer.setTimeOverEvent(
(function() {
- // this.setClickEnable(false);
- this.timeOver();
+ this.textTimer.text = "타임 오버";
+ console.log("Time over");
}).bind(this)
);
- */
// bottom ui
@@ -82,6 +78,7 @@ TypingExamination.prototype.fontLoaded = function() {
// this.animalRecordList.hide();
this.animalRecordList.applyLoadedFont();
+ this.makeStageTimerText();
this.makeTextContents();
}
@@ -96,6 +93,13 @@ TypingExamination.prototype.makeDefaultText = function(x, y) {
return defaultText;
}
+TypingExamination.prototype.makeStageTimerText = function() {
+ this.textTimer = this.makeDefaultText(960, 30);
+ this.textTimer.anchor.set(1, 0.5);
+ this.textTimer.fontSize = 30;
+ this.textTimer.text = TimeUtil.printHHMMSSFromSec(TypingExamination.GAME_TIME_SEC);
+}
+
TypingExamination.prototype.makeUnderlineText = function(x, y) {
var CONTENT_TEXT_WIDTH = 800;
var CONTENT_UNDERLINE_OFFSET_Y = 20; // 17;
@@ -278,7 +282,7 @@ TypingExamination.prototype.startGame = function() {
this.showTypingExaminationContents();
this.showPlayingWordNumber();
- // this.stageTimer.start();
+ this.realtimeStageTimer.start();
}
TypingExamination.prototype.timeOver = function() {
@@ -290,7 +294,7 @@ TypingExamination.prototype.gameOver = function() {
var missionClearText = new MissionClearText();
this.stopAndGoResult();
- // this.stageTimer.pause();
+ this.realtimeStageTimer.pause();
}
TypingExamination.prototype.stopAndGoResult = function() {
@@ -636,7 +640,7 @@ TypingExamination.prototype.setTimeTypingStart = function() {
}
-TypingExamination.GAME_TIME_SEC = 60 * 5; // 5 minutes
+TypingExamination.GAME_TIME_SEC = TimeUtil.MINUTE_SEC * 5; // 5 minutes
TypingExamination.SPACE_INDICATOR = "␣"; // "ˇ"; // "ᵔ"; // "ᵕ"; // "ˣ"; // "ᵛ"; // " · ";
TypingExamination.ENTER_INDICATOR = "⏎"; // "↵"; // "↵";
diff --git a/src/web/client/typing_exam.html b/src/web/client/typing_exam.html
index 5f34364..eb8f6d7 100644
--- a/src/web/client/typing_exam.html
+++ b/src/web/client/typing_exam.html
@@ -46,6 +46,7 @@
+
diff --git a/test/tdd.js b/test/tdd.js
index a454884..86c4a6e 100644
--- a/test/tdd.js
+++ b/test/tdd.js
@@ -46,6 +46,8 @@ QUnit.test( "TimeUtil", function( assert ) {
assert.equal(TimeUtil.getHourFromMS(testTimeMS), 9, "getHourFromMS");
assert.equal(TimeUtil.getTwoDigitHourFromMS(testTimeMS), "09", "getTwoDigitHourFromMS");
+ testTimeMS = 3000;
+ assert.equal(TimeUtil.getTwoDigitSecondFromMS(testTimeMS), "03", "getTwoDigitHourFromMS");
});