432 lines
12 KiB
JavaScript
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"; |