新的虽然很好用,但是好难改
This commit is contained in:
parent
0d5a26465b
commit
355614e0b9
|
@ -2,8 +2,8 @@
|
|||
const localTranslating = {
|
||||
skill_parse: {
|
||||
skill: {
|
||||
unknown: ()=>`未知的技能类型`,
|
||||
active_turns: (turns, activeElement)=>[`${turns}回合内,`, activeElement],
|
||||
unknown: tp`未知的技能类型`,
|
||||
active_turns: tp`${'turns'}回合内,${'active'}`,
|
||||
random_skills: (skillList)=>[`随机执行以下技能:`, skillList],
|
||||
delay: ()=> `将敌人的攻击延迟`,
|
||||
mass_attack: ()=> `所有攻击变为全体攻击`,
|
||||
|
@ -16,30 +16,33 @@ const localTranslating = {
|
|||
follow_attack: (valueElement)=> [`消除宝珠的回合,以`, valueElement, `的伤害追打敌人`],
|
||||
auto_heal: (valueElement)=> [`消除宝珠的回合,回复`, valueElement, `的 HP`],
|
||||
ctw: (valueElement)=> [valueElement, `内时间停止,可以任意移动宝珠`],
|
||||
gravity: (valueElement)=> [`造成敌方`, valueElement, `的伤害`],
|
||||
gravity: tp`造成${'target'}${'value'}的伤害`,//(valueElement)=> [`造成敌方`, valueElement, `的伤害`],
|
||||
resolve: (stats, valueElement, probability)=> [probability ? `有${(probability* 100).keepCounts()}%的几率`:'',`如当前`,valueElement,`,受到单一次致命攻击时,将会以1点 HP 生还`],
|
||||
resolve: (stats, valueElement, probability)=> [`如`, stats, `≧` , valueElement, probability<100 ? `,有${probability}%的几率`:'',`受到单一次致命攻击时,将会以1点 HP 生还`],
|
||||
},
|
||||
value: {
|
||||
unknown: (type)=>`[ 未知数值: ${type}]`,
|
||||
mul: (value, showPercent) => showPercent ? `${(value * 100).keepCounts()}%` : `×${value.keepCounts()}倍`,
|
||||
const: (value, unit)=> `${value}${unit ? ` ${unit}` : ''}`,
|
||||
mul_maxhp: (value, stats, showPercent) => showPercent ? [stats, `的${(value * 100).keepCounts()}%`] : [stats,`×${value.keepCounts()}倍`],
|
||||
mul_hp: (value, stats, showPercent) => showPercent ? [stats, `的${(value * 100).keepCounts()}%`] : [stats,`×${value.keepCounts()}倍`],
|
||||
mul_atk: (value, stats, showPercent) => showPercent ? [stats, `的${(value * 100).keepCounts()}%`] : [stats,`×${value.keepCounts()}倍`],
|
||||
mul_rcv: (value, stats, showPercent) => showPercent ? [stats, `的${(value * 100).keepCounts()}%`] : [stats,`×${value.keepCounts()}倍`],
|
||||
},
|
||||
unknown: tp`[ 未知数值: ${'type'}]`,
|
||||
const: tp`${'value'}${'unit'}`, // (value, unit)=> `${value}${unit ? ` ${unit}` : ''}`,
|
||||
mul_percent: tp`${'value'}%`,
|
||||
mul_times: tp`×${'value'}倍`,
|
||||
mul_of_percent: tp`${'stats'}的${'value'}%`,
|
||||
mul_of_times: tp`${'stats'}×${'value'}倍`,
|
||||
},
|
||||
target: {
|
||||
self: tp`自身`,
|
||||
enemy: tp`敌人`,
|
||||
},
|
||||
stats: {
|
||||
unknown: (type)=>`[ 未知状态: ${type}]`,
|
||||
maxhp: ()=>`最大HP`,
|
||||
hp: (enemy)=>`${enemy?`当前`:`自身`}HP`,
|
||||
atk: (enemy)=>`${enemy?`当前`:`自身`}攻击力`,
|
||||
rcv: (enemy)=>`${enemy?`当前`:`自身`}回复力`,
|
||||
teamatk: ()=>`队伍攻击力`,
|
||||
teamrcv: ()=>`队伍回复力`,
|
||||
unknown: tp`[ 未知状态: ${'type'}]`,
|
||||
maxhp: tp`最大HP`,
|
||||
hp: tp`HP`,
|
||||
atk: tp`攻击力`,
|
||||
rcv: tp`回复力`,
|
||||
teamatk: tp`队伍攻击力`,
|
||||
teamrcv: tp`队伍回复力`,
|
||||
},
|
||||
unit: {
|
||||
seconds : `秒`,
|
||||
seconds : tp`秒`,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
//带标签的模板字符串
|
||||
function tp(strings, ...keys) {
|
||||
return (function(...values) {
|
||||
let dict = values[values.length - 1] || {};
|
||||
let fragment = document.createDocumentFragment();
|
||||
fragment.appendChild(document.createTextNode(strings[0]));
|
||||
let result = [strings[0]];
|
||||
keys.forEach(function(key, i) {
|
||||
let value = Number.isInteger(key) ? values[key] : dict[key];
|
||||
if (typeof value == "string" || typeof value == "number")
|
||||
{
|
||||
value = document.createTextNode(value);
|
||||
}
|
||||
try{
|
||||
console.log(value);
|
||||
fragment.appendChild(value);
|
||||
}catch(e)
|
||||
{
|
||||
console.log(value, e);
|
||||
console.log(keys, values);
|
||||
}
|
||||
fragment.appendChild(document.createTextNode(strings[i + 1]));
|
||||
});
|
||||
return fragment;
|
||||
});
|
||||
}
|
||||
|
||||
const Attributes = {
|
||||
/*0: "Fire",
|
||||
1: "Water",
|
||||
|
@ -681,15 +708,20 @@ function renderSkill(skill, option = {})
|
|||
}
|
||||
const fragment = document.createDocumentFragment();
|
||||
if (typeof localTranslating == "undefined") return fragment;
|
||||
const tsp = localTranslating.skill_parse;
|
||||
const tsps = localTranslating.skill_parse.skill;
|
||||
const tspu = localTranslating.skill_parse.unit;
|
||||
const tspt = localTranslating.skill_parse.stats;
|
||||
switch (skill.kind) {
|
||||
case SkillKinds.Unknown: {
|
||||
appendToFragment(tsps.unknown());
|
||||
break;
|
||||
}
|
||||
case SkillKinds.ActiveTurns: { //有回合的行动
|
||||
appendToFragment(tsps.active_turns(skill.turns, renderSkill(skill.skill, { forTurns: true })));
|
||||
appendToFragment(tsps.active_turns({
|
||||
turns: skill.turns,
|
||||
active: renderSkill(skill.skill, { forTurns: true }),
|
||||
}));
|
||||
break;
|
||||
}
|
||||
case SkillKinds.RandomSkills: { //随机技能
|
||||
|
@ -742,7 +774,7 @@ function renderSkill(skill, option = {})
|
|||
}
|
||||
case SkillKinds.TimeExtend: { //时间变化buff
|
||||
appendToFragment(createIcon("status-time", SkillValue.isLess(skill.value) ? "time-decr" : "time-incr"));
|
||||
appendToFragment(tsps.time_extend(renderValue(skill.value, tspu.seconds, { showsPlusSign:true, showPercent:true })));
|
||||
appendToFragment(tsps.time_extend(renderValue(skill.value, { unit: tspu.seconds, showsPlusSign:true, showPercent:true })));
|
||||
break;
|
||||
}
|
||||
case SkillKinds.FollowAttack: { //队长技追打
|
||||
|
@ -756,16 +788,21 @@ function renderSkill(skill, option = {})
|
|||
}
|
||||
case SkillKinds.CTW: { //时间暂停
|
||||
appendToFragment(createIcon("ctw"));
|
||||
appendToFragment(tsps.ctw(renderValue(skill.value, tspu.seconds)));
|
||||
appendToFragment(tsps.ctw(renderValue(skill.value, { unit: tspu.seconds })));
|
||||
break;
|
||||
}
|
||||
case SkillKinds.Gravity: { //重力
|
||||
appendToFragment(tsps.gravity(renderValue(skill.value, null, { showPercent:true, enemy: true })));
|
||||
console.log(skill.value)
|
||||
appendToFragment(tsps.gravity({
|
||||
icon: createIcon("gravity"),
|
||||
target: tsp.target.enemy(),
|
||||
value: renderValue(skill.value, { showPercent:true }),
|
||||
}));
|
||||
break;
|
||||
}
|
||||
case SkillKinds.Resolve: { //根性
|
||||
appendToFragment(createIcon("resolve"));
|
||||
appendToFragment(tsps.resolve(renderStat('hp', true), renderValue(skill.min, null, { showPercent:true }), skill.condition.probability));
|
||||
appendToFragment(tsps.resolve(renderStat('hp'), renderValue(skill.min, { showPercent:true }), skill.condition.probability));
|
||||
break;
|
||||
}
|
||||
/*
|
||||
|
@ -1065,32 +1102,27 @@ function renderSkill(skill, option = {})
|
|||
}
|
||||
*/
|
||||
default: {
|
||||
console.log(skill.kind, skill);
|
||||
console.log("未处理的技能类型",skill.kind, skill);
|
||||
appendToFragment(skill.kind);
|
||||
}
|
||||
}
|
||||
return fragment;
|
||||
};
|
||||
|
||||
function renderStat(stat, enemy) {
|
||||
function renderStat(stat) {
|
||||
function appendToFragment(arg){
|
||||
return _appendToFragment(fragment, arg);
|
||||
}
|
||||
function newSpan(str , type)
|
||||
{
|
||||
const span = document.createElement("span");
|
||||
span.className = "cardskill-stats";
|
||||
span.setAttribute("data-cardskill-stats", type);
|
||||
span.textContent = str;
|
||||
return span;
|
||||
}
|
||||
const fragment = document.createDocumentFragment();
|
||||
if (typeof localTranslating == "undefined") return fragment;
|
||||
const tsps = localTranslating.skill_parse.stats;
|
||||
if (tsps[stat])
|
||||
appendToFragment(newSpan(tsps[stat](enemy), stat));
|
||||
const tspt = localTranslating.skill_parse.stats;
|
||||
if (tspt[stat])
|
||||
appendToFragment(tspt[stat]());
|
||||
else
|
||||
appendToFragment(tsps.unknown(stat));
|
||||
{
|
||||
console.log("未知状态类型",stat);
|
||||
appendToFragment(tspt.unknown({ type: stat }));
|
||||
}
|
||||
return fragment;
|
||||
}
|
||||
/*
|
||||
|
@ -1226,36 +1258,115 @@ function renderPowerUp(powerUp: SkillPowerUp) {
|
|||
}
|
||||
}
|
||||
*/
|
||||
function renderValue(_value, unit, option = {}) {
|
||||
function renderValue(_value, option = {}) {
|
||||
function appendToFragment(arg){
|
||||
return _appendToFragment(fragment, arg);
|
||||
}
|
||||
const fragment = document.createDocumentFragment();
|
||||
if (typeof localTranslating == "undefined") return fragment;
|
||||
const tspv = localTranslating.skill_parse.value;
|
||||
const od = option.decimalDigits, os = option.showsPlusSign;
|
||||
switch (_value.kind) {
|
||||
case SkillValueKind.Percent: {
|
||||
appendToFragment(tspv.mul(_value.value, option.showPercent));
|
||||
appendToFragment(
|
||||
option.showPercent ?
|
||||
tspv.mul_percent({value: (_value.value * 100).keepCounts(od,os)}) :
|
||||
tspv.mul_times({value: _value.value.keepCounts(od,os)})
|
||||
);
|
||||
break;
|
||||
}
|
||||
case SkillValueKind.Constant: {
|
||||
appendToFragment(tspv.const((option.showsPlusSign && _value.value >= 0 ? "+" : "") + _value.value.keepCounts(), unit));
|
||||
appendToFragment(
|
||||
tspv.const({
|
||||
value: _value.value.keepCounts(od,os),
|
||||
unit: option.unit ? option.unit() : undefined,
|
||||
})
|
||||
);
|
||||
break;
|
||||
}
|
||||
case SkillValueKind.xMaxHP: {
|
||||
appendToFragment(tspv.mul_maxhp(_value.value, renderStat('maxhp'), option.showPercent));
|
||||
console.log(renderStat('maxhp'))
|
||||
appendToFragment(
|
||||
option.showPercent ?
|
||||
tspv.mul_of_percent({
|
||||
value: (_value.value * 100).keepCounts(od,os),
|
||||
stats: renderStat('maxhp'),
|
||||
}) :
|
||||
tspv.mul_of_times({
|
||||
value: _value.value.keepCounts(od,os),
|
||||
stats: renderStat('maxhp'),
|
||||
})
|
||||
);
|
||||
break;
|
||||
}
|
||||
case SkillValueKind.xHP: {
|
||||
appendToFragment(tspv.mul_hp(_value.value, renderStat('hp', option.enemy), option.showPercent));
|
||||
appendToFragment(
|
||||
option.showPercent ?
|
||||
tspv.mul_of_percent({
|
||||
value: (_value.value * 100).keepCounts(od,os),
|
||||
stats: renderStat('hp'),
|
||||
}) :
|
||||
tspv.mul_of_times({
|
||||
value: _value.value.keepCounts(od,os),
|
||||
stats: renderStat('hp'),
|
||||
})
|
||||
);
|
||||
break;
|
||||
}
|
||||
case SkillValueKind.xATK: {
|
||||
appendToFragment(tspv.mul_atk(_value.value, renderStat('atk', option.enemy), option.showPercent));
|
||||
appendToFragment(
|
||||
option.showPercent ?
|
||||
tspv.mul_of_percent({
|
||||
value: (_value.value * 100).keepCounts(od,os),
|
||||
stats: renderStat('atk'),
|
||||
}) :
|
||||
tspv.mul_of_times({
|
||||
value: _value.value.keepCounts(od,os),
|
||||
stats: renderStat('atk'),
|
||||
})
|
||||
);
|
||||
break;
|
||||
}
|
||||
case SkillValueKind.xRCV: {
|
||||
appendToFragment(tspv.mul_rcv(_value.value, renderStat('rcv', option.enemy), option.showPercent));
|
||||
appendToFragment(
|
||||
option.showPercent ?
|
||||
tspv.mul_of_percent({
|
||||
value: (_value.value * 100).keepCounts(od,os),
|
||||
stats: renderStat('rcv'),
|
||||
}) :
|
||||
tspv.mul_of_times({
|
||||
value: _value.value.keepCounts(od,os),
|
||||
stats: renderStat('rcv'),
|
||||
})
|
||||
);
|
||||
break;
|
||||
}
|
||||
case SkillValueKind.xTeamRCV: {
|
||||
appendToFragment(
|
||||
option.showPercent ?
|
||||
tspv.mul_of_percent({
|
||||
value: (_value.value * 100).keepCounts(od,os),
|
||||
stats: renderStat('teamrcv'),
|
||||
}) :
|
||||
tspv.mul_of_times({
|
||||
value: _value.value.keepCounts(od,os),
|
||||
stats: renderStat('teamrcv'),
|
||||
})
|
||||
);
|
||||
break;
|
||||
}
|
||||
case SkillValueKind.xTeamATK: {
|
||||
appendToFragment(
|
||||
option.showPercent ?
|
||||
tspv.mul_of_percent({
|
||||
value: (_value.value * 100).keepCounts(od,os),
|
||||
stats: renderStat('teamatk'),
|
||||
}) :
|
||||
tspv.mul_of_times({
|
||||
value: _value.value.keepCounts(od,os),
|
||||
stats: renderStat('teamatk'),
|
||||
})
|
||||
);
|
||||
break;
|
||||
}
|
||||
/*
|
||||
|
@ -1311,8 +1422,8 @@ function renderValue(_value, unit, option = {}) {
|
|||
}
|
||||
*/
|
||||
default: {
|
||||
console.log(_value.kind, _value);
|
||||
appendToFragment(tspv.unknown(_value.kind));
|
||||
console.log("未知数值类型",_value.kind, _value);
|
||||
appendToFragment(tspv.unknown({ type: _value.kind }));
|
||||
}
|
||||
}
|
||||
return fragment;
|
||||
|
|
|
@ -59,9 +59,9 @@ Number.prototype.prefixInteger = function(length, useGrouping = false)
|
|||
});
|
||||
}
|
||||
//最多保留N位小数,不留0
|
||||
Number.prototype.keepCounts = function(n = 2)
|
||||
Number.prototype.keepCounts = function(decimalDigits = 2, plusSign = false)
|
||||
{
|
||||
return Number(this.toFixed(n)).toString();
|
||||
return (plusSign && this > 0 ? '+' : '') + Number(this.toFixed(decimalDigits)).toString();
|
||||
}
|
||||
//大数字缩短长度,默认返回本地定义字符串
|
||||
Number.prototype.bigNumberToString = function()
|
||||
|
|
Loading…
Reference in New Issue