slave-princess-charlotte/data/Script/screen/screen-resurrection.js
2025-10-12 13:17:46 -05:00

330 lines
8.8 KiB
JavaScript

var ResurrectionScreenMode = {
TOP: 0,
HELP: 1,
CHECK: 2,
EMPTY: 3
};
var ResurrectionScreen = defineObject(BaseScreen,
{
_unitList: null,
_selectUnit: null,
_leftWindow: null,
_unitMenuTopWindow: null,
_unitMenuBottomWindow: null,
_questionWindow: null,
setScreenData: function(screenParam) {
this._prepareScreenMemberData(screenParam);
this._completeScreenMemberData(screenParam);
},
moveScreenCycle: function() {
var mode = this.getCycleMode();
var result = MoveResult.CONTINUE;
if (mode !== ResurrectionScreenMode.EMPTY) {
this._moveAnimation();
}
if (mode === ResurrectionScreenMode.TOP) {
result = this._moveTop();
}
else if (mode === ResurrectionScreenMode.HELP) {
result = this._moveHelp();
}
else if (mode === ResurrectionScreenMode.CHECK) {
result = this._moveCheck();
}
else if (mode === ResurrectionScreenMode.EMPTY) {
result = this._moveEmpty();
}
return result;
},
drawScreenCycle: function() {
if (this.getCycleMode() !== ResurrectionScreenMode.EMPTY) {
this._drawMainWindow();
}
else {
this._drawSubWindow();
}
},
drawScreenBottomText: function(textui) {
var index, unit;
var text = '';
var mode = this.getCycleMode();
var isDefault = false;
if (mode === ResurrectionScreenMode.EMPTY) {
return;
}
else if (mode === ResurrectionScreenMode.CHECK || MouseControl.isMouseMoving()) {
isDefault = true;
}
else if (this._unitMenuTopWindow.isTracingHelp()) {
text = this._unitMenuTopWindow.getHelpText();
}
else if (this._unitMenuBottomWindow.isHelpMode() || this._unitMenuBottomWindow.isTracingHelp()) {
text = this._unitMenuBottomWindow.getHelpText();
}
else {
isDefault = true;
}
if (isDefault) {
index = this._leftWindow.getUnitListIndex();
unit = this._unitList.getData(index);
text = unit.getDescription();
}
TextRenderer.drawScreenBottomText(text, textui);
},
getScreenInteropData: function() {
return root.queryScreen('Resurrection');
},
getResurrectionUnit: function() {
return this._selectUnit;
},
_prepareScreenMemberData: function(screenParam) {
this._unitList = this._combineDeathList(screenParam);
this._selectUnit = null;
this._leftWindow = createWindowObject(ResurrectionListWindow, this);
this._unitMenuTopWindow = createWindowObject(UnitMenuTopWindow, this);
this._unitMenuBottomWindow = createWindowObject(UnitMenuBottomWindow, this);
this._questionWindow = createWindowObject(QuestionWindow, this);
this._infoWindow = createWindowObject(InfoWindow, this);
},
_completeScreenMemberData: function(screenParam) {
if (this._unitList.getCount() > 0) {
this._leftWindow.setResurrectionList(this._unitList);
this._questionWindow.setQuestionMessage(StringTable.ResurrectionLayout_Question);
this._unitMenuTopWindow.setUnitMenuData();
this._unitMenuBottomWindow.setUnitMenuData();
this._setMenuUnit(0);
this.changeCycleMode(ResurrectionScreenMode.TOP);
}
else {
this._infoWindow.setInfoMessage(StringTable.ResurrectionLayout_Empty);
this.changeCycleMode(ResurrectionScreenMode.EMPTY);
}
},
_setMenuUnit: function(index) {
var unit = this._unitList.getData(index);
this._unitMenuTopWindow.changeUnitMenuTarget(unit);
this._unitMenuBottomWindow.changeUnitMenuTarget(unit);
},
_moveTop: function() {
var recentlyInput;
var result = MoveResult.CONTINUE;
var input = this._leftWindow.moveWindow();
if (input === ScrollbarInput.SELECT) {
this._leftWindow.enableSelectCursor(false);
this._questionWindow.setQuestionActive(true);
// 蘇生可否の選択時に、アイテム情報ウインドウなどが表示されないようにする
this._unitMenuBottomWindow.lockTracing(true);
this.changeCycleMode(ResurrectionScreenMode.CHECK);
}
else if (input === ScrollbarInput.CANCEL) {
this._selectUnit = null;
result = MoveResult.END;
}
else if (input === ScrollbarInput.NONE) {
recentlyInput = this._leftWindow.getRecentlyInputType();
if (recentlyInput === InputType.LEFT || recentlyInput === InputType.RIGHT) {
this._setHelpMode();
}
else {
if (this._leftWindow.isIndexChanged()) {
this._setMenuUnit(this._leftWindow.getUnitListIndex());
}
}
}
return result;
},
_moveHelp: function() {
if (!this._unitMenuBottomWindow.isHelpMode()) {
this._leftWindow.enableSelectCursor(true);
this.changeCycleMode(UnitSortieMode.TOP);
}
return MoveResult.CONTINUE;
},
_moveCheck: function() {
var index;
if (this._questionWindow.moveWindow() !== MoveResult.CONTINUE) {
if (this._questionWindow.getQuestionAnswer() === QuestionAnswer.YES) {
index = this._leftWindow.getUnitListIndex();
this._selectUnit = this._unitList.getData(index);
return MoveResult.END;
}
else {
this._leftWindow.enableSelectCursor(true);
this._unitMenuBottomWindow.lockTracing(false);
this.changeCycleMode(ResurrectionScreenMode.TOP);
}
}
return MoveResult.CONTINUE;
},
_moveEmpty: function() {
if (this._infoWindow.moveWindow() !== MoveResult.CONTINUE) {
this._playCancelSound();
return MoveResult.END;
}
return MoveResult.CONTINUE;
},
_moveAnimation: function() {
this._unitMenuTopWindow.moveWindow();
this._unitMenuBottomWindow.moveWindow();
return MoveResult.CONTINUE;
},
_drawMainWindow: function() {
var mode = this.getCycleMode();
var width = this._leftWindow.getWindowWidth() + this._unitMenuTopWindow.getWindowWidth();
var height = this._leftWindow.getWindowHeight();
var x = LayoutControl.getCenterX(-1, width);
var y = LayoutControl.getCenterY(-1, height);
width = this._leftWindow.getWindowWidth();
height = this._unitMenuTopWindow.getWindowHeight();
this._leftWindow.drawWindow(x, y);
this._unitMenuTopWindow.drawWindow(x + width, y);
this._unitMenuBottomWindow.drawWindow(x + width, y + height);
if (mode === ResurrectionScreenMode.CHECK) {
x = LayoutControl.getCenterX(-1, this._questionWindow.getWindowWidth());
y = LayoutControl.getCenterY(-1, this._questionWindow.getWindowHeight());
this._questionWindow.drawWindow(x, y);
}
},
_drawSubWindow: function() {
var x = LayoutControl.getCenterX(-1, this._infoWindow.getWindowWidth());
var y = LayoutControl.getCenterY(-1, this._infoWindow.getWindowHeight());
this._infoWindow.drawWindow(x, y);
},
_setHelpMode: function() {
if (this._unitMenuBottomWindow.setHelpMode()) {
this._leftWindow.enableSelectCursor(false);
this.changeCycleMode(UnitSortieMode.HELP);
}
},
_combineDeathList: function(screenParam) {
var arr = ResurrectionControl.getTargetArray(screenParam.unit, screenParam.item);
var list = StructureBuilder.buildDataList();
list.setDataArray(arr);
return list;
},
_playCancelSound: function() {
MediaControl.soundDirect('commandcancel');
}
}
);
var ResurrectionListWindow = defineObject(BaseWindow,
{
_scrollbar: null,
_unitList: null,
setResurrectionList: function(unitList) {
this._unitList = unitList;
this._scrollbar = createScrollbarObject(ResurrectionListScrollbar, this);
this._scrollbar.setScrollFormation(1, 10);
this._scrollbar.setDataList(unitList);
this._scrollbar.setActive(true);
},
moveWindowContent: function() {
return this._scrollbar.moveInput();
},
drawWindowContent: function(x, y) {
this._scrollbar.drawScrollbar(x, y);
},
getWindowWidth: function() {
return this._scrollbar.getScrollbarWidth() + (this.getWindowXPadding() * 2);
},
getWindowHeight: function() {
return DefineControl.getFaceWindowHeight() + DefineControl.getUnitMenuBottomWindowHeight();
},
getUnitListIndex: function() {
return this._scrollbar.getIndex();
},
isIndexChanged: function() {
return this._scrollbar.checkAndUpdateIndex();
},
getRecentlyInputType: function() {
return this._scrollbar.getRecentlyInputType();
},
enableSelectCursor: function(isActive) {
this._scrollbar.enableSelectCursor(isActive);
}
}
);
var ResurrectionListScrollbar = defineObject(BaseScrollbar,
{
drawScrollContent: function(x, y, object, isSelect, index) {
var length = this._getTextLength();
var textui = this.getParentTextUI();
var font = textui.getFont();
var color = textui.getColor();
TextRenderer.drawKeywordText(x, y, object.getName(), length, color, font);
},
playSelectSound: function() {
MediaControl.soundDirect('commandselect');
},
getObjectWidth: function() {
return DefineControl.getTextPartsWidth();
},
getObjectHeight: function() {
return DefineControl.getTextPartsHeight();
},
_getTextLength: function() {
return this.getObjectWidth();
}
}
);