icon in choices
This commit is contained in:
parent
bd0e8e2f10
commit
337827c17a
@ -1528,13 +1528,13 @@ return code;
|
|||||||
*/;
|
*/;
|
||||||
|
|
||||||
choicesContext
|
choicesContext
|
||||||
: '子选项' EvalString '颜色' EvalString? Colour BGNL? Newline action+
|
: '子选项' EvalString '图标' IdString? '颜色' EvalString? Colour BGNL? Newline action+
|
||||||
|
|
||||||
|
|
||||||
/* choicesContext
|
/* choicesContext
|
||||||
tooltip : 选项的选择
|
tooltip : 选项的选择
|
||||||
helpUrl : https://h5mota.com/games/template/docs/#/event?id=choices%EF%BC%9A%E7%BB%99%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E9%80%89%E9%A1%B9
|
helpUrl : https://h5mota.com/games/template/docs/#/event?id=choices%EF%BC%9A%E7%BB%99%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E9%80%89%E9%A1%B9
|
||||||
default : ["提示文字:红钥匙",""]
|
default : ["提示文字:红钥匙","",""]
|
||||||
colour : this.subColor
|
colour : this.subColor
|
||||||
if (EvalString_1) {
|
if (EvalString_1) {
|
||||||
var colorRe = /^(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d),(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d),(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(,0(\.\d+)?|,1)?$/;
|
var colorRe = /^(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d),(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d),(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(,0(\.\d+)?|,1)?$/;
|
||||||
@ -1543,7 +1543,8 @@ if (EvalString_1) {
|
|||||||
else
|
else
|
||||||
EvalString_1 = ', "color": "'+EvalString_1+'"';
|
EvalString_1 = ', "color": "'+EvalString_1+'"';
|
||||||
}
|
}
|
||||||
var code = '{"text": "'+EvalString_0+'"'+EvalString_1+', "action": [\n'+action_0+']},\n';
|
IdString_0 = IdString_0?(', "icon": "'+IdString_0+'"'):'';
|
||||||
|
var code = '{"text": "'+EvalString_0+'"'+IdString_0+EvalString_1+', "action": [\n'+action_0+']},\n';
|
||||||
return code;
|
return code;
|
||||||
*/;
|
*/;
|
||||||
|
|
||||||
@ -2411,7 +2412,7 @@ ActionParser.prototype.parseAction = function() {
|
|||||||
var text_choices = null;
|
var text_choices = null;
|
||||||
for(var ii=data.choices.length-1,choice;choice=data.choices[ii];ii--) {
|
for(var ii=data.choices.length-1,choice;choice=data.choices[ii];ii--) {
|
||||||
text_choices=MotaActionBlocks['choicesContext'].xmlText([
|
text_choices=MotaActionBlocks['choicesContext'].xmlText([
|
||||||
choice.text,choice.color,'rgba('+choice.color+')',this.insertActionList(choice.action),text_choices]);
|
choice.text,choice.icon,choice.color,'rgba('+choice.color+')',this.insertActionList(choice.action),text_choices]);
|
||||||
}
|
}
|
||||||
this.next = MotaActionBlocks['choices_s'].xmlText([
|
this.next = MotaActionBlocks['choices_s'].xmlText([
|
||||||
this.isset(data.text)?this.EvalString(data.text):null,'','',text_choices,this.next]);
|
this.isset(data.text)?this.EvalString(data.text):null,'','',text_choices,this.next]);
|
||||||
|
|||||||
@ -64,9 +64,9 @@ editor_blockly = function () {
|
|||||||
MotaActionBlocks['lose_s'].xmlText(),
|
MotaActionBlocks['lose_s'].xmlText(),
|
||||||
MotaActionBlocks['choices_s'].xmlText([
|
MotaActionBlocks['choices_s'].xmlText([
|
||||||
'选择剑或者盾','流浪者','man',MotaActionBlocks['choicesContext'].xmlText([
|
'选择剑或者盾','流浪者','man',MotaActionBlocks['choicesContext'].xmlText([
|
||||||
'剑','',null,MotaActionFunctions.actionParser.parseList([{"type": "openDoor", "loc": [3,3]}]),
|
'剑','','',null,MotaActionFunctions.actionParser.parseList([{"type": "openDoor", "loc": [3,3]}]),
|
||||||
MotaActionBlocks['choicesContext'].xmlText([
|
MotaActionBlocks['choicesContext'].xmlText([
|
||||||
'盾','',null,MotaActionFunctions.actionParser.parseList([{"type": "openDoor", "loc": [9,3]}]),
|
'盾','','',null,MotaActionFunctions.actionParser.parseList([{"type": "openDoor", "loc": [9,3]}]),
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
]),
|
]),
|
||||||
|
|||||||
54
libs/ui.js
54
libs/ui.js
@ -503,6 +503,23 @@ ui.prototype.calTextBoxWidth = function (canvas, content, min_width, max_width)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui.prototype.__getIconInfo = function (id) {
|
||||||
|
var image = null, icon = null;
|
||||||
|
["terrains","animates","items","npcs","enemys"].forEach(function (v) {
|
||||||
|
if (core.isset(core.material.icons[v][id])) {
|
||||||
|
image = core.material.images[v];
|
||||||
|
icon = core.material.icons[v][id];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (image == null) {
|
||||||
|
if (id in core.statusBar.icons) {
|
||||||
|
image = core.statusBar.icons[id];
|
||||||
|
icon = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [image,icon];
|
||||||
|
}
|
||||||
|
|
||||||
ui.prototype.__drawText = function (canvas, content, content_left, content_top, valid_width,
|
ui.prototype.__drawText = function (canvas, content, content_left, content_top, valid_width,
|
||||||
color, per_height, text_font, time) {
|
color, per_height, text_font, time) {
|
||||||
core.setTextAlign(canvas, 'left');
|
core.setTextAlign(canvas, 'left');
|
||||||
@ -550,19 +567,7 @@ ui.prototype.__drawText = function (canvas, content, content_left, content_top,
|
|||||||
if (content.charAt(index+1) == '[' && ((index2=content.indexOf(']', index+1))>=0)) {
|
if (content.charAt(index+1) == '[' && ((index2=content.indexOf(']', index+1))>=0)) {
|
||||||
var str = content.substring(index+2, index2);
|
var str = content.substring(index+2, index2);
|
||||||
// --- 获得图标
|
// --- 获得图标
|
||||||
var image = null, icon = null;
|
var iconInfo = core.ui.__getIconInfo(str), image = iconInfo[0], icon = iconInfo[1];
|
||||||
["terrains","animates","items","npcs","enemys"].forEach(function (v) {
|
|
||||||
if (core.isset(core.material.icons[v][str])) {
|
|
||||||
image = core.material.images[v];
|
|
||||||
icon = core.material.icons[v][str];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (image == null) {
|
|
||||||
if (str in core.statusBar.icons) {
|
|
||||||
image = core.statusBar.icons[str];
|
|
||||||
icon = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (image != null) {
|
if (image != null) {
|
||||||
if (core.isset(valid_width) && offsetx + text_font + 6 > content_left + valid_width) {
|
if (core.isset(valid_width) && offsetx + text_font + 6 > content_left + valid_width) {
|
||||||
index --;
|
index --;
|
||||||
@ -889,8 +894,7 @@ ui.prototype.drawScrollText = function (content, time, callback) {
|
|||||||
|
|
||||||
////// 绘制一个选项界面 //////
|
////// 绘制一个选项界面 //////
|
||||||
ui.prototype.drawChoices = function(content, choices) {
|
ui.prototype.drawChoices = function(content, choices) {
|
||||||
|
choices = core.clone(choices || []);
|
||||||
choices = choices || [];
|
|
||||||
|
|
||||||
var background = core.status.textAttribute.background;
|
var background = core.status.textAttribute.background;
|
||||||
var isWindowSkin = false;
|
var isWindowSkin = false;
|
||||||
@ -914,7 +918,12 @@ ui.prototype.drawChoices = function(content, choices) {
|
|||||||
var globalFont = core.status.globalAttribute.font;
|
var globalFont = core.status.globalAttribute.font;
|
||||||
core.setFont('ui', "bold 17px "+globalFont);
|
core.setFont('ui', "bold 17px "+globalFont);
|
||||||
for (var i = 0; i < choices.length; i++) {
|
for (var i = 0; i < choices.length; i++) {
|
||||||
width = Math.max(width, core.calWidth('ui', core.replaceText(choices[i].text || choices[i]))+30);
|
if (typeof choices[i] === 'string')
|
||||||
|
choices[i] = {"text": choices[i]};
|
||||||
|
choices[i].text = core.replaceText(choices[i].text);
|
||||||
|
choices[i].width = core.calWidth('ui', core.replaceText(choices[i].text));
|
||||||
|
if (core.isset(choices[i].icon)) choices[i].width += 28;
|
||||||
|
width = Math.max(width, choices[i].width+30);
|
||||||
}
|
}
|
||||||
|
|
||||||
var left=parseInt((416 - width) / 2); // 左边界
|
var left=parseInt((416 - width) / 2); // 左边界
|
||||||
@ -1011,14 +1020,23 @@ ui.prototype.drawChoices = function(content, choices) {
|
|||||||
var color = choices[i].color || textColor;
|
var color = choices[i].color || textColor;
|
||||||
if (color instanceof Array) color = core.arrayToRGBA(color);
|
if (color instanceof Array) color = core.arrayToRGBA(color);
|
||||||
core.setFillStyle('ui', color);
|
core.setFillStyle('ui', color);
|
||||||
core.fillText('ui', core.replaceText(choices[i].text || choices[i]), 208, choice_top + 32 * i, null, "bold 17px "+globalFont);
|
var offset = 208;
|
||||||
|
if (core.isset(choices[i].icon)) {
|
||||||
|
var iconInfo = this.__getIconInfo(choices[i].icon), image = iconInfo[0], icon = iconInfo[1];
|
||||||
|
if (image != null) {
|
||||||
|
core.drawImage('ui', image, 0, 32*icon, 32, 32,
|
||||||
|
208 - choices[i].width/2, choice_top + 32*i - 17, 22, 22);
|
||||||
|
offset += 14;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
core.fillText('ui', choices[i].text, offset, choice_top + 32 * i, null, "bold 17px "+globalFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (choices.length>0) {
|
if (choices.length>0) {
|
||||||
if (!core.isset(core.status.event.selection)) core.status.event.selection=0;
|
if (!core.isset(core.status.event.selection)) core.status.event.selection=0;
|
||||||
while (core.status.event.selection<0) core.status.event.selection+=choices.length;
|
while (core.status.event.selection<0) core.status.event.selection+=choices.length;
|
||||||
while (core.status.event.selection>=choices.length) core.status.event.selection-=choices.length;
|
while (core.status.event.selection>=choices.length) core.status.event.selection-=choices.length;
|
||||||
var len = core.calWidth('ui', core.replaceText(choices[core.status.event.selection].text || choices[core.status.event.selection]));
|
var len = choices[core.status.event.selection].width;
|
||||||
if (isWindowSkin)
|
if (isWindowSkin)
|
||||||
this.drawWindowSelector(background, 208-len/2-5, choice_top + 32 * core.status.event.selection - 20, len+10, 28);
|
this.drawWindowSelector(background, 208-len/2-5, choice_top + 32 * core.status.event.selection - 20, len+10, 28);
|
||||||
else
|
else
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user