///////////////////////////// // MenuTypingPractice class MenuTypingPractice { preload() { game.load.image('icon_fullscreen', '../../../resources/image/icon/fullscreen_white.png'); game.load.image('space_invaders', '../../../resources/image/icon/space_invaders.png'); } create() { self = this; this.game.stage.backgroundColor = '#4d4d4d'; // top let backButton = new BackButton( () => { location.href = '../../web/client/menu_app.html'; }); let fullscreenButton = new FullscreenButton(this.game); // typing tab buttons let typingPracticeTabButton = new TypingTabButton( TypingTabButton.PRACTICE_BUTTON_POS_X, TypingTabButton.BUTTON_POS_Y, "", "타자 연습", () => { location.href = '../../web/client/menu_typing_practice.html'; } ); typingPracticeTabButton.inputEnabled = false; let typingTestTabButton = new TypingTabButton( TypingTabButton.TEST_BUTTON_POS_X, TypingTabButton.BUTTON_POS_Y, "", "타자 시험", () => { location.href = '../../web/client/menu_typing_test.html'; } ); // typingTestTabButton.inputEnabled = false; // bottom let screenBottom = new ScreenBottom(); screenBottom.makeBottomLine(); // screenBottom.printBottomLeftText("게임 진행 정보"); screenBottom.printBottomCenterText("메뉴 > 타자 연습"); screenBottom.printBottomRightText(sessionStorageManager.playerName); this.makeActiveTypingPracticeAppButtons(); } makeActiveTypingPracticeAppButtons() { let dbConnectManager = new DBConnectManager(); dbConnectManager.requestTypingPracticeAppList( sessionStorageManager.maestroID, self.downloadListSucceeded, self.downloadListFailed ); } hasApp(appID, appList) { for(let i = 0; i < appList.length; i++) { if(appList[i].AppID === appID) return true; } return false; } downloadListSucceeded(replyJSON) { // console.log(replyJSON); let buttonWidthGap = TypingPracticeButton.BUTTON_WIDTH + MenuTypingPractice.BUTTON_GAP; let koreanTypingPracticeAppCount = Object.keys(replyJSON.KoreanAppList).length; let englishTypingPracticeAppCount = Object.keys(replyJSON.EnglishAppList).length; for(let i = 0; i < koreanTypingPracticeAppCount; i++) { let activeApp = replyJSON.KoreanAppList[i]; let posX = self.getButtonPosX(i, koreanTypingPracticeAppCount); let posY = self.getButtonPosY(i, koreanTypingPracticeAppCount, TypingPracticeButton.BUTTON_UPPER_POS_Y ); let typingPracticeButton = new TypingPracticeButton( posX, posY, TypingPracticeButton.NONE_ICON, activeApp.KoreanName, () => { sessionStorageManager.playingAppID = activeApp.AppID; sessionStorageManager.playingAppName = activeApp.AppName; sessionStorageManager.playingAppKoreanName = activeApp.KoreanName; location.href = '../../web/client/start.html'; } ); if(!self.hasApp(activeApp.AppID, replyJSON.KoreanActiveAppList)) typingPracticeButton.inputEnabled = false; } for(let i = 0; i < englishTypingPracticeAppCount; i++) { let activeApp = replyJSON.EnglishAppList[i]; let posX = self.getButtonPosX(i, englishTypingPracticeAppCount); let posY = self.getButtonPosY(i, englishTypingPracticeAppCount, TypingPracticeButton.BUTTON_LOWER_POS_Y ); new TypingPracticeButton( posX, posY, TypingPracticeButton.NONE_ICON, activeApp.KoreanName, () => { sessionStorageManager.playingAppID = activeApp.AppID; sessionStorageManager.playingAppName = activeApp.AppName; sessionStorageManager.playingAppKoreanName = activeApp.KoreanName; location.href = '../../web/client/start.html'; } ); if(!self.hasApp(activeApp.AppID, replyJSON.EnglishActiveAppList)) typingPracticeButton.inputEnabled = false; } } getButtonPosX(index, buttonCount) { let gap = TypingPracticeButton.BUTTON_WIDTH + TypingPracticeButton.BUTTON_GAP; let maxColumnNum = Math.floor( (game.world.width - TypingPracticeButton.MARGIN_VERTICAL) / gap ); // console.log("maxColumnNum : " + maxColumnNum); let rowCount = Math.ceil(buttonCount / maxColumnNum); // console.log("rowCount : " + rowCount); let columnIndex = index % maxColumnNum; // console.log("columnIndex : " + columnIndex); let rowIndex = Math.floor(index / maxColumnNum); // console.log("rowIndex : " + rowIndex); let columnCountForThisRow = 0; if(rowIndex < rowCount - 1) columnCountForThisRow = maxColumnNum; else columnCountForThisRow = buttonCount - (maxColumnNum * rowIndex); // console.log("columnCountForThisRow : " + columnCountForThisRow); let startX = game.world.width / 2 - ( (gap / 2) * (columnCountForThisRow - 1) ); return startX + gap * columnIndex; } getButtonPosY(index, buttonCount, startPosY) { let rowGap = TypingPracticeButton.BUTTON_HEIGHT + TypingPracticeButton.BUTTON_GAP; let columnGap = TypingPracticeButton.BUTTON_WIDTH + TypingPracticeButton.BUTTON_GAP; let maxColumnNum = Math.floor( (game.world.width - TypingPracticeButton.MARGIN_VERTICAL) / columnGap ); // console.log("maxColumnNum : " + maxColumnNum); // console.log("buttonCount : " + buttonCount); let rowCount = Math.ceil(buttonCount / maxColumnNum); // console.log("rowCount : " + rowCount); let rowIndex = Math.floor(index / maxColumnNum); // console.log("rowIndex : " + rowIndex); let startY = startPosY - ( (rowGap / 2) * (rowCount - 1) ); return startY + rowGap * rowIndex; } downloadListFailed(replyJSON) { console.log('download app list failed, jsonData : ' + JSON.stringify(replyJSON)); } }