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

435 lines
11 KiB
JavaScript

var SkillScreenMode = {
SKILLSIDE: 0,
OWNERSIDE: 1
};
var SkillScreen = defineObject(BaseScreen,
{
_skillListWindow: null,
_skillInfoWindow: null,
_ownerListWindow: null,
_unitSimpleWindow: null,
setScreenData: function(screenParam) {
this._prepareScreenMemberData(screenParam);
this._completeScreenMemberData(screenParam);
},
moveScreenCycle: function() {
var mode = this.getCycleMode();
var result = MoveResult.CONTINUE;
if (mode === SkillScreenMode.SKILLSIDE) {
result = this._moveSkillSide();
}
else if (mode === SkillScreenMode.OWNERSIDE) {
result = this._moveOwnerSide();
}
this._unitSimpleWindow.moveWindow();
return result;
},
drawScreenCycle: function() {
var height = this._skillListWindow.getWindowHeight();
var width = this._skillInfoWindow.getWindowWidth() + this._skillListWindow.getWindowWidth();
var x = LayoutControl.getCenterX(-1, width);
var y = LayoutControl.getCenterY(-1, height);
this._skillListWindow.drawWindow(x, y);
this._ownerListWindow.drawWindow(x + this._skillListWindow.getWindowWidth(), y);
this._skillInfoWindow.drawWindow(x + this._skillListWindow.getWindowWidth(), y + (height - this._skillInfoWindow.getWindowHeight()));
this._drawOwnerTitle(x + this._skillListWindow.getWindowWidth(), y);
if (this.getCycleMode() === SkillScreenMode.OWNERSIDE) {
this._unitSimpleWindow.drawWindow(x, y + (height - this._unitSimpleWindow.getWindowHeight()));
}
},
drawScreenBottomText: function(textui) {
var description = '';
var skill = this._skillInfoWindow.getSkill();
if (skill !== null) {
description = skill.getDescription();
}
TextRenderer.drawScreenBottomText(description, textui);
},
getScreenInteropData: function() {
return root.queryScreen('SkillList');
},
changeSkill: function(obj) {
this._skillInfoWindow.setSkillInfoData(obj.skill, ObjectType.NULL);
this._ownerListWindow.setOwnerArray(obj.unitArray);
},
changeUnit: function(unit) {
this._unitSimpleWindow.setFaceUnitData(unit);
},
_prepareScreenMemberData: function(screenParam) {
this._skillListWindow = createWindowObject(SkillListWindow, this);
this._skillInfoWindow = createWindowObject(SkillInfoWindow, this);
this._ownerListWindow = createWindowObject(OwnerListWindow, this);
this._unitSimpleWindow = createWindowObject(UnitSimpleWindow, this);
},
_completeScreenMemberData: function(screenParam) {
var arr = this._getArray();
this._skillListWindow.setWindowData();
this._skillListWindow.setSkillArray(arr);
this._skillInfoWindow.setSkillInfoData(arr[0].skill, ObjectType.NULL);
this._ownerListWindow.setWindowData();
this._ownerListWindow.setOwnerArray(arr[0].unitArray);
},
_moveSkillSide: function() {
var input = this._skillListWindow.moveWindow();
var result = MoveResult.CONTINUE;
if (input === ScrollbarInput.SELECT) {
if (this._ownerListWindow.getOwnerCount() > 0) {
this._changeActiveWindow();
this.changeCycleMode(SkillScreenMode.OWNERSIDE);
}
}
else if (input === ScrollbarInput.CANCEL) {
result = MoveResult.END;
}
else {
if (this._skillListWindow.isIndexChanged()) {
this.changeSkill(this._skillListWindow.getSkillObject());
}
}
return result;
},
_moveOwnerSide: function() {
var input = this._ownerListWindow.moveWindow();
var result = MoveResult.CONTINUE;
if (input === ScrollbarInput.CANCEL) {
this._changeActiveWindow();
this.changeCycleMode(SkillScreenMode.SKILLSIDE);
}
else {
if (this._ownerListWindow.isIndexChanged()) {
this.changeUnit(this._ownerListWindow.getUnit());
}
}
return result;
},
_drawOwnerTitle: function(x, y) {
var textui = this._getTitleTextUI();
var color = textui.getColor();
var font = textui.getFont();
var pic = textui.getUIImage();
var text = StringTable.SkillList_Owner;
var titleCount = 4;
var width = this._ownerListWindow.getWindowWidth() - (TitleRenderer.getTitlePartsWidth() * (titleCount + 2));
width = Math.floor(width / 2);
TextRenderer.drawFixedTitleText(x + width, y - 38, text, color, font, TextFormat.CENTER, pic, titleCount);
},
_changeActiveWindow: function() {
if (this.getCycleMode() === SkillScreenMode.SKILLSIDE) {
this._ownerListWindow.setActive(true);
this._skillListWindow.setActive(false);
}
else {
this._ownerListWindow.setActive(false);
this._skillListWindow.setActive(true);
}
},
_getArray: function() {
var i, skill, obj;
var list = root.getBaseData().getSkillList();
var count = list.getCount();
var arr = [];
var unitSkillArray = this._getUnitSkillArray();
for (i = 0; i < count; i++) {
skill = list.getData(i);
if (!this._isSkillAllowed(skill)) {
continue;
}
obj = {};
obj.skill = skill;
obj.unitArray = this._getUnitArray(skill, unitSkillArray);
arr.push(obj);
}
return arr;
},
_getUnitSkillArray: function() {
var i, count, list, unit, skillArray, obj;
var arr = [];
if (root.getCurrentScene() === SceneType.BATTLESETUP) {
list = PlayerList.getAliveList();
}
else {
list = PlayerList.getSortieList();
}
count = list.getCount();
for (i = 0; i < count; i++) {
unit = list.getData(i);
skillArray = SkillControl.getSkillObjectArray(unit, ItemControl.getEquippedWeapon(unit), -1, '', this._getObjectFlag());
obj = {};
obj.unit = unit;
obj.skillArray = skillArray;
arr.push(obj);
}
return arr;
},
_getUnitArray: function(skill, unitSkillArray) {
var i, j, count2;
var count = unitSkillArray.length;
var arr = [];
for (i = 0; i < count; i++) {
count2 = unitSkillArray[i].skillArray.length;
for (j = 0; j < count2; j++) {
if (unitSkillArray[i].skillArray[j].skill === skill) {
arr.push(unitSkillArray[i].unit);
break;
}
}
}
return arr;
},
_getObjectFlag: function() {
// ユニットスキルのみを対象にする場合は、ObjectFlag.UNITだけを返す
return ObjectFlag.UNIT | ObjectFlag.CLASS | ObjectFlag.WEAPON | ObjectFlag.ITEM | ObjectFlag.STATE | ObjectFlag.FUSION;
},
_isSkillAllowed: function(skill) {
// 空白はデータ設定上でのスペースとしてみなし、スキルとして扱わない
return skill.getName() !== '';
},
_getTitleTextUI: function() {
return root.queryTextUI('objective_title');
}
}
);
var SkillListWindow = defineObject(BaseWindow,
{
_scrollbar: null,
setWindowData: function() {
var count = LayoutControl.getObjectVisibleCount(DefineControl.getTextPartsHeight(), 12);
this._scrollbar = createScrollbarObject(SkillScrollbar, this);
this._scrollbar.setActive(true);
this._scrollbar.setScrollFormation(1, count);
this._scrollbar.enablePageChange();
},
setSkillArray: function(objectArray) {
this._scrollbar.setObjectArray(objectArray);
},
setActive: function(isActive) {
this._scrollbar.setActive(isActive);
if (isActive) {
this._scrollbar.setForceSelect(-1);
}
else {
this._scrollbar.setForceSelect(this._scrollbar.getIndex());
}
},
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 this._scrollbar.getScrollbarHeight() + (this.getWindowYPadding() * 2);
},
getListIndex: function() {
return this._scrollbar.getIndex();
},
isIndexChanged: function() {
return this._scrollbar.checkAndUpdateIndex();
},
getSkillObject: function() {
return this._scrollbar.getObject();
}
}
);
var SkillScrollbar = defineObject(BaseScrollbar,
{
drawScrollContent: function(x, y, object, isSelect, index) {
this._drawIcon(x, y, object, isSelect, index);
this._drawName(x, y, object, isSelect, index);
},
getObjectWidth: function() {
return ItemRenderer.getItemWidth();
},
getObjectHeight: function() {
return DefineControl.getTextPartsHeight();
},
_drawIcon: function(x, y, object, isSelect, index) {
if (this._isVisible(object)) {
GraphicsRenderer.drawImage(x, y, object.skill.getIconResourceHandle(), GraphicsType.ICON);
}
},
_drawName: function(x, y, object, isSelect, index) {
var name;
var length = this._getTextLength();
var textui = this.getParentTextUI();
var color = textui.getColor();
var font = textui.getFont();
if (this._isVisible(object)) {
name = object.skill.getName();
}
else {
name = StringTable.HideData_Question;
}
x += GraphicsFormat.ICON_WIDTH + 10;
TextRenderer.drawKeywordText(x, y, name, length, color, font);
},
_isVisible: function(object) {
return true;
// return object.unitArray.length !== 0;
},
_getTextLength: function() {
return this.getObjectWidth();
}
}
);
var OwnerListWindow = defineObject(BaseWindow,
{
_scrollbar: null,
setWindowData: function() {
var count = LayoutControl.getObjectVisibleCount(DefineControl.getTextPartsHeight(), 5);
this._scrollbar = createScrollbarObject(OwnerListScrollbar, this);
this._scrollbar.setActive(false);
this._scrollbar.setScrollFormation(1, count);
},
setOwnerArray: function(objectArray) {
this._scrollbar.setObjectArray(objectArray);
},
setActive: function(isActive) {
this._scrollbar.setActive(isActive);
if (isActive) {
this.getParentInstance().changeUnit(this._scrollbar.getObject());
}
},
getOwnerCount: function() {
return this._scrollbar.getObjectCount();
},
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 this._scrollbar.getScrollbarHeight() + (this.getWindowYPadding() * 2);
},
getRecentlyInputType: function() {
return this._scrollbar.getRecentlyInputType();
},
getListIndex: function() {
return this._scrollbar.getIndex();
},
isIndexChanged: function() {
return this._scrollbar.checkAndUpdateIndex();
},
getUnit: function() {
return this._scrollbar.getObject();
}
}
);
var OwnerListScrollbar = defineObject(BaseScrollbar,
{
drawScrollContent: function(x, y, object, isSelect, index) {
this._drawName(x, y, object, isSelect, index);
},
getObjectWidth: function() {
return 240 - (this.getParentInstance().getWindowXPadding() * 2);
},
getObjectHeight: function() {
return DefineControl.getTextPartsHeight();
},
_drawName: function(x, y, object, isSelect, index) {
var length = this._getTextLength();
var textui = this.getParentTextUI();
var color = textui.getColor();
var font = textui.getFont();
TextRenderer.drawKeywordText(x, y, object.getName(), length, color, font);
},
_getTextLength: function() {
return this.getObjectWidth();
}
}
);