diff --git a/src/game/lib/app_info_manager.js b/src/game/lib/app_info_manager.js index 911c5d2..685037f 100644 --- a/src/game/lib/app_info_manager.js +++ b/src/game/lib/app_info_manager.js @@ -20,9 +20,29 @@ class AppInfoManager { } registerAppInfoList() { + // menu this.registerAppInfo(new AppInfo("test", "테스트", "")); this.registerAppInfo(new AppInfo("login", "로그인", "")); this.registerAppInfo(new AppInfo("menu", "메뉴", "")); + + // typing + this.registerAppInfo(new AppInfo("korean_basic", "기본 자리", "")); + this.registerAppInfo(new AppInfo("korean_left_upper", "왼손 윗글쇠", "")); + this.registerAppInfo(new AppInfo("korean_second_finger", "검지 글쇠", "")); + this.registerAppInfo(new AppInfo("korean_right_upper", "오른손 윗글쇠", "")); + this.registerAppInfo(new AppInfo("korean_left_lower", "왼손 밑글쇠", "")); + this.registerAppInfo(new AppInfo("korean_right_lower", "오른손 밑글쇠", "")); + this.registerAppInfo(new AppInfo("korean_left_upper_double", "쌍자음", "")); + this.registerAppInfo(new AppInfo("korean_right_upper_double", "쌍모음", "")); + + this.registerAppInfo(new AppInfo("english_basic", "기본 자리", "")); + this.registerAppInfo(new AppInfo("english_left_upper", "왼손 윗글쇠", "")); + this.registerAppInfo(new AppInfo("english_second_finger", "검지 글쇠", "")); + this.registerAppInfo(new AppInfo("english_right_upper", "오른손 윗글쇠", "")); + this.registerAppInfo(new AppInfo("english_left_lower", "왼손 밑글쇠", "")); + this.registerAppInfo(new AppInfo("english_right_lower", "오른손 밑글쇠", "")); + + // mouse this.registerAppInfo(new AppInfo("space_invaders", "외계인 침공", "외계인이 나타났다!\n마우스 왼쪽 버튼으로\n외계인을 클릭해서 물리쳐 주세요." )); diff --git a/src/game/lib/db_connect_manager.js b/src/game/lib/db_connect_manager.js index 9d3a0b0..50d0a2e 100644 --- a/src/game/lib/db_connect_manager.js +++ b/src/game/lib/db_connect_manager.js @@ -81,6 +81,23 @@ class DBConnectManager { xhr.send("maestro_id=" + maestroID); } + requestTypingPracticeAppList(maestroID, onSucceededListener, onFailedListener) { + let xhr = new XMLHttpRequest(); + xhr.open("POST", this.phpPath + "server/app/active_typing_practice_app.php", true); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.onreadystatechange = function() { + if(xhr.readyState == 4 && xhr.status == 200) { + let replyJSON = JSON.parse(xhr.responseText); + + if(replyJSON != null && replyJSON.length > 0) + onSucceededListener(replyJSON); + else + onFailedListener(replyJSON); + } + }; + xhr.send("maestro_id=" + maestroID); + } + requestPlayerHistory(maestroID, date, listener) { let historyRecordManager = new HistoryRecordManager(); diff --git a/src/game/menu/menu_typing_practice.js b/src/game/menu/menu_typing_practice.js index 660ace4..3771ed5 100644 --- a/src/game/menu/menu_typing_practice.js +++ b/src/game/menu/menu_typing_practice.js @@ -28,13 +28,13 @@ class MenuTypingPractice { screenBottom.printBottomRightText(sessionStorageManager.playerName); - this.makeActiveAppButtons(); + this.makeActiveTypingPracticeAppButtons(); } - makeActiveAppButtons() { + makeActiveTypingPracticeAppButtons() { let dbConnectManager = new DBConnectManager(); - dbConnectManager.requestActiveAppList( + dbConnectManager.requestTypingPracticeAppList( sessionStorageManager.maestroID, self.loginSucceeded, self.loginFailed @@ -43,19 +43,25 @@ class MenuTypingPractice { } loginSucceeded(replyJSON) { - // console.log(replyJSON); + console.log(replyJSON); - let koreanTypingPracticeAppCount = 1; // self.getAppCount(replyJSON, AppButton.TYPE_MOUSE); - let englishTypingPracticeAppCount = 1; // self.getAppCount(replyJSON, AppButton.TYPE_TYPING); + let buttonWidthGap = MenuTypingPractice.BUTTON_WIDTH + MenuTypingPractice.BUTTON_GAP; - let startX = game.world.width / 2 - (150 * koreanTypingPracticeAppCount / 2) - (150 / 2); + let koreanTypingPracticeAppCount = self.getAppCount(replyJSON, MenuTypingPractice.TYPE_KOREAN); + let englishTypingPracticeAppCount = self.getAppCount(replyJSON, MenuTypingPractice.TYPE_ENGLISH); + + let startX = game.world.width / 2 - (buttonWidthGap * koreanTypingPracticeAppCount / 2) - (buttonWidthGap / 2); let koreanTypingPracticeAppIndex = 0; for(let i = 0; i < replyJSON.length; i++) { let activeApp = replyJSON[i]; - if(self.isMouseApp(activeApp)) { + if(self.isKoreanApp(activeApp)) { koreanTypingPracticeAppIndex++; - new TypingPracticeButton(startX + 150 * koreanTypingPracticeAppIndex, 300, TypingPracticeButton.TYPE_ENGLISH, - TypingPracticeButton.NONE_ICON, "양손 기본", + console.log(activeApp); + new TypingPracticeButton( + startX + buttonWidthGap * koreanTypingPracticeAppIndex, 300, + TypingPracticeButton.TYPE_KOREAN, + TypingPracticeButton.NONE_ICON, + appInfoManager.getAppNameKorean(activeApp.AppName), () => { sessionStorageManager.playingAppID = activeApp.AppID; sessionStorageManager.playingAppName = activeApp.AppName; @@ -65,6 +71,28 @@ class MenuTypingPractice { } } + startX = game.world.width / 2 - (buttonWidthGap * koreanTypingPracticeAppCount / 2) - (buttonWidthGap / 2); + let englishTypingPracticeAppIndex = 0; + for(let i = 0; i < replyJSON.length; i++) { + let activeApp = replyJSON[i]; + if(!self.isKoreanApp(activeApp)) { + englishTypingPracticeAppIndex++; + console.log(activeApp); + new TypingPracticeButton( + startX + buttonWidthGap * englishTypingPracticeAppIndex, 500, + TypingPracticeButton.TYPE_ENGLISH, + TypingPracticeButton.NONE_ICON, + appInfoManager.getAppNameKorean(activeApp.AppName), + () => { + sessionStorageManager.playingAppID = activeApp.AppID; + sessionStorageManager.playingAppName = activeApp.AppName; + location.href = '../../web/client/start.html'; + } + ); + } + } + + /* if(englishTypingPracticeAppCount > 0) { new TypingPracticeButton(game.world.width / 2, 500, TypingPracticeButton.TYPE_KOREAN, TypingPracticeButton.NONE_ICON, "검지 글쇠", @@ -75,10 +103,11 @@ class MenuTypingPractice { } ); } + */ } - isMouseApp(app) { - if(app.AppType > 100) + isKoreanApp(app) { + if(app.AppType === MenuTypingPractice.TYPE_KOREAN) return true; return false; @@ -88,9 +117,7 @@ class MenuTypingPractice { let appCount = 0; for(let i = 0; i < replyJSON.length; i++) { let activeApp = replyJSON[i]; - if(type == AppButton.TYPE_TYPING && activeApp.AppType <= 100) - appCount++; - else if(type == AppButton.TYPE_MOUSE && activeApp.AppType > 100) + if(activeApp.AppType === type) appCount++; } @@ -101,4 +128,11 @@ class MenuTypingPractice { console.log('login failed, jsonData : ' + JSON.stringify(replyJSON)); } -} \ No newline at end of file +} + + +MenuTypingPractice.TYPE_KOREAN = 10; +MenuTypingPractice.TYPE_ENGLISH = 20; + +MenuTypingPractice.BUTTON_WIDTH = 200; +MenuTypingPractice.BUTTON_GAP = 20; \ No newline at end of file diff --git a/src/web/server/app/active_typing_practice_app.php b/src/web/server/app/active_typing_practice_app.php new file mode 100644 index 0000000..571ba9a --- /dev/null +++ b/src/web/server/app/active_typing_practice_app.php @@ -0,0 +1,49 @@ +close(); + +if($replyJSON.length === 0) { + send_error_message($replyJSON, "앱 목록 가져오기 실패"); + $db_conn->close(); + exit; +} + +echo json_encode($replyJSON, JSON_UNESCAPED_UNICODE); +$db_conn->close(); + + + +function get_active_typing_practice_app_list($maestro_id) { + global $db_conn; + + $query = " + SELECT A.AppID, A.AppName, A.AppType + FROM moty_app AS A + INNER JOIN moty_active_app AS AA ON A.AppType < 50 AND A.AppID = AA.AppID AND AA.MaestroID=?"; + $stmt = $db_conn->prepare($query); + $stmt->bind_param('i', $maestro_id); + $stmt->execute(); + $stmt->bind_result($app_id, $app_name, $app_type); + + $return_array = array(); + while($stmt->fetch()) { + $row_array['AppID'] = $app_id; + $row_array['AppName'] = $app_name; + $row_array['AppType'] = $app_type; + array_push($return_array, $row_array); + } + $stmt->close(); + + return $return_array; +} + +?> \ No newline at end of file