Files
chocomae/src/game/license_timer/input_score.js
T
2018-12-16 14:42:18 +09:00

432 lines
12 KiB
JavaScript

function InputScore(licenseDataManager, timer, chart) {
this.licenseDataManager = licenseDataManager;
this.timer = timer;
this.chart = chart;
this.dbConnectManager = new DBConnectManager();
this.initVariables();
Phaser.Device.whenReady(function () {
game.plugins.add(PhaserInput.Plugin);
});
// bar
var bar = game.add.graphics();
bar.beginFill(0x303030); //, 0.2);
bar.drawRect(0, this.inputScorePosY, GAME_SCREEN_SIZE.x, 70);
// buttons
this.subjectButton = this.makeSubjectButton();
var subjectTextSetting = this.makeInputTextSetting(280, "과목 선택 or 직접 입력");
this.subjectFullnameText = this.makeInputText(120, this.inputScorePosY + 10, subjectTextSetting);
this.setSubjectFullname(this.subjectFullname);
var titleTextStyle = { font: "36px Arial", fill: "#fff", align: "center"};
var scoreTitleText = game.add.text(440, this.inputScorePosY + 40, "점수", titleTextStyle);
scoreTitleText.anchor.set(0, 0.5);
var scoreTextSetting = this.makeInputTextSetting(150, "점수 입력");
scoreTextSetting.min = 0;
scoreTextSetting.max = 9999;
scoreTextSetting.type = PhaserInput.InputType.number;
this.scoreText = this.makeInputText(game.world.centerX, this.inputScorePosY + 10, scoreTextSetting);
var passwordTitleText = game.add.text(game.world.centerX + 190, this.inputScorePosY + 40, "마에", titleTextStyle);
passwordTitleText.anchor.set(0, 0.5);
var passwordTextSetting = this.makeInputTextSetting(110, "비밀번호");
passwordTextSetting.type = PhaserInput.InputType.password;
this.passwordText = this.makeInputText(game.world.centerX + 260, this.inputScorePosY + 10, passwordTextSetting);
var saveButton = this.makeSaveButton();
// comapny and subject panel + buttons
this.makeCompanyPanel();
this.makeSubjectPanel();
this.setVisibleCompanyPanel(false);
this.setVisibleSubjectPanel(false, "");
}
InputScore.prototype.initVariables = function() {
this.inputScorePosY = GAME_SCREEN_SIZE.y - InputScore.INPUT_SCORE_GROUP_OFFSET_Y;
this.subjectFullname = "";
this.recentSubject = this.subjectFullname;
this.companyButtonList = [];
this.licenseSubjectButtonList = [];
this.maestroPassword;
}
InputScore.prototype.loadDataFromServer = function(subjectName) {
this.setSubjectFullname(subjectName);
this.recentSubject = this.subjectFullname;
}
InputScore.prototype.makeInputTextSetting = function(width, placeHolder) {
return {
font: "32px Arial",
fill: "#000000",
fillAlpha: 1,
fontWeight: "bold",
forceCase: "", // PhaserInput.ForceCase.upper,
width: width,
max: 100,
padding: 8,
borderWidth: 1,
borderColor: "#aaa",
borderRadius: 6,
placeHolder: placeHolder,
textAlign: "center",
zoom: true
}
}
InputScore.prototype.makeInputText = function(x, y, setting) {
var inputText = game.add.inputField(x, y, setting);
inputText.setText('');
inputText.blockInput = false;
return inputText;
}
InputScore.prototype.setSubjectFullname = function(fullname) {
this.subjectFullname = fullname;
// this.subjectFullnameText.text = fullname;
this.subjectFullnameText.setText(this.subjectFullname);
}
InputScore.prototype.makeSubjectButton = function() {
var setting = new RoundRectButtonSetting(60, this.inputScorePosY + 35, 100, 50);
setting.strokeWidthPx = 5;
setting.roundAmount = 10;
setting.fontStyle.fontSize = 24;
setting.fontStyle.fontWeight = "bold";
// yellow
setting.setStrokeColor(
0xd0d020,
0xb0b010,
0x909000,
0x333333
);
setting.setButtonColor(
0xf0f040,
0xd0d030,
0xb0b020,
0x666666
);
setting.setIconColor(
0x906020,
0x704010,
0x502000,
0x333333
);
setting.setTextColor(
"#962",
"#741",
"#520",
"#333"
);
var button = new RoundRectButton(
setting,
null, "과목",
(function() { this.onClickSubjectButton(); }).bind(this)
);
return button;
}
InputScore.prototype.makeSaveButton = function() {
var setting = new RoundRectButtonSetting(GAME_SCREEN_SIZE.x - 60, this.inputScorePosY + 35, 100, 50);
// cyan
setting.setStrokeColor(
0x309090,
0x208080,
0x205050,
0x666666
);
setting.setButtonColor(
0x40c0c0,
0x30a0a0,
0x208080,
0x666666
);
setting.setTextColor(
"#cee",
"#acc",
"#8aa",
"#333"
);
var button = new RoundRectButton(
setting,
null, "저장",
(function() { this.onClickSendToServerButton(); }).bind(this)
);
return button;
}
InputScore.prototype.onClickSubjectButton = function() {
if(!this.companyPanel.visible)
this.setVisibleCompanyPanel(true);
else {
this.setVisibleCompanyPanel(false);
this.setVisibleSubjectPanel(false, "");
}
}
InputScore.prototype.makeCompanyPanel = function() {
var companyCount = this.licenseDataManager.getCompanyCount();
var buttonStackCount = Math.floor(companyCount / 7) + 1;
var companyPanelWidth =
InputScore.BUTTON_GAP_WIDTH
+ (InputScore.COMPANY_BUTTON_WIDTH
+ InputScore.BUTTON_GAP_WIDTH) * buttonStackCount;
this.companyButtonStartPosX = InputScore.COMPANY_BUTTON_WIDTH / 2
+ InputScore.BUTTON_GAP_WIDTH;
// license company panel
this.companyPanel = this.makePanelSprite(0, 300, companyPanelWidth, 398, 0x303030);
var setting = new RoundRectButtonSetting(0, 0, 0, 0);
setting.x = -100;
setting.y = -100;
setting.height = 50;
setting.strokeWidthPx = 5;
setting.roundAmount = 10;
setting.fontStyle.fontSize = 24;
setting.fontStyle.fontWeight = "bold";
// license company buttons
for(var i = 0; i < companyCount; i++) {
setting.width = InputScore.COMPANY_BUTTON_WIDTH;
var self = this;
var companyName = this.licenseDataManager.getCompanyName(i);
this.companyButtonList[i] = new RoundRectButton(
setting, null, companyName,
(function() { self.setVisibleSubjectPanel(true, this.text.text); })
);
}
}
InputScore.prototype.makeSubjectPanel = function() {
var companyCount = this.licenseDataManager.getCompanyCount();
var buttonStackCount = Math.floor(companyCount / 7) + 1;
var companyPanelWidth =
InputScore.BUTTON_GAP_WIDTH
+ (InputScore.COMPANY_BUTTON_WIDTH
+ InputScore.BUTTON_GAP_WIDTH) * buttonStackCount;
// license subject panel
this.subjectPanel = this.makePanelSprite(
companyPanelWidth, 300,
game.world.width - companyPanelWidth, 398, 0x202020);
this.subjectButtonStartPosX =
companyPanelWidth + InputScore.SUBJECT_BUTTON_WIDTH / 2
+ InputScore.BUTTON_GAP_WIDTH;
var setting = new RoundRectButtonSetting(0, 0, 0, 0);
setting.x = -100;
setting.y = -100;
setting.height = 50;
setting.strokeWidthPx = 5;
setting.roundAmount = 10;
setting.fontStyle.fontSize = 24;
setting.fontStyle.fontWeight = "bold";
// license subject buttons
var subjectCount = this.licenseDataManager.getSubjectCount();
for(var i = 0; i < subjectCount; i++) {
setting.width = InputScore.SUBJECT_BUTTON_WIDTH;
var subjectData = this.licenseDataManager.getSubjectDataByIndex(i);
var subjectName = subjectData.companyName + " " + subjectData.subjectName;
this.licenseSubjectButtonList[i] = new RoundRectButton(setting, null, subjectName, null);
}
}
InputScore.prototype.setVisibleCompanyPanel = function(flag) {
this.companyPanel.visible = flag;
if(flag) {
for(var i = 0; i < this.companyButtonList.length; i++) {
this.companyButtonList[i].move(
this.companyButtonStartPosX,
this.inputScorePosY - 40 - InputScore.BUTTON_GAP_HEIGHT * i
);
}
} else {
for(var i = 0; i < this.companyButtonList.length; i++) {
this.companyButtonList[i].move(-100, 900);
}
}
}
InputScore.prototype.getLicenseSubjectButtonPosX = function(index) {
var rowCount = Math.floor(index / InputScore.SUBJECT_BUTTON_MAX_COUNT);
return this.subjectButtonStartPosX
+ (InputScore.SUBJECT_BUTTON_WIDTH + InputScore.BUTTON_GAP_WIDTH) * rowCount;
}
InputScore.prototype.getLicenseSubjectButtonPosY = function(index) {
var colIndex = index % InputScore.SUBJECT_BUTTON_MAX_COUNT;
return this.inputScorePosY - 40 - InputScore.BUTTON_GAP_HEIGHT * colIndex;
}
InputScore.prototype.setVisibleSubjectPanel = function(flag, companyName) {
this.subjectPanel.visible = flag;
for(var i = 0; i < this.licenseSubjectButtonList.length; i++) {
this.licenseSubjectButtonList[i].move(-100, 900);
}
if(!flag)
return;
var buttonIndex = 0;
var subjectCount = this.licenseDataManager.getSubjectCount();
for(var i = 0; i < subjectCount; i++) {
var subjectData = this.licenseDataManager.getSubjectDataByIndex(i);
if(subjectData.companyName == companyName) {
var button = this.licenseSubjectButtonList[buttonIndex];
var buttonName = companyName + " " + subjectData.subjectName;
button.text.text = buttonName;
button.move(
this.getLicenseSubjectButtonPosX(buttonIndex),
this.getLicenseSubjectButtonPosY(buttonIndex)
);
var self = this;
button.clickEvent = (function() {
self.onClickCompanySubjectButton(this.text.text);
});
buttonIndex++;
}
}
}
InputScore.prototype.onClickCompanySubjectButton = function(subjectFullname) {
this.setSubjectFullname(subjectFullname);
this.selectedSubjectData = this.licenseDataManager.getSubjectDataByName(subjectFullname);
// console.log(this.selectedSubjectData);
this.timer.setSubjectName(this.subjectFullname);
this.timer.setStartTime(this.selectedSubjectData.timeLimit * Timer.TIME_SECONDS_FOR_MINUTE);
this.setVisibleCompanyPanel(false);
this.setVisibleSubjectPanel(false, "");
}
InputScore.prototype.makePanelSprite = function(x, y, width, height, color) {
var btnTexture = new Phaser.Graphics()
.beginFill(color, 0.8)
.drawRect(0, 0, width, height)
.endFill()
.generateTexture();
return game.add.sprite(x, y, btnTexture);
}
InputScore.prototype.showAlertWindow = function(message) {
alert(message);
}
InputScore.prototype.onClickSendToServerButton = function() {
if(this.subjectFullname == "") {
this.showAlertWindow("과목을 입력해 주세요.");
return;
}
if(this.scoreText.value == "") {
this.showAlertWindow("점수를 입력해 주세요.");
return;
}
if(sessionStorageManager.getMaestroID() == 1 && sessionStorageManager.getPlayerID() == 1 && this.passwordText.value != "1111") {
this.showAlertWindow("체험용 마에스트로 비밀번호는 1111 입니다.");
return;
} if(this.passwordText.value == "") {
this.showAlertWindow("비밀번호를 입력해 주세요.\n마에스트로 관리자 페이지에 가서, 자격증 타이머용 비밀번호를 확인하고 입력해 주세요.");
return;
}
this.maestroPassword = this.passwordText.value;
// console.log("send data to server");
this.checkMaestroPasswordFromServer();
}
InputScore.prototype.addScoreToServer = function(subjectName, score) {
this.dbConnectManager.addLicenseScore(
sessionStorageManager.getMaestroID(),
sessionStorageManager.getPlayerID(),
subjectName,
score,
(function(replyJson) {
console.log(replyJson);
this.scoreText.setText("");
// this.showAlertWindow("점수가 정상적으로 등록되었습니다.");
this.chart.loadScoreFromServer();
}).bind(this),
(function(replyJson) {
console.log(replyJson);
})
);
}
InputScore.prototype.checkMaestroPasswordFromServer = function() {
this.dbConnectManager.requestLicenseMaestroPassword(
sessionStorageManager.getMaestroID(),
(function(replyJson) {
// console.log(replyJson);
if(replyJson.maestroPassword == null || replyJson.maestroPassword == "") {
this.showAlertWindow("자격증 타이머용 비밀번호가 설정되지 않았습니다.\n마에스트로 관리자 페이지에 가서, 자격증 타이머용 비밀번호를 설정해 주세요.");
return;
} else if(this.maestroPassword != replyJson.maestroPassword) {
this.showAlertWindow("비밀번호가 틀렸습니다.\n마에스트로 관리자 페이지에 가서, 자격증 타이머용 비밀번호를 확인해 주세요.");
return;
}
this.addScoreToServer(this.subjectFullname, this.scoreText.value);
}).bind(this),
(function(replyJson) {
// console.log(replyJson);
this.maestroPassword = InputScore.DEFAULT_MAESTRO_PASSWORD;
})
);
}
InputScore.INPUT_SCORE_GROUP_OFFSET_Y = 70;
InputScore.COMPANY_BUTTON_WIDTH = 160;
InputScore.SUBJECT_BUTTON_WIDTH = 260;
InputScore.BUTTON_GAP_WIDTH = 10;
InputScore.BUTTON_GAP_HEIGHT = 64;
InputScore.SUBJECT_BUTTON_MAX_COUNT = 6;
InputScore.DEFAULT_MAESTRO_PASSWORD = "1111";