Add: TypingTextManager

This commit is contained in:
2018-06-19 12:13:25 +09:00
parent fe943ef1c9
commit 564870e8b4
7 changed files with 112 additions and 196 deletions
@@ -0,0 +1,40 @@
class TypingTextManager {
constructor() {
this.init();
}
init() {
this.contents = [];
}
getContents() {
return this.contents;
}
add(arr) {
this.contents = this.contents.concat(arr);
}
slice(start, end) {
this.contents = this.contents.slice(start, end);
}
getShuffledArray(arr) {
return Phaser.ArrayUtils.shuffle(arr);
}
makePracticeContents(arr, repeatCount) {
this.init();
this.add(arr);
for(let i = 0; i < repeatCount; i++) {
this.add(this.getShuffledArray(arr));
}
}
makeTestContents(arr) {
this.init();
this.add(this.getShuffledArray(arr));
}
};
+11 -193
View File
@@ -117,71 +117,23 @@ class TypingPractice {
} }
initTypingData() { initTypingData() {
this.typingContents = this.getTypingPracticeContents(); let typingTextMan = new TypingTextManager();
console.log(this.typingContents);
let randomContents = Phaser.ArrayUtils.shuffle(this.typingContents); let typingPracticeContents = this.loadPracticeContent();
console.log(randomContents); // console.log(typingPracticeContents);
this.wordCountForStage = TypingPractice.WORD_COUNT_FOR_STAGE; typingTextMan.makePracticeContents(typingPracticeContents, 1);
if(isDebugMode()) this.typingRandomContents = typingTextMan.getContents();
this.wordCountForStage = 3; // console.log(this.typingRandomContents);
this.typingRandomContents = randomContents.slice(1, this.wordCountForStage + 1); // start Num, end Num (not index) this.typingContentLength = this.typingRandomContents.length;
console.log(this.typingRandomContents);
this.typingContentLength = this.typingContents.length;
this.typingIndex = 0; this.typingIndex = 0;
this.isTyping = false; this.isTyping = false;
// this.timeTypingStart = 0;
// this.timeTypingEnd = 0;
this.typingLetterCountTotal = 0; this.typingLetterCountTotal = 0;
this.typingRecordTotal = 0; this.typingRecordTotal = 0;
} }
getTypingPracticeContents() {
let TypingPracticeContents = this.loadPracticeContent();
// console.log('playingStageData.language : ' + playingStageData.language);
// console.log('playingStageData.level : ' + playingStageData.level);
// console.log('TypingPracticeContents : ' + TypingPracticeContents);
// this.typingRecordForLines = [];
// this.typingElapsedTime = [];
// for(let i = 0; i < TypingPracticeContents.length; i++) {
// this.typingRecordForLines[i] = 0;
// this.typingElapsedTime[i] = 0;
// }
return TypingPracticeContents;
}
loadTemporaryContent() {
testContent = [
"ㅃ",
"ㅂ",
"ㅈ",
"ㅉ",
"ㄸ",
"ㄷ",
"ㄱ",
"ㄲ",
"ㅅ"
];
// testContent = [
// "a",
// "s",
// "d",
// "f",
// "j",
// "k",
// "l",
// ";",
// "'"
// ];
return testContent;
}
loadPracticeContent() { loadPracticeContent() {
let appName = ""; let appName = "";
if(isTypingTestStage()) if(isTypingTestStage())
@@ -257,16 +209,8 @@ class TypingPractice {
this.textTypingContentsDone.text = ""; this.textTypingContentsDone.text = "";
else else
this.textTypingContentsDone.text = this.typingRandomContents[doneIndex]; this.textTypingContentsDone.text = this.typingRandomContents[doneIndex];
// for(let i = 0; i < TypingPractice.TYPING_CONTENT_DONE_COUNT; i++) {
// let doneIndex = this.typingIndex - i - 1;
// if(doneIndex < 0) {
// this.textTypingContentsDone.text = "";
// } else {
// this.textTypingContentsDone.text = this.typingRandomContents[doneIndex];
// }
// }
if(this.typingIndex === this.wordCountForStage) { if(this.typingIndex === this.typingContentLength) {
this.textTypingContent.text = ""; this.textTypingContent.text = "";
return; return;
} }
@@ -278,21 +222,8 @@ class TypingPractice {
this.textTypingContentPreview.text = ""; this.textTypingContentPreview.text = "";
else else
this.textTypingContentPreview.text = this.typingRandomContents[previewIndex]; this.textTypingContentPreview.text = this.typingRandomContents[previewIndex];
// for(let i = 0; i < TypingPractice.TYPING_CONTENT_PREVIEW_COUNT; i++) {
// let previewIndex = this.typingIndex + i + 1;
// if(previewIndex < this.typingRandomContents.length)
// this.textTypingContentPreview.text = this.typingRandomContents[previewIndex];
// else
// this.textTypingContentPreview.text = "";
// }
} }
/*
resetTypingContent() {
this.textTypingContent.clearColors();
this.textTypingContent.addColor(TypingPractice.COLOR_CONTENT_RIGHT, 0);
}
*/
getKeyCode(text) { getKeyCode(text) {
return this.keyMapper.getKeyIDOfText(text); return this.keyMapper.getKeyIDOfText(text);
@@ -318,110 +249,15 @@ class TypingPractice {
let inputContent = event.key; let inputContent = event.key;
let typingContent = this.typingRandomContents[this.typingIndex]; let typingContent = this.typingRandomContents[this.typingIndex];
// if(this.getKeyCode(inputContent) === this.getKeyCode(typingContent)
// && this.getShiftTypeOfText(inputContent) === this.getShiftTypeOfText(typingContent)) {
// console.log("correct key");
// }
// if(shiftKey.isDown)
// console.log(this.shiftKey);
if(this.isKeyPressed(inputContent, typingContent)) { if(this.isKeyPressed(inputContent, typingContent)) {
this.playNextContent(); this.playNextContent();
if(this.typingIndex === this.wordCountForStage) { if(this.typingIndex === this.typingContentLength) {
this.goResult(); this.goResult();
} }
} }
/*
if(event.keyCode == Phaser.Keyboard.ENTER) {
// console.log("### enter ###");
let inputContent = this.inputTextContent.canvasInput.value();
let typingContent = this.typingRandomContents[this.typingIndex];
if(inputContent == typingContent) {
this.calculateTypingRecord(typingContent);
this.playNextContent();
if(this.typingIndex == this.wordCountForStage)
this.goResult();
// this.state.start('TypingPracticeResult');
}
}
else {
// console.log(this.inputTextContent.canvasInput.value());
if(this.isTyping == false) {
// console.log(event);
this.setTimeTypingStart();
}
this.showTypingContentHighlight();
}
*/
} }
/*
showTypingContentHighlight() {
let typingContent = this.typingRandomContents[this.typingIndex];
let inputContent = this.inputTextContent.canvasInput.value();
this.textTypingContent.clearColors();
this.textTypingContent.addColor(TypingPractice.COLOR_CONTENT_RIGHT, 0);
if(typingContent == null)
return;
let typingContentLength = typingContent.length;
for(let i = 0; i < typingContentLength; i++) {
// console.log("typingContent.charAt(i) : " + typingContent.charAt(i));
// console.log("inputContent.charAt(i) : " + inputContent.charAt(i));
if(typingContent.charAt(i) != inputContent.charAt(i)) {
this.textTypingContent.addColor(TypingPractice.COLOR_CONTENT_WRONG, i);
return;
}
}
}
*/
/*
calculateTypingRecord(typingContent) {
// console.log('입력 단어 : ' + this.typingRandomContents[this.typingIndex]);
this.isTyping = false;
this.timeTypingEnd = game.time.elapsedSince(0);
// console.log('this.timeTypingEnd : ' + this.timeTypingEnd);
let elapsedTimeMS = this.timeTypingEnd - this.timeTypingStart;
// console.log('elapsedTimeMS : ' + elapsedTimeMS);
let typingContentLength = StringUtil.getUnicodeAlphabetCount(typingContent);
// console.log('typingContentLength : ' + typingContentLength);
let typingContentPlusEnterCount = typingContentLength + TypingPractice.TYPING_COUNT_PLUS_ENTER;
let typingRecord = (typingContentPlusEnterCount + TypingPractice.TYPING_COUNT_PLUS_ENTER) * 60000 / elapsedTimeMS;
// this.typingElapsedTime[this.typingIndex] = elapsedTimeMS;
this.typingLetterCountTotal += typingContentPlusEnterCount;
// this.typingRecordForLines[this.typingIndex] = typingRecord;
// console.log(this.typingRecordForLines[this.typingIndex]);
// let typingElapsedTimeTotal = 0;
// for(let i = 0; i <= this.typingIndex; i++) {
// // console.log('i : ' + i + ' - time : ' + this.typingElapsedTime[i]);
// typingElapsedTimeTotal += this.typingElapsedTime[i];
// }
// this.typingRecordTotal = this.typingLetterCountTotal * 60000 / typingElapsedTimeTotal;
// console.log(this.typingLetterCountTotal);
// console.log(typingElapsedTimeTotal);
// console.log(typingRecordTotal);
// console.log('-------------- total --------------');
// console.log('typingLetterCountTotal : ' + this.typingLetterCountTotal);
// console.log('typingElapsedTimeTotal : ' + typingElapsedTimeTotal);
// console.log('typingRecordTotal : ' + typingRecordTotal);
// console.log('-----------------------------------');
}
*/
playNextContent() { playNextContent() {
this.typingIndex++; this.typingIndex++;
@@ -431,25 +267,9 @@ class TypingPractice {
} }
showPlayingWordNumber() { showPlayingWordNumber() {
this.contentProgressText.print(this.typingIndex + 1, this.wordCountForStage); this.contentProgressText.print(this.typingIndex + 1, this.typingContentLength);
} }
/*
setTimeTypingStart() {
this.timeTypingStart = game.time.elapsedSince(0);
let timeGap = this.timeTypingStart - this.timeTypingEnd;
if(timeGap < 50)
return;
this.isTyping = true;
// console.log('last End : ' + this.timeTypingEnd);
// console.log('this.timeTypingStart : ' + this.timeTypingStart);
// console.log('time gap : ' + (this.timeTypingStart - this.timeTypingEnd));
}
*/
} }
@@ -463,5 +283,3 @@ TypingPractice.WORD_COUNT_FOR_STAGE = 10;
TypingPractice.COLOR_CONTENT_WRONG = "#aaaaaa"; TypingPractice.COLOR_CONTENT_WRONG = "#aaaaaa";
TypingPractice.COLOR_CONTENT_RIGHT = "#ffff4d"; TypingPractice.COLOR_CONTENT_RIGHT = "#ffff4d";
+1 -1
View File
@@ -238,7 +238,7 @@ class KeyMapper {
if(keyData.englishKey !== null && keyData.englishKey.shiftText === text) if(keyData.englishKey !== null && keyData.englishKey.shiftText === text)
return true; return true;
else if(keyData.koreanKey !== null && keyData.koreanKey.shiftText === text) else if(keyData.koreanKey !== null && keyData.koreanKey.shiftText === text && keyData.koreanKey.normalText !== text)
return true; return true;
else if(keyData.functionKey !== null && keyData.functionKey.shiftText === text) else if(keyData.functionKey !== null && keyData.functionKey.shiftText === text)
return true; return true;
+1
View File
@@ -50,6 +50,7 @@
<!-- Test typing : source files --> <!-- Test typing : source files -->
<script src="../../game/typing/lib/content_progress.js"></script> <script src="../../game/typing/lib/content_progress.js"></script>
<script src="../../game/typing/lib/typing_text_manager.js"></script>
<script src="../../game/typing/practice/define_variables.js"></script> <script src="../../game/typing/practice/define_variables.js"></script>
<script src="../../game/typing/practice/key_mapper.js"></script> <script src="../../game/typing/practice/key_mapper.js"></script>
+1
View File
@@ -50,6 +50,7 @@
<!-- Test typing : source files --> <!-- Test typing : source files -->
<script src="../../game/typing/lib/content_progress.js"></script> <script src="../../game/typing/lib/content_progress.js"></script>
<script src="../../game/typing/lib/typing_text_manager.js"></script>
<script src="../../game/typing/test/define_variables.js"></script> <script src="../../game/typing/test/define_variables.js"></script>
<script src="../../game/typing/test/loading.js"></script> <script src="../../game/typing/test/loading.js"></script>
+2
View File
@@ -11,7 +11,9 @@
<div id="qunit-fixture"></div> <div id="qunit-fixture"></div>
<script src="https://code.jquery.com/qunit/qunit-2.6.0.js"></script> <script src="https://code.jquery.com/qunit/qunit-2.6.0.js"></script>
<script src="../resources/js/phaser.min.js"></script>
<script src="../src/game/typing/lib/typing_text_manager.js"></script>
<script src="../src/game/lib/score_manager.js"></script> <script src="../src/game/lib/score_manager.js"></script>
<script src="../src/game/lib/session_storage_manager.js"></script> <script src="../src/game/lib/session_storage_manager.js"></script>
<script src="../src/game/global/global_variables.js"></script> <script src="../src/game/global/global_variables.js"></script>
+55 -1
View File
@@ -1,3 +1,53 @@
//////////////////////////////////////////////////
// TypingTextManager
let typingTextMan = new TypingTextManager();
let testContent = [ "ㅃ", "ㅂ", "ㅈ", "ㅉ", "ㄸ", "ㄷ", "ㄱ", "ㄲ", "ㅅ" ];
QUnit.test( "TypingTextManager - add", function( assert ) {
typingTextMan.init();
typingTextMan.add(testContent);
let contents = typingTextMan.getContents();
assert.equal(contents[0], "ㅃ", "addTextArray - ㅃ");
assert.equal(contents[8], "ㅅ", "addTextArray - ㅅ");
typingTextMan.add([ "k", "l" ]);
contents = typingTextMan.getContents();
assert.equal(contents[9], "k", "addTextArray - k");
assert.equal(contents[10], "l", "addTextArray - l");
});
QUnit.test( "TypingTextManager - slice", function( assert ) {
typingTextMan.init();
typingTextMan.add(testContent);
typingTextMan.slice(0, 3);
let contents = typingTextMan.getContents();
assert.equal(contents[0], "ㅃ", "slice - ㅃ");
assert.equal(contents[2], "ㅈ", "slice - ㅈ");
assert.equal(contents[3], undefined, "slice - ㅉ");
});
QUnit.test( "TypingTextManager - makePracticeContents", function( assert ) {
typingTextMan.makePracticeContents(testContent, 2);
let contents = typingTextMan.getContents();
assert.equal(contents[0], "ㅃ", "makePracticeContents - ㅃ");
assert.equal(contents[8], "ㅅ", "makePracticeContents - ㅅ");
assert.equal(contents.length, testContent.length * 3, "makePracticeContents - length");
});
QUnit.test( "TypingTextManager - makeTestContents", function( assert ) {
typingTextMan.makeTestContents(testContent);
let contents = typingTextMan.getContents();
assert.equal(contents.length, testContent.length, "makeTestContents - length");
});
////////////////////////////////////////////////// //////////////////////////////////////////////////
// KeyMapper // KeyMapper
@@ -71,9 +121,13 @@ QUnit.test( "KeyMapper - isShiftText", function( assert ) {
assert.equal(keyMapper.isShiftText("m"), false, "isShiftText - m"); assert.equal(keyMapper.isShiftText("m"), false, "isShiftText - m");
assert.equal(keyMapper.isShiftText("M"), true, "isShiftText - M"); assert.equal(keyMapper.isShiftText("M"), true, "isShiftText - M");
assert.equal(keyMapper.isShiftText("ㅁ"), false, "isShiftText - ㅁ");
assert.equal(keyMapper.isShiftText("ㄴ"), false, "isShiftText - ㄴ");
assert.equal(keyMapper.isShiftText("ㅇ"), false, "isShiftText - ㅇ");
assert.equal(keyMapper.isShiftText("ㅂ"), false, "isShiftText - ㅂ"); assert.equal(keyMapper.isShiftText("ㅂ"), false, "isShiftText - ㅂ");
assert.equal(keyMapper.isShiftText("ㅃ"), true, "isShiftText - ㅃ"); assert.equal(keyMapper.isShiftText("ㅃ"), true, "isShiftText - ㅃ");
assert.equal(keyMapper.isShiftText("ㅡ"), true, "isShiftText - ㅡ"); assert.equal(keyMapper.isShiftText("ㅡ"), false, "isShiftText - ㅡ");
}); });