Add: ranking for app

This commit is contained in:
2018-09-05 09:21:48 +09:00
parent 3a1be0744c
commit 3d4852c42c
7 changed files with 529 additions and 19 deletions
+13
View File
@@ -0,0 +1,13 @@
/////////////////////////////
// Main game
const CONTENT_ID = "Ranking";
let game = new Phaser.Game(
GAME_SCREEN_SIZE.x, GAME_SCREEN_SIZE.y,
Phaser.CANVAS, CONTENT_ID,
this, false, false
);
game.state.add('Ranking', Ranking);
game.state.start('Ranking');
+316
View File
@@ -0,0 +1,316 @@
/////////////////////////////
// Ranking
class Ranking {
preload() {
game.load.image('icon_fullscreen', '../../../resources/image/icon/fullscreen_white.png');
}
create() {
self = this;
this.dbConnectManager = new DBConnectManager();
this.jsonData = null;
this.mode = Ranking.MODE_HOUR;
this.game.stage.backgroundColor = '#4d4d4d';
// let phaser = game.add.image(game.world.centerX, game.world.centerY, 'phaser');
// phaser.anchor.set(0.5);
// phaser.alpha = 0.1;
// top ui
let screenTopUI = new ScreenTopUI();
screenTopUI.makeBackButton( () => {
location.href = '../../web/client/start.html';
});
screenTopUI.makeFullScreenButton();
let resultTextStyle = textStyleBasic;
resultTextStyle.font = "bold 42px Arial";
this.textTitle = game.add.text(GAME_SCREEN_SIZE.x / 2, 32, "수업시간 순위", resultTextStyle)
.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2);
this.textTitle.anchor.set(0.5);
this.textTitle.addColor("#ff6666", 0);
// let typingRecordTextStyle = textStyleBasic;
// typingRecordTextStyle.font = "bold 62px Arial";
// let bestRecordTextStyle = textStyleBasic;
// bestRecordTextStyle.font = "32px Arial";
// rank
let rankAreaPositionY = 280;
let typingTextStyle = textStyleBasic;
// typingTextStyle.font = "bold 84px Arial";
rankAreaPositionY = 90;
let style = { font: "34px Arial", fill: "#fff", tabs: [ 60, 160, 160 ] };
let rankAreaPositionX = 160;
this.textRanking1to10 = game.add.text(rankAreaPositionX, rankAreaPositionY , '', style)
.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2);
this.textRanking11to20 = game.add.text(rankAreaPositionX + 420, rankAreaPositionY, '', style)
.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2);
let buttonPositionY = 640;
let buttonHour = this.makeTextButton(game.world.centerX - 220, buttonPositionY, "수업시간 순위", this.showRankingHour);
// buttonHour.startButton.inputEnabled = false;
let buttonDay = this.makeTextButton(game.world.centerX, buttonPositionY, "오늘의 순위", this.showRankingDay);
// buttonDay.startButton.inputEnabled = false;
let buttonMonth = this.makeTextButton(game.world.centerX + 220, buttonPositionY, "이달의 순위", this.showRankingMonth);
// buttonMonth.startButton.inputEnabled = false;
// bottom ui
let screenBottomUI = new ScreenBottomUI();
// ScreenBottomUI.printLeftText("게임 진행 정보");
// let playingAppName = appInfoManager.getAppNameKorean(sessionStorageManager.playingAppName);
// ScreenBottomUI.printCenterText(playingAppName);
screenBottomUI.printCenterText("랭킹");
screenBottomUI.printRightText(sessionStorageManager.playerName);
this.getRecordToRankingServer();
game.time.events.loop(Phaser.Timer.SECOND * 10, this.getRecordToRankingServer, this);
}
makeTextButton(x, y, buttonText, eventListener) {
let setting = new RoundRectButtonSetting(x, y, 200, 100);
setting.fontStyle.fontWeight = "bold";
switch(buttonText) {
case "수업시간 순위":
setting.strokeColors = {
out: 0xddcccc,
over: 0xccaaaa,
down: 0xbb9999,
disabled: 0x333333
};
setting.buttonColors = {
out: 0xffeeee,
over: 0xddcccc,
down: 0xccaaaa,
disabled: 0x333333
};
setting.textColors = {
out: "#f00",
over: "#f00",
down: "#f00",
disabled: "#999"
};
break;
case "오늘의 순위":
setting.strokeColors = {
out: 0xccccdd,
over: 0xaaaacc,
down: 0x9999bb,
disabled: 0x333333
};
setting.buttonColors = {
out: 0xeeeeff,
over: 0xccccdd,
down: 0xaaaacc,
disabled: 0x333333
};
setting.textColors = {
out: "#00f",
over: "#00f",
down: "#00f",
disabled: "#999"
};
break;
case "이달의 순위":
setting.strokeColors = {
out: 0xccddcc,
over: 0xaaccaa,
down: 0x99bb99,
disabled: 0x333333
};
setting.buttonColors = {
out: 0xeeffee,
over: 0xccddcc,
down: 0xaaccaa,
disabled: 0x333333
};
setting.textColors = {
out: "#0f0",
over: "#0f0",
down: "#0f0",
disabled: "#999"
};
break;
}
return new RoundRectButton(setting, RoundRectButton.NONE_ICON, buttonText, eventListener);
}
getRecordToRankingServer() {
// console.log("getRecordToRankingServer : " + this.mode);
let self = this;
this.showRanking(null);
// let totalInfo = new Object();
// this.showRanking(totalInfo);
this.dbConnectManager.requestAppRanking(
sessionStorageManager.maestroID,
sessionStorageManager.playingAppID,
(jsonData) => {
self.showRanking(jsonData);
},
(jsonData) => {
self.showRanking(null);
}
);
// console.log('playerUserID : ' + playerUserID);
// console.log('playerName : ' + playerName);
// console.log('playingStageData.language : ' + playingStageData.language);
// console.log('playingStageData.level : ' + playingStageData.level + ", " + getStageCodeByStageNo(playingStageData.level));
// let xhr = new XMLHttpRequest();
// xhr.onreadystatechange = function() {
// // console.log("onreadystatechange : " + xhr);
// // console.log("xhr.readyState : " + xhr.readyState);
// // console.log("xhr.status : " + xhr.status);
// if(xhr.readyState == 4 && xhr.status == 200) {
// // console.log(xhr.responseText);
// self.jsonData = JSON.parse(xhr.responseText);
// // console.log(JSON.stringify(jsonData));
// self.showRanking(self.jsonData);
// }
// }
// xhr.open('POST', 'stage_ranking.php', true);
// xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// let param = 'maestro_id=' + sessionStorageManager.maestroID + 'app_id=' + sessionStorageManager.playingAppID;
// // console.log(param);
// xhr.send(param);
}
showRankingHour() {
self.mode = Ranking.MODE_HOUR;
self.textTitle.text = "수업시간 순위";
self.textTitle.addColor("#ff6666", 0);
self.getRecordToRankingServer();
}
showRankingDay() {
self.mode = Ranking.MODE_DAY;
self.textTitle.text = "오늘의 순위";
self.textTitle.addColor("#9999ff", 0);
self.getRecordToRankingServer();
}
showRankingMonth() {
self.mode = Ranking.MODE_MONTH;
self.textTitle.text = "이달의 순위";
self.textTitle.addColor("#99ff99", 0);
self.getRecordToRankingServer();
}
showRanking(jsonRankingData) {
// console.log(jsonRankingData);
if(jsonRankingData === null) {
let rankEmpty = [ ];
this.textRanking1to10.parseList(rankEmpty);
this.textRanking11to20.parseList(rankEmpty);
return;
}
let jsonRankingList = null;
if(this.mode === Ranking.MODE_HOUR)
jsonRankingList = jsonRankingData.rankingHour;
else if(this.mode === Ranking.MODE_DAY)
jsonRankingList = jsonRankingData.rankingDay;
else if(this.mode === Ranking.MODE_MONTH)
jsonRankingList = jsonRankingData.rankingMonth;
if(jsonRankingList === null) {
let rankEmpty = [ ];
this.textRanking1to10.parseList(rankEmpty);
this.textRanking11to20.parseList(rankEmpty);
return;
}
let recordArray = this.getRankingArrayFromJSON(jsonRankingList);
let recordTop10 = [];
let recordTop20 = [];
for(let i = 0; i < 10; i++) {
if(i < recordArray.length)
recordTop10.push(recordArray[i]);
if(i + 10 < recordArray.length)
recordTop20.push(recordArray[i + 10]);
}
this.textRanking1to10.parseList(recordTop10);
this.textRanking11to20.parseList(recordTop20);
}
getRankingArrayFromJSON(jsonRankingList) {
// if(isDebugMode())
// return this.getDummyArray();
let rankingListCount = jsonRankingList.length;
let recordArray = [];
for(let i = 0; i < rankingListCount; i++) {
let bestRecordRow = [];
// bestRecordRow[0] = jsonRankingList[i]['UserID'];
bestRecordRow[0] = i + 1;
bestRecordRow[1] = jsonRankingList[i]['Name'];
bestRecordRow[2] = Math.floor(jsonRankingList[i]['BestRecord']);
// console.log("$BestRecordRow : " + bestRecordRow[0] + ", " + bestRecordRow[1] + ", " + bestRecordRow[2]);
recordArray.push(bestRecordRow);
}
return recordArray;
}
getDummyArray() {
let recordArray2 = [
[ '1', '박지상', '22' ],
[ '2', '박지상', '21' ],
[ '3', '박지상', '20' ],
[ '4', '박지상', '19' ],
[ '5', '박지상', '18' ],
[ '6', '박지상', '17' ],
[ '7', '박지상', '16' ],
[ '8', '박지상', '15' ],
[ '9', '박지상', '14' ],
[ '10', '박지상', '13' ],
[ '11', '박지상', '12' ],
[ '12', '박지상', '11' ],
[ '13', '박지상', '10' ],
[ '14', '박지상', '9' ],
[ '15', '박지상', '8' ],
[ '16', '박지상', '7' ],
[ '17', '박지상', '6' ],
[ '18', '박지상', '5' ],
[ '19', '박지상', '4' ],
[ '20', '박지상', '3' ],
[ '21', '박지상', '2' ],
[ '22', '박지상', '1' ],
];
return recordArray2;
}
}
Ranking.MODE_HOUR = "mode_hour";
Ranking.MODE_DAY = "mode_day";
Ranking.MODE_MONTH = "mode_month";
Ranking.OFFSET_RIGHT_ALIGN = 10;