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

672 lines
16 KiB
JavaScript

var CommandMixer = defineObject(BaseObject,
{
_arr: null,
initialize: function() {
this._arr = [];
},
pushCommand: function(command, type) {
var obj = {};
obj.command = command;
obj.type = type;
this._arr.push(obj);
},
mixCommand: function(index, groupArray, baseObject) {
var i, commandLayout, isShared, obj;
var screenLauncher = null;
var list = root.getBaseData().getCommandLayoutList(index);
var count = list.getCount();
for (i = 0; i < count; i++) {
commandLayout = list.getData(i);
if (!this._isVisible(commandLayout)) {
continue;
}
isShared = false;
obj = this._getObjectFromActionType(commandLayout.getCommandActionType());
if (obj === null) {
obj = this._inheritBaseObject(baseObject);
isShared = true;
}
if (obj === null) {
continue;
}
if (isShared) {
screenLauncher = this._getScreenLauncher(commandLayout);
if (screenLauncher === null) {
continue;
}
}
if (commandLayout.getCommandActionType() === CommandActionType.SHOPLIST) {
this._pushShop(groupArray, commandLayout, obj, true);
}
else if (commandLayout.getCommandActionType() === CommandActionType.SHOP) {
this._pushShop(groupArray, commandLayout, obj, false);
}
else if (commandLayout.getCommandActionType() === CommandActionType.BONUS) {
this._pushBonus(groupArray, commandLayout, obj);
}
else {
groupArray.appendObject(obj);
groupArray[groupArray.length - 1].setCommandLayout(commandLayout);
if (isShared) {
groupArray[groupArray.length - 1].setScreenLauncher(screenLauncher);
}
}
}
},
_pushShop: function(groupArray, commandLayout, obj, isList) {
var i, count, list, shopData;
if (isList && root.getRestPreference().isShopListView()) {
if (root.getBaseData().getRestShopList().getCount() > 1) {
groupArray.appendObject(obj);
groupArray[groupArray.length - 1].setScreenLauncher(ShopListScreenLauncher);
return;
}
}
if (isList) {
list = root.getBaseData().getRestShopList();
}
else {
list = root.getCurrentSession().getCurrentMapInfo().getShopDataList();
}
count = list.getCount();
for (i = 0; i < count; i++) {
shopData = list.getData(i);
if (shopData.isShopDisplayable() && shopData.getShopItemArray().length > 0) {
groupArray.appendObject(obj);
groupArray[groupArray.length - 1].setCommandLayout(commandLayout);
groupArray[groupArray.length - 1].setScreenLauncher(this._getScreenLauncher(commandLayout));
groupArray[groupArray.length - 1].getScreenLauncher().setShopData(shopData);
}
}
},
_pushBonus: function(groupArray, commandLayout, obj) {
var i, count, list, shopData;
if (root.getRestPreference().isBonusListView()) {
if (root.getBaseData().getRestBonusList().getCount() > 1) {
groupArray.appendObject(obj);
groupArray[groupArray.length - 1].setScreenLauncher(BonusListScreenLauncher);
return;
}
}
list = root.getBaseData().getRestBonusList();
count = list.getCount();
for (i = 0; i < count; i++) {
shopData = list.getData(i);
if (shopData.isShopDisplayable() && shopData.getShopItemArray().length > 0) {
groupArray.appendObject(obj);
groupArray[groupArray.length - 1].setCommandLayout(commandLayout);
groupArray[groupArray.length - 1].setScreenLauncher(this._getScreenLauncher(commandLayout));
groupArray[groupArray.length - 1].getScreenLauncher().setShopData(shopData);
}
}
},
_getObjectFromActionType: function(commandActionType) {
var i;
var obj = null;
var count = this._arr.length;
for (i = 0; i < count; i++) {
if (this._arr[i].type === commandActionType) {
obj = this._arr[i].command;
break;
}
}
return obj;
},
_isVisible: function(commandLayout) {
var commandVisibleType = commandLayout.getCommandVisibleType();
if (commandVisibleType === CommandVisibleType.SHOW) {
return true;
}
else if (commandVisibleType === CommandVisibleType.SWITCH && commandLayout.isGlobalSwitchOn()) {
return true;
}
else if (commandVisibleType === CommandVisibleType.TESTPLAY && root.isTestPlay()) {
return true;
}
return false;
},
_getScreenLauncher: function(commandLayout) {
var screenLauncher = null;
var commandActionType = commandLayout.getCommandActionType();
if (commandActionType === CommandActionType.CONFIG) {
screenLauncher = ConfigScreenLauncher;
}
else if (commandActionType === CommandActionType.EXTRA) {
screenLauncher = ExtraScreenLauncher;
}
else if (commandActionType === CommandActionType.RECOLLECTION) {
screenLauncher = RecollectionScreenLauncher;
}
else if (commandActionType === CommandActionType.CHARACTER) {
screenLauncher = CharacterScreenLauncher;
}
else if (commandActionType === CommandActionType.WORD) {
screenLauncher = WordScreenLauncher;
}
else if (commandActionType === CommandActionType.GALLERY) {
screenLauncher = GalleryScreenLauncher;
}
else if (commandActionType === CommandActionType.SOUNDROOM) {
screenLauncher = SoundRoomScreenLauncher;
}
else if (commandActionType === CommandActionType.SHOP) {
screenLauncher = ShopScreenLauncher;
}
else if (commandActionType === CommandActionType.BONUS) {
screenLauncher = BonusScreenLauncher;
}
else if (commandActionType === CommandActionType.SWITCH) {
screenLauncher = SwitchScreenLauncher;
}
else if (commandActionType === CommandActionType.VARIABLE) {
screenLauncher = VariableScreenLauncher;
}
else if (commandActionType === CommandActionType.LOAD) {
screenLauncher = LoadScreenLauncher;
}
else if (commandActionType === CommandActionType.SAVE) {
screenLauncher = SaveScreenLauncher;
}
else if (commandActionType === CommandActionType.COMMUNICATION) {
screenLauncher = CommunicationScreenLauncher;
}
else if (commandActionType === CommandActionType.OBJECTIVE) {
screenLauncher = ObjectiveScreenLauncher;
}
else if (commandActionType === CommandActionType.TALKCHECK) {
screenLauncher = TalkCheckScreenLauncher;
}
else if (commandActionType === CommandActionType.UNITSUMMARY) {
screenLauncher = UnitSummaryScreenLauncher;
}
else if (commandActionType === CommandActionType.SKILL) {
screenLauncher = SkillScreenLauncher;
}
else if (commandActionType === CommandActionType.UNITMARSHAL) {
screenLauncher = UnitMarshalScreenLauncher;
}
else if (commandActionType === CommandActionType.SHOPLIST) {
// ShopListScreenLauncherでない
screenLauncher = ShopScreenLauncher;
}
if (screenLauncher === null) {
return null;
}
return screenLauncher.isLaunchable() ? screenLauncher : null;
},
_inheritBaseObject: function(baseObject) {
var definition = {
_screenLauncher: null,
openCommand: function() {
this._screenLauncher.openScreenLauncher();
},
moveCommand: function() {
var result = this._screenLauncher.moveScreenLauncher();
if (result !== MoveResult.CONTINUE) {
if (this._screenLauncher.isRebuild()) {
this._listCommandManager.rebuildCommandEx();
}
}
return result;
},
setScreenLauncher: function(screenLauncher) {
this._screenLauncher = createObject(screenLauncher);
},
getScreenLauncher: function() {
return this._screenLauncher;
},
getCommandName: function() {
var name = this._screenLauncher.getCommandName();
// ScreenLauncherが名前を定義していない場合は、
// コマンドレイアウトで設定された名前を使用する。
if (name === '') {
return BaseCommand.getCommandName.call(this);
}
return name;
}
};
return defineObject(baseObject, definition);
}
}
);
var BaseScreenLauncher = defineObject(BaseObject,
{
_screen: null,
openScreenLauncher: function() {
var screenParam = this._createScreenParam();
this._screen = createObject(this._getScreenObject());
SceneManager.addScreen(this._screen, screenParam);
},
moveScreenLauncher: function() {
if (SceneManager.isScreenClosed(this._screen)) {
this._doEndAction();
return MoveResult.END;
}
return MoveResult.CONTINUE;
},
isLaunchable: function() {
return true;
},
isRebuild: function() {
return false;
},
getCommandName: function() {
return '';
},
_createScreenParam: function() {
return {};
},
_getScreenObject: function() {
return null;
},
_doEndAction: function() {
}
}
);
var ConfigScreenLauncher = defineObject(BaseScreenLauncher,
{
_getScreenObject: function() {
return ConfigScreen;
},
_doEndAction: function() {
var playerTurnObject;
if (typeof SceneManager.getActiveScene().getTurnObject !== 'undefined') {
playerTurnObject = SceneManager.getActiveScene().getTurnObject();
// コンフィグ項目の変化によって、マップ上で表示されるMapPartsも変化することがあるため再構築する
playerTurnObject.getMapEdit().rebuildMapPartsCollection();
if (!EnvironmentControl.isEnemyMarking()) {
MapLayer.getMarkingPanel().resetMarkingPanel();
}
}
}
}
);
var ExtraScreenLauncher = defineObject(BaseScreenLauncher,
{
isLaunchable: function() {
return ExtraControl.isExtraDisplayable();
},
_getScreenObject: function() {
return ExtraScreen;
}
}
);
var RecollectionScreenLauncher = defineObject(BaseScreenLauncher,
{
isLaunchable: function() {
return ExtraControl.isRecollectionDisplayable();
},
_getScreenObject: function() {
return RecollectionScreen;
}
}
);
var CharacterScreenLauncher = defineObject(BaseScreenLauncher,
{
isLaunchable: function() {
return ExtraControl.isCharacterDictionaryDisplayable();
},
_getScreenObject: function() {
return CharacterScreen;
}
}
);
var WordScreenLauncher = defineObject(BaseScreenLauncher,
{
isLaunchable: function() {
return ExtraControl.isWordDictionaryDisplayable();
},
_getScreenObject: function() {
return WordScreen;
}
}
);
var GalleryScreenLauncher = defineObject(BaseScreenLauncher,
{
isLaunchable: function() {
return ExtraControl.isGalleryDictionaryDisplayable();
},
_getScreenObject: function() {
return GalleryScreen;
}
}
);
var SoundRoomScreenLauncher = defineObject(BaseScreenLauncher,
{
isLaunchable: function() {
return ExtraControl.isMediaDictionaryDisplayable();
},
_getScreenObject: function() {
return SoundRoomScreen;
}
}
);
var SwitchScreenLauncher = defineObject(BaseScreenLauncher,
{
isRebuild: function() {
return true;
},
_getScreenObject: function() {
return SwitchScreen;
}
}
);
var ShopListScreenLauncher = defineObject(BaseScreenLauncher,
{
openScreenLauncher: function() {
var screenParam = this._createScreenParam();
this._screen = createObject(ShopListScreen);
SceneManager.addScreen(this._screen, screenParam);
},
isLaunchable: function() {
return root.getBaseData().getRestShopList().getCount() > 0;
},
getCommandName: function() {
var interopData = root.queryScreen('ShopList');
if (interopData === null) {
return '';
}
return interopData.getScreenTitleName();
},
_createScreenParam: function() {
return {};
}
}
);
var BonusListScreenLauncher = defineObject(BaseScreenLauncher,
{
openScreenLauncher: function() {
var screenParam = this._createScreenParam();
this._screen = createObject(BonusListScreen);
SceneManager.addScreen(this._screen, screenParam);
},
isLaunchable: function() {
return root.getBaseData().getRestBonusList().getCount() > 0;
},
getCommandName: function() {
var interopData = root.queryScreen('BonusList');
if (interopData === null) {
return '';
}
return interopData.getScreenTitleName();
},
_createScreenParam: function() {
return {};
}
}
);
var ShopScreenLauncher = defineObject(BaseScreenLauncher,
{
_shopData: null,
openScreenLauncher: function() {
var screenParam = this._createScreenParam();
this._screen = createObject(ShopLayoutScreen);
this._screen.setScreenInteropData(screenParam.shopLayout.getShopInteropData());
SceneManager.addScreen(this._screen, screenParam);
},
getCommandName: function() {
return this._shopData.getName();
},
setShopData: function(shopData) {
this._shopData = shopData;
},
_createScreenParam: function() {
var screenParam = ScreenBuilder.buildShopLayout();
var shopData = this._shopData;
screenParam.shopLayout = shopData.getShopLayout();
screenParam.itemArray = shopData.getShopItemArray();
return screenParam;
}
}
);
var BonusScreenLauncher = defineObject(BaseScreenLauncher,
{
_shopData: null,
openScreenLauncher: function() {
var screenParam = this._createScreenParam();
this._screen = createObject(BonusLayoutScreen);
this._screen.setScreenInteropData(screenParam.shopLayout.getShopInteropData());
SceneManager.addScreen(this._screen, screenParam);
},
getCommandName: function() {
return this._shopData.getName();
},
setShopData: function(shopData) {
this._shopData = shopData;
},
_createScreenParam: function() {
var screenParam = ScreenBuilder.buildShopLayout();
var shopData = this._shopData;
screenParam.shopLayout = shopData.getShopLayout();
screenParam.itemArray = shopData.getShopItemArray();
screenParam.bonusArray = shopData.getBonusNumberArray();
return screenParam;
}
}
);
var VariableScreenLauncher = defineObject(BaseScreenLauncher,
{
_getScreenObject: function() {
return VariableScreen;
}
}
);
var LoadScreenLauncher = defineObject(BaseScreenLauncher,
{
isLaunchable: function() {
if (root.getCurrentScene() === SceneType.FREE) {
return EnvironmentControl.isLoadCommand();
}
return true;
},
_getScreenObject: function() {
return LoadSaveScreen;
},
_createScreenParam: function() {
var screenParam = ScreenBuilder.buildLoadSave();
screenParam.isLoad = true;
return screenParam;
}
}
);
var SaveScreenLauncher = defineObject(BaseScreenLauncher,
{
isLaunchable: function() {
if (root.getCurrentScene() === SceneType.FREE) {
return !SceneManager.getActiveScene().getTurnObject().isPlayerActioned();
}
return true;
},
_getScreenObject: function() {
return DataSaveScreen;
},
_createScreenParam: function() {
var screenParam = ScreenBuilder.buildLoadSave();
screenParam.isLoad = false;
screenParam.scene = root.getBaseScene();
if (screenParam.scene === SceneType.REST) {
screenParam.mapId = root.getSceneController().getNextMapId();
}
else {
screenParam.mapId = root.getCurrentSession().getCurrentMapInfo().getId();
}
return screenParam;
}
}
);
var CommunicationScreenLauncher = defineObject(BaseScreenLauncher,
{
isRebuild: function() {
return true;
},
_getScreenObject: function() {
return CommunicationScreen;
}
}
);
var ObjectiveScreenLauncher = defineObject(BaseScreenLauncher,
{
_getScreenObject: function() {
return ObjectiveScreen;
}
}
);
var TalkCheckScreenLauncher = defineObject(BaseScreenLauncher,
{
_getScreenObject: function() {
return TalkCheckScreen;
}
}
);
var UnitSummaryScreenLauncher = defineObject(BaseScreenLauncher,
{
_getScreenObject: function() {
return UnitSummaryScreen;
},
_createScreenParam: function() {
var screenParam = ScreenBuilder.buildUnitSummary();
screenParam.isMapCall = root.getBaseScene() !== SceneType.REST;
return screenParam;
}
}
);
var SkillScreenLauncher = defineObject(BaseScreenLauncher,
{
_getScreenObject: function() {
return SkillScreen;
}
}
);
var UnitMarshalScreenLauncher = defineObject(BaseScreenLauncher,
{
isLaunchable: function() {
return PlayerList.getMainList().getCount() > 0;
},
_getScreenObject: function() {
return MarshalScreen;
}
}
);