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

827 lines
20 KiB
JavaScript

var ItemInfoWindow = defineObject(BaseWindow,
{
_item: null,
_groupArray: null,
_windowHeight: 0,
// BaseWindowのプロパティの置き換え
_isWindowEnabled: false,
moveWindowContent: function() {
var i, count;
if (this._item === null) {
return MoveResult.CONTINUE;
}
count = this._groupArray.length;
for (i = 0; i < count; i++) {
this._groupArray[i].moveItemSentence();
}
return MoveResult.CONTINUE;
},
drawWindowContent: function(x, y) {
var i, count;
if (this._item === null) {
return;
}
count = this._groupArray.length;
for (i = 0; i < count; i++) {
this._groupArray[i].drawItemSentence(x, y, this._item);
y += this._groupArray[i].getItemSentenceCount(this._item) * ItemInfoRenderer.getSpaceY();
}
},
getWindowWidth: function() {
return ItemRenderer.getItemWindowWidth();
},
getWindowHeight: function() {
return this._windowHeight;
},
setInfoItem: function(item) {
var i, count;
var partsCount = 0;
this._item = item;
this._groupArray = [];
this._windowHeight = 0;
if (this._item === null) {
// ウインドウの枠などが描画されないようにする
this.enableWindow(false);
return;
}
if (this._item.isWeapon()) {
this._configureWeapon(this._groupArray);
}
else {
this._configureItem(this._groupArray);
}
count = this._groupArray.length;
for (i = 0; i < count; i++) {
this._groupArray[i].setParentWindow(this);
partsCount += this._groupArray[i].getItemSentenceCount(this._item);
}
this._windowHeight = (partsCount + 1) * ItemInfoRenderer.getSpaceY();
this.enableWindow(true);
},
getInfoItem: function() {
return this._item;
},
_configureWeapon: function(groupArray) {
groupArray.appendObject(ItemSentence.AttackAndHit);
groupArray.appendObject(ItemSentence.CriticalAndRange);
groupArray.appendObject(ItemSentence.WeaponLevelAndWeight);
groupArray.appendObject(ItemSentence.AdditionState);
groupArray.appendObject(ItemSentence.WeaponOption);
groupArray.appendObject(ItemSentence.Effective);
groupArray.appendObject(ItemSentence.ReverseWeapon);
groupArray.appendObject(ItemSentence.Skill);
groupArray.appendObject(ItemSentence.Only);
groupArray.appendObject(ItemSentence.Bonus);
},
_configureItem: function(groupArray) {
groupArray.appendObject(ItemSentence.WeaponLevelAndWeight);
groupArray.appendObject(ItemSentence.Info);
groupArray.appendObject(ItemSentence.ResistState);
groupArray.appendObject(ItemSentence.Skill);
groupArray.appendObject(ItemSentence.Target);
groupArray.appendObject(ItemSentence.Only);
groupArray.appendObject(ItemSentence.Bonus);
}
}
);
var BaseItemSentence = defineObject(BaseObject,
{
_itemInfoWindow: null,
setParentWindow: function(itemInfoWindow) {
this._itemInfoWindow = itemInfoWindow;
},
moveItemSentence: function() {
return MoveResult.CONTINUE;
},
drawItemSentence: function(x, y, item) {
},
getItemSentenceCount: function(item) {
return 0;
}
}
);
var ItemSentence = {};
ItemSentence.AttackAndHit = defineObject(BaseItemSentence,
{
drawItemSentence: function(x, y, item) {
var text;
text = root.queryCommand('attack_capacity');
ItemInfoRenderer.drawKeyword(x, y, text);
x += ItemInfoRenderer.getSpaceX();
NumberRenderer.drawRightNumber(x, y, item.getPow());
x += 42;
text = root.queryCommand('hit_capacity');
ItemInfoRenderer.drawKeyword(x, y, text);
x += ItemInfoRenderer.getSpaceX();
NumberRenderer.drawRightNumber(x, y, item.getHit());
},
getItemSentenceCount: function(item) {
return 1;
}
}
);
ItemSentence.CriticalAndRange = defineObject(BaseItemSentence,
{
drawItemSentence: function(x, y, item) {
var text;
text = root.queryCommand('critical_capacity');
ItemInfoRenderer.drawKeyword(x, y, text);
x += ItemInfoRenderer.getSpaceX();
NumberRenderer.drawRightNumber(x, y, item.getCritical());
x += 42;
text = root.queryCommand('range_capacity');
ItemInfoRenderer.drawKeyword(x, y, text);
x += ItemInfoRenderer.getSpaceX();
this._drawRange(x, y, item);
},
getItemSentenceCount: function(item) {
return 1;
},
_drawRange: function(x, y, item) {
var startRange = item.getStartRange();
var endRange = item.getEndRange();
var textui = root.queryTextUI('default_window');
var color = textui.getColor();
var font = textui.getFont();
if (startRange === endRange) {
NumberRenderer.drawRightNumber(x, y, startRange);
}
else {
NumberRenderer.drawRightNumber(x, y, startRange);
TextRenderer.drawKeywordText(x + 17, y, StringTable.SignWord_WaveDash, -1, color, font);
NumberRenderer.drawRightNumber(x + 40, y, endRange);
}
}
}
);
ItemSentence.WeaponLevelAndWeight = defineObject(BaseItemSentence,
{
drawItemSentence: function(x, y, item) {
var text;
var dx = 0;
if (this._isWeaponLevelDisplayable(item)) {
text = root.queryCommand('wlv_param');
ItemInfoRenderer.drawKeyword(x, y, text);
x += ItemInfoRenderer.getSpaceX();
NumberRenderer.drawRightNumber(x, y, item.getWeaponLevel());
x += 42;
}
if (this._isWeightDisplayable(item)) {
text = root.queryCommand('weight_capacity');
ItemInfoRenderer.drawKeyword(x, y, text);
x += ItemInfoRenderer.getSpaceX();
NumberRenderer.drawRightNumber(x, y, item.getWeight());
}
},
getItemSentenceCount: function(item) {
var isWeaponLevel = this._isWeaponLevelDisplayable(item);
var isWeight = this._isWeightDisplayable(item);
return (isWeaponLevel || isWeight) ? 1 : 0;
},
_isWeaponLevelDisplayable: function(item) {
if (!item.isWeapon()) {
return false;
}
return DataConfig.isWeaponLevelDisplayable();
},
_isWeightDisplayable: function(item) {
// アイテムについては、重さが0の場合は、その時点で非表示とする
if (!item.isWeapon() && item.getWeight() === 0) {
return false;
}
return DataConfig.isItemWeightDisplayable();
}
}
);
ItemSentence.AdditionState = defineObject(BaseItemSentence,
{
drawItemSentence: function(x, y, item) {
var text, stateInvocation;
var textui = root.queryTextUI('default_window');
var color = textui.getColor();
var font = textui.getFont();
if (!this._isState(item)) {
return;
}
stateInvocation = item.getStateInvocation();
text = StringTable.State_Addition;
ItemInfoRenderer.drawKeyword(x, y, text);
x += ItemInfoRenderer.getSpaceX();
text = InvocationRenderer.getInvocationText(stateInvocation.getInvocationValue(), stateInvocation.getInvocationType());
TextRenderer.drawKeywordText(x, y, stateInvocation.getState().getName() + ' ' + text, -1, color, font);
},
getItemSentenceCount: function(item) {
return this._isState(item) ? 1 : 0;
},
_isState: function(item) {
return item.getStateInvocation().getState() !== null;
}
}
);
ItemSentence.WeaponOption = defineObject(BaseItemSentence,
{
drawItemSentence: function(x, y, item) {
var text;
var attackCount = item.getAttackCount();
if (attackCount > 1) {
ItemInfoRenderer.drawKeyword(x, y, attackCount + StringTable.ItemWord_MultiAttack);
x += 100;
}
text = this._getWeaponOptionText(item);
if (text !== '') {
ItemInfoRenderer.drawKeyword(x, y, text);
}
},
getItemSentenceCount: function(item) {
return (item.getAttackCount() > 1 || item.getWeaponOption() !== WeaponOption.NONE) ? 1 : 0;
},
_getWeaponOptionText: function(item) {
var text;
var option = item.getWeaponOption();
if (option === WeaponOption.HPABSORB) {
text = StringTable.WeaponOption_HpAbsorb;
}
else if (option === WeaponOption.NOGUARD) {
text = StringTable.WeaponOption_NoGuard;
}
else if (option === WeaponOption.HPMINIMUM) {
text = StringTable.WeaponOption_HpMinimum;
}
else if (option === WeaponOption.HALVEATTACK) {
text = StringTable.WeaponOption_HalveAttack;
}
else if (option === WeaponOption.HALVEATTACKBREAK) {
text = StringTable.WeaponOption_HalveAttackBreak;
}
else if (option === WeaponOption.SEALATTACK) {
text = StringTable.WeaponOption_SealAttack;
}
else if (option === WeaponOption.SEALATTACKBREAK) {
text = StringTable.WeaponOption_SealAttackBreak;
}
else {
text = '';
}
return text;
}
}
);
ItemSentence.Effective = defineObject(BaseItemSentence,
{
_aggregationViewer: null,
setParentWindow: function(itemInfoWindow) {
var item = itemInfoWindow.getInfoItem();
var aggregation = this._getAggregation(item);
BaseItemSentence.setParentWindow.call(this, itemInfoWindow);
this._aggregationViewer = createObject(AggregationViewer);
this._aggregationViewer.setAggregationViewer(aggregation);
},
moveAggregationViewer: function() {
return MoveResult.CONTINUE;
},
drawItemSentence: function(x, y, item) {
this._aggregationViewer.drawAggregationViewer(x, y, this._getName());
},
getItemSentenceCount: function(item) {
return this._aggregationViewer.getAggregationViewerCount();
},
_getName: function() {
return root.queryCommand('effective_capacity');
},
_getAggregation: function(item) {
return item.getEffectiveAggregation();
}
}
);
ItemSentence.ReverseWeapon = defineObject(BaseItemSentence,
{
drawItemSentence: function(x, y, item) {
var text;
if (this.getItemSentenceCount(item) === 1) {
text = Miscellaneous.isPhysicsBattle(item) ? StringTable.ReverseWeapon_Physics : StringTable.ReverseWeapon_Magic;
ItemInfoRenderer.drawKeyword(x, y, text);
}
},
getItemSentenceCount: function(item) {
return (item.isWeapon() && item.isReverseWeapon()) ? 1 : 0;
}
}
);
ItemSentence.ResistState = defineObject(BaseItemSentence,
{
drawItemSentence: function(x, y, item) {
ItemInfoRenderer.drawState(x, y, item.getStateGroup(), false);
},
getItemSentenceCount: function(item) {
return ItemInfoRenderer.getStateCount(item.getStateGroup());
}
}
);
ItemSentence.Info = defineObject(BaseItemSentence,
{
_itemInfo: null,
setParentWindow: function(itemInfoWindow) {
var item = itemInfoWindow.getInfoItem();
BaseItemSentence.setParentWindow.call(this, itemInfoWindow);
this._itemInfo = ItemPackageControl.getItemInfoObject(item);
if (this._itemInfo === null) {
return;
}
this._itemInfo.setInfoItem(item);
},
moveItemSentence: function() {
if (this._itemInfo === null) {
return MoveResult.CONTINUE;
}
return this._itemInfo.moveItemInfoCycle();
},
drawItemSentence: function(x, y, item) {
if (this._itemInfo === null) {
return;
}
this._itemInfo.drawItemInfoCycle(x, y);
},
getItemSentenceCount: function(item) {
if (this._itemInfo === null) {
return 0;
}
return this._itemInfo.getInfoPartsCount();
}
}
);
ItemSentence.Skill = defineObject(BaseItemSentence,
{
drawItemSentence: function(x, y, item) {
var refList = item.getSkillReferenceList();
if (refList.getTypeCount() === 0) {
return 0;
}
ItemInfoRenderer.drawKeyword(x, y, root.queryCommand('skill_object'));
x += ItemInfoRenderer.getSpaceX();
ItemInfoRenderer.drawList(x, y, refList);
},
getItemSentenceCount: function(item) {
var refList = item.getSkillReferenceList();
return refList.getTypeCount() - refList.getHiddenCount();
}
}
);
ItemSentence.Target = defineObject(BaseItemSentence,
{
_aggregationViewer: null,
_matchtype: 0,
setParentWindow: function(itemInfoWindow) {
var item = itemInfoWindow.getInfoItem();
var aggregation = this._getAggregation(item);
BaseItemSentence.setParentWindow.call(this, itemInfoWindow);
this._aggregationViewer = createObject(AggregationViewer);
this._aggregationViewer.setEnabled(DataConfig.isAggregationVisible());
this._aggregationViewer.setAggregationViewer(aggregation);
this._matchtype = aggregation.getMatchType();
},
moveAggregationViewer: function() {
return MoveResult.CONTINUE;
},
drawItemSentence: function(x, y, item) {
this._aggregationViewer.drawAggregationViewer(x, y, this._getMatchName());
},
getItemSentenceCount: function(item) {
return this._aggregationViewer.getAggregationViewerCount();
},
_getMatchName: function() {
var text;
if (this._matchtype === MatchType.MATCH) {
text = StringTable.Aggregation_Match;
}
else if (this._matchtype === MatchType.MISMATCH) {
text = StringTable.Aggregation_Mismatch;
}
else if (this._matchtype === MatchType.MATCHALL) {
text = StringTable.Aggregation_MatchAll;
}
else {
text = StringTable.Aggregation_MismatchAll;
}
return text;
},
_getAggregation: function(item) {
return item.getTargetAggregation();
}
}
);
ItemSentence.Only = defineObject(BaseItemSentence,
{
_aggregationViewer: null,
setParentWindow: function(itemInfoWindow) {
var item = itemInfoWindow.getInfoItem();
var aggregation = this._getAggregation(item);
BaseItemSentence.setParentWindow.call(this, itemInfoWindow);
this._aggregationViewer = createObject(AggregationViewer);
this._aggregationViewer.setAggregationViewer(aggregation);
},
moveAggregationViewer: function() {
return MoveResult.CONTINUE;
},
drawItemSentence: function(x, y, item) {
this._aggregationViewer.drawAggregationViewer(x, y, this._getName());
},
getItemSentenceCount: function(item) {
return this._aggregationViewer.getAggregationViewerCount();
},
_getName: function() {
return root.queryCommand('only_capacity');
},
_getAggregation: function(item) {
return item.getAvailableAggregation();
}
}
);
ItemSentence.Bonus = defineObject(BaseItemSentence,
{
drawItemSentence: function(x, y, item) {
var i, n;
var count = ParamGroup.getParameterCount();
for (i = 0; i < count; i++) {
n = ParamGroup.getParameterBonus(item, i);
if (n !== 0) {
break;
}
}
if (i === count) {
return 0;
}
ItemInfoRenderer.drawKeyword(x, y, root.queryCommand('support_capacity'));
x += ItemInfoRenderer.getSpaceX();
ItemInfoRenderer.drawDoping(x, y, item, true);
},
getItemSentenceCount: function(item) {
return ItemInfoRenderer.getDopingCount(item, true);
}
}
);
var ItemInfoRenderer = {
drawKeyword: function(x, y, text) {
var textui = this.getTextUI();
var color = ColorValue.KEYWORD;
var font = textui.getFont();
TextRenderer.drawKeywordText(x, y, text, -1, color, font);
},
drawList: function(x, y, refList) {
var i, data;
var count = refList.getTypeCount();
var objectType = refList.getObjectType();
var isCheck = false;
var textui = this.getTextUI();
var color = textui.getColor();
var font = textui.getFont();
if (objectType === ObjectType.SKILL || objectType === ObjectType.STATE) {
isCheck = true;
}
// 名前の長さは一定でないため、同じ行に複数描画するのは困難。
// このため、名前の数だけ行も増えていく。
for (i = 0 ; i < count; i++) {
data = refList.getTypeData(i);
if (!isCheck || !data.isHidden()) {
TextRenderer.drawKeywordText(x, y, data.getName(), -1, color, font);
y += this.getSpaceY();
}
}
},
getSpaceX: function() {
return 60;
},
getSpaceY: function() {
return 25;
},
getTextUI: function() {
return root.queryTextUI('default_window');
},
getDopingCount: function(item, isParameter) {
var i, n;
var count = ParamGroup.getParameterCount();
var count2 = 0;
for (i = 0; i < count; i++) {
if (isParameter) {
n = ParamGroup.getParameterBonus(item, i);
}
else {
n = ParamGroup.getDopingParameter(item, i);
}
if (n !== 0) {
count2++;
}
}
return count2;
},
drawDoping: function(x, y, item, isParameter) {
var i, n, text;
var count = ParamGroup.getParameterCount();
var count2 = 0;
var xBase = x;
var textui = this.getTextUI();
var color = textui.getColor();
var font = textui.getFont();
for (i = 0; i < count; i++) {
if (isParameter) {
n = ParamGroup.getParameterBonus(item, i);
}
else {
n = ParamGroup.getDopingParameter(item, i);
}
if (n !== 0) {
text = ParamGroup.getParameterName(i);
TextRenderer.drawKeywordText(x, y, text, -1, color, font);
x += TextRenderer.getTextWidth(text, font) + 5;
TextRenderer.drawSignText(x, y, n > 0 ? ' + ': ' - ');
x += 10;
x += DefineControl.getNumberSpace();
if (n < 0) {
n *= -1;
}
NumberRenderer.drawRightNumber(x, y, n);
x += 20;
y += this.getSpaceY();
count2++;
x = xBase;
}
}
return count2;
},
getStateCount: function(stateGroup) {
var count, refList;
if (stateGroup.isAllBadState()) {
count = 1;
}
else {
refList = stateGroup.getStateReferenceList();
count = refList.getTypeCount() - refList.getHiddenCount();
}
return count;
},
drawState: function(x, y, stateGroup, isRecovery) {
var text;
var textui = this.getTextUI();
var color = textui.getColor();
var font = textui.getFont();
if (this.getStateCount(stateGroup) === 0) {
return;
}
if (isRecovery) {
text = StringTable.State_Recovery;
}
else {
text = StringTable.State_Regist;
}
ItemInfoRenderer.drawKeyword(x, y, text);
x += ItemInfoRenderer.getSpaceX();
if (stateGroup.isAllBadState()) {
TextRenderer.drawKeywordText(x, y, StringTable.State_AllBadState, -1, color, font);
}
else {
ItemInfoRenderer.drawList(x, y, stateGroup.getStateReferenceList());
}
}
};
var AggregationViewer = defineObject(BaseObject,
{
_arr: null,
_isEnabled: true,
setEnabled: function(isEnabled) {
this._isEnabled = isEnabled;
},
setAggregationViewer: function(aggregation) {
var i, count, obj;
this._arr = [];
if (!this._isEnabled) {
return;
}
count = aggregation.getObjectCount();
for (i = 0; i < count; i++) {
obj = {};
obj.name = aggregation.getObjectData(i).getName();
obj.objecttype = aggregation.getObjectType(i);
if (this._isUsed(this._arr, obj.name)) {
continue;
}
this._arr.push(obj);
}
},
moveAggregationViewer: function() {
return MoveResult.CONTINUE;
},
drawAggregationViewer: function(x, y, name) {
if (this._arr.length === 0) {
return 0;
}
ItemInfoRenderer.drawKeyword(x, y, name);
x += ItemInfoRenderer.getSpaceX();
this._drawList(x, y);
},
getAggregationViewerCount: function() {
return this._arr.length;
},
_drawList: function(x, y) {
var i, obj, name, objecttype, suffix;
var count = this._arr.length;
var textui = ItemInfoRenderer.getTextUI();
var color = textui.getColor();
var font = textui.getFont();
for (i = 0 ; i < count; i++) {
obj = this._arr[i];
name = obj.name;
objecttype = obj.objecttype;
if (objecttype === ObjectType.WEAPON) {
suffix = StringTable.Aggregation_SuffixEquipment;
}
else if (objecttype === ObjectType.ITEM || objecttype === ObjectType.SKILL) {
suffix = StringTable.Aggregation_SuffixPossession;
}
else if (objecttype === ObjectType.STATE) {
suffix = StringTable.Aggregation_SuffixAddition;
}
else {
suffix = '';
}
TextRenderer.drawKeywordText(x, y, name + suffix, -1, color, font);
y += ItemInfoRenderer.getSpaceY();
}
},
_isUsed: function(arr, name) {
var i;
var count = arr.length;
for (i = 0; i < count; i++) {
if (arr[i].name === name) {
return true;
}
}
return false;
}
}
);