CG剧情事件完工 #7

Merged
strawberry42271 merged 1 commits from cg/剧情功能 into main 2024-12-11 15:29:01 +08:00
10 changed files with 400 additions and 35 deletions

No files matched your search

+41
View File
@@ -809,6 +809,7 @@ action
: text_0_s
| text_1_s
| text_2_s
| cgtext_s
| moveTextBox_s
| clearTextBox_s
| comment_s
@@ -1059,6 +1060,46 @@ if (block.isCollapsed() || !block.isEnabled() || pos || Int_0 || Bool_0) {
return code+',\n';
*/;
cgtext_s
: '背景' EvalString? '头像' EvalString?'名字' EvalString?'坐标PX' Number'打字间隔' Int? BGNL? Newline
EvalString BGNL? Newline textcgDrawingList* Newline
/* cgtext_s
tooltip : cgtext:显示一段包含cg的文字(剧情)
helpUrl : /_docs/#/instruction
allImages : ['EvalString_0','EvalString_1']
default : ["bg_5043.png","face_050445.png","菲奥奈",-300,0,"这句话显示在对话框内",[{ "name":"tati_050145a.png" , "px": 100,"filter":false }]]
var head ='{ "name": "'+EvalString_1+'", "px": '+Number_0+' }'
var list=',"bodyList": [\n'+textcgDrawingList_0+'\n]'
var code = '{"type": "cgtext", "bg":"'+EvalString_0+'","head":'+head+' ,"name":"'+EvalString_2+'","time":'+Int_0+',"text": "'+EvalString_3+'"'+list+' },\n';
return code;
*/;
textcgDrawingList
: textcgDrawing
| textcgDrawingEmpty;
textcgDrawing
: '立绘' EvalString '绘制坐标' 'x' Number '变暗'Bool? Newline
/* textcgDrawing
tooltip : 立绘
helpUrl : /_docs/#/instruction
default : ["tati_050145a.png",100,false]
colour : this.subColor
allImages : ['EvalString_0']
return '{ "name": "'+EvalString_0+'", "px": '+Number_0+',"filter":'+Bool_0+' }'
*/;
textcgDrawingEmpty
: Newline
/* textcgDrawingEmpty
var code = [];
return code;
*/;
textDrawingList
: textDrawing
| textDrawingEmpty;
+21
View File
@@ -304,6 +304,20 @@ ActionParser.prototype.parseAction = function() {
/* isShadow */false, /*comment*/ null, /*collapsed*/ data._collapsed, /*disabled*/ data._disabled);
}
break;
case "cgtext": // cg对话框
var buildcgDrawing= function (obj) {
obj = MotaActionFunctions.processcgDrawing(obj||[]);
var res = null;
for(var ii=obj.length-1,one;one=obj[ii];ii--) {
res=MotaActionBlocks['textcgDrawing'].xmlText([one[0],one[1],one[2], res]);
}
return res;
}
this.next = MotaActionBlocks['cgtext_s'].xmlText([
data.bg, data.head.name, data.name||"", data.head.px||-300,data.time, data.text,buildcgDrawing(data.bodyList), this.next]);
break;
case "moveTextBox": // 移动对话框
data.loc = data.loc || ['',''];
this.next = MotaActionBlocks['moveTextBox_s'].xmlText([
@@ -1520,6 +1534,13 @@ MotaActionFunctions.processMoveDirections = function (steps) {
return result;
}
MotaActionFunctions.processcgDrawing = function (bodyList) {
var list=[]
bodyList.forEach(function (one) {
list.push([one.name,one.px,one.filter])})
return list;
}
MotaActionFunctions.processMultiLoc = function (EvalString_0, EvalString_1) {
var floorstr = '';
if (EvalString_0 && EvalString_1) {
+1 -1
View File
@@ -1 +1 @@
{"viewportLoc":[0,0],"lastUsed":[{"idnum":72150,"id":"X72150","images":"11.png","x":6,"y":268,"isTile":true,"recent":1733480116896,"frequent":1},{"idnum":70022,"id":"X70022","images":"11.png","x":6,"y":2,"isTile":true,"recent":1733480109538,"frequent":1},{"idnum":71312,"id":"X71312","images":"11.png","x":0,"y":164,"isTile":true,"recent":1733479864240,"frequent":3},{"idnum":71155,"id":"X71155","images":"11.png","x":3,"y":144,"isTile":true,"recent":1733479844880,"frequent":3},{"idnum":71179,"id":"X71179","images":"11.png","x":3,"y":147,"isTile":true,"recent":1733479827824,"frequent":1},{"idnum":71171,"id":"X71171","images":"11.png","x":3,"y":146,"isTile":true,"recent":1733479824776,"frequent":1},{"idnum":70720,"id":"X70720","images":"11.png","x":0,"y":90,"isTile":true,"recent":1733479807527,"frequent":2},{"idnum":70712,"id":"X70712","images":"11.png","x":0,"y":89,"isTile":true,"recent":1733479801697,"frequent":1},{"idnum":70128,"id":"X70128","images":"11.png","x":0,"y":16,"isTile":true,"recent":1733479779872,"frequent":1},{"idnum":70120,"id":"X70120","images":"11.png","x":0,"y":15,"isTile":true,"recent":1733479777840,"frequent":1},{"idnum":30017,"id":"X30017","images":"4.png","x":1,"y":2,"isTile":true,"recent":1733479536712,"frequent":40},{"idnum":90219,"id":"X90219","images":"12.png","x":3,"y":27,"isTile":true,"recent":1733479486440,"frequent":7},{"idnum":60017,"id":"X60017","images":"1.png","x":1,"y":2,"isTile":true,"recent":1733479062059,"frequent":19},{"idnum":30090,"id":"X30090","images":"4.png","x":2,"y":11,"isTile":true,"recent":1733478899449,"frequent":4},{"idnum":30088,"id":"X30088","images":"4.png","x":0,"y":11,"isTile":true,"recent":1733478897346,"frequent":5},{"idnum":30089,"id":"X30089","images":"4.png","x":1,"y":11,"isTile":true,"recent":1733478895777,"frequent":20},{"idnum":30098,"id":"X30098","images":"4.png","x":2,"y":12,"isTile":true,"recent":1733478880163,"frequent":11},{"idnum":30096,"id":"X30096","images":"4.png","x":0,"y":12,"isTile":true,"recent":1733478870115,"frequent":16},{"idnum":30097,"id":"X30097","images":"4.png","x":1,"y":12,"isTile":true,"recent":1733478857065,"frequent":15},{"idnum":40113,"id":"X40113","images":"3.png","x":1,"y":14,"isTile":true,"recent":1733478708924,"frequent":7},{"idnum":40121,"id":"X40121","images":"3.png","x":1,"y":15,"isTile":true,"recent":1733478701179,"frequent":19},{"idnum":40129,"id":"X40129","images":"3.png","x":1,"y":16,"isTile":true,"recent":1733478689514,"frequent":7},{"idnum":130046,"id":"X130046","images":"C2.png","x":6,"y":5,"isTile":true,"recent":1733478647117,"frequent":19},{"idnum":90053,"id":"X90053","images":"12.png","x":5,"y":6,"isTile":true,"recent":1733478577019,"frequent":5},{"idnum":130033,"id":"X130033","images":"C2.png","x":1,"y":4,"isTile":true,"recent":1733478511612,"frequent":6},{"idnum":130034,"id":"X130034","images":"C2.png","x":2,"y":4,"isTile":true,"recent":1733478509092,"frequent":1},{"idnum":130042,"id":"X130042","images":"C2.png","x":2,"y":5,"isTile":true,"recent":1733478507274,"frequent":3},{"idnum":130041,"id":"X130041","images":"C2.png","x":1,"y":5,"isTile":true,"recent":1733478504140,"frequent":2},{"idnum":130040,"id":"X130040","images":"C2.png","x":0,"y":5,"isTile":true,"recent":1733478496378,"frequent":3},{"idnum":130032,"id":"X130032","images":"C2.png","x":0,"y":4,"isTile":true,"recent":1733478488538,"frequent":1},{"idnum":90048,"id":"X90048","images":"12.png","x":0,"y":6,"isTile":true,"recent":1733478330148,"frequent":2},{"idnum":30025,"id":"X30025","images":"4.png","x":1,"y":3,"isTile":true,"recent":1733478313427,"frequent":8},{"idnum":356,"id":"T356","images":"terrains","y":60,"recent":1733478272707,"frequent":4},{"idnum":358,"id":"T358","images":"terrains","y":62,"recent":1733478263418,"frequent":2},{"idnum":357,"id":"T357","images":"terrains","y":61,"recent":1733478259707,"frequent":2},{"idnum":354,"id":"T354","images":"terrains","y":58,"recent":1733478251797,"frequent":4},{"idnum":355,"id":"T355","images":"terrains","y":59,"recent":1733478247643,"frequent":4},{"idnum":353,"id":"T353","images":"terrains","y":57,"recent":1733478244578,"frequent":4},{"idnum":50017,"id":"X50017","images":"2.png","x":1,"y":2,"isTile":true,"recent":1733477093973,"frequent":26},{"idnum":40036,"id":"X40036","images":"3.png","x":4,"y":4,"isTile":true,"recent":1733477044511,"frequent":2},{"idnum":40026,"id":"X40026","images":"3.png","x":2,"y":3,"isTile":true,"recent":1733477029468,"frequent":13},{"idnum":40025,"id":"X40025","images":"3.png","x":1,"y":3,"isTile":true,"recent":1733477028069,"frequent":38},{"idnum":40018,"id":"X40018","images":"3.png","x":2,"y":2,"isTile":true,"recent":1733477025837,"frequent":18},{"idnum":40017,"id":"X40017","images":"3.png","x":1,"y":2,"isTile":true,"recent":1733477023445,"frequent":48},{"idnum":70630,"id":"X70630","images":"11.png","x":6,"y":78,"isTile":true,"recent":1733477006830,"frequent":4},{"idnum":70995,"id":"X70995","images":"11.png","x":3,"y":124,"isTile":true,"recent":1733476987356,"frequent"Line truncated
{"viewportLoc":[0,0],"lastUsed":[{"idnum":72150,"id":"X72150","images":"11.png","x":6,"y":268,"isTile":true,"recent":1733480116896,"frequent":1},{"idnum":70022,"id":"X70022","images":"11.png","x":6,"y":2,"isTile":true,"recent":1733480109538,"frequent":1},{"idnum":71312,"id":"X71312","images":"11.png","x":0,"y":164,"isTile":true,"recent":1733479864240,"frequent":3},{"idnum":71155,"id":"X71155","images":"11.png","x":3,"y":144,"isTile":true,"recent":1733479844880,"frequent":3},{"idnum":71179,"id":"X71179","images":"11.png","x":3,"y":147,"isTile":true,"recent":1733479827824,"frequent":1},{"idnum":71171,"id":"X71171","images":"11.png","x":3,"y":146,"isTile":true,"recent":1733479824776,"frequent":1},{"idnum":70720,"id":"X70720","images":"11.png","x":0,"y":90,"isTile":true,"recent":1733479807527,"frequent":2},{"idnum":70712,"id":"X70712","images":"11.png","x":0,"y":89,"isTile":true,"recent":1733479801697,"frequent":1},{"idnum":70128,"id":"X70128","images":"11.png","x":0,"y":16,"isTile":true,"recent":1733479779872,"frequent":1},{"idnum":70120,"id":"X70120","images":"11.png","x":0,"y":15,"isTile":true,"recent":1733479777840,"frequent":1},{"idnum":30017,"id":"X30017","images":"4.png","x":1,"y":2,"isTile":true,"recent":1733479536712,"frequent":40},{"idnum":90219,"id":"X90219","images":"12.png","x":3,"y":27,"isTile":true,"recent":1733479486440,"frequent":7},{"idnum":60017,"id":"X60017","images":"1.png","x":1,"y":2,"isTile":true,"recent":1733479062059,"frequent":19},{"idnum":30090,"id":"X30090","images":"4.png","x":2,"y":11,"isTile":true,"recent":1733478899449,"frequent":4},{"idnum":30088,"id":"X30088","images":"4.png","x":0,"y":11,"isTile":true,"recent":1733478897346,"frequent":5},{"idnum":30089,"id":"X30089","images":"4.png","x":1,"y":11,"isTile":true,"recent":1733478895777,"frequent":20},{"idnum":30098,"id":"X30098","images":"4.png","x":2,"y":12,"isTile":true,"recent":1733478880163,"frequent":11},{"idnum":30096,"id":"X30096","images":"4.png","x":0,"y":12,"isTile":true,"recent":1733478870115,"frequent":16},{"idnum":30097,"id":"X30097","images":"4.png","x":1,"y":12,"isTile":true,"recent":1733478857065,"frequent":15},{"idnum":40113,"id":"X40113","images":"3.png","x":1,"y":14,"isTile":true,"recent":1733478708924,"frequent":7},{"idnum":40121,"id":"X40121","images":"3.png","x":1,"y":15,"isTile":true,"recent":1733478701179,"frequent":19},{"idnum":40129,"id":"X40129","images":"3.png","x":1,"y":16,"isTile":true,"recent":1733478689514,"frequent":7},{"idnum":130046,"id":"X130046","images":"C2.png","x":6,"y":5,"isTile":true,"recent":1733478647117,"frequent":19},{"idnum":90053,"id":"X90053","images":"12.png","x":5,"y":6,"isTile":true,"recent":1733478577019,"frequent":5},{"idnum":130033,"id":"X130033","images":"C2.png","x":1,"y":4,"isTile":true,"recent":1733478511612,"frequent":6},{"idnum":130034,"id":"X130034","images":"C2.png","x":2,"y":4,"isTile":true,"recent":1733478509092,"frequent":1},{"idnum":130042,"id":"X130042","images":"C2.png","x":2,"y":5,"isTile":true,"recent":1733478507274,"frequent":3},{"idnum":130041,"id":"X130041","images":"C2.png","x":1,"y":5,"isTile":true,"recent":1733478504140,"frequent":2},{"idnum":130040,"id":"X130040","images":"C2.png","x":0,"y":5,"isTile":true,"recent":1733478496378,"frequent":3},{"idnum":130032,"id":"X130032","images":"C2.png","x":0,"y":4,"isTile":true,"recent":1733478488538,"frequent":1},{"idnum":90048,"id":"X90048","images":"12.png","x":0,"y":6,"isTile":true,"recent":1733478330148,"frequent":2},{"idnum":30025,"id":"X30025","images":"4.png","x":1,"y":3,"isTile":true,"recent":1733478313427,"frequent":8},{"idnum":356,"id":"T356","images":"terrains","y":60,"recent":1733478272707,"frequent":4},{"idnum":358,"id":"T358","images":"terrains","y":62,"recent":1733478263418,"frequent":2},{"idnum":357,"id":"T357","images":"terrains","y":61,"recent":1733478259707,"frequent":2},{"idnum":354,"id":"T354","images":"terrains","y":58,"recent":1733478251797,"frequent":4},{"idnum":355,"id":"T355","images":"terrains","y":59,"recent":1733478247643,"frequent":4},{"idnum":353,"id":"T353","images":"terrains","y":57,"recent":1733478244578,"frequent":4},{"idnum":50017,"id":"X50017","images":"2.png","x":1,"y":2,"isTile":true,"recent":1733477093973,"frequent":26},{"idnum":40036,"id":"X40036","images":"3.png","x":4,"y":4,"isTile":true,"recent":1733477044511,"frequent":2},{"idnum":40026,"id":"X40026","images":"3.png","x":2,"y":3,"isTile":true,"recent":1733477029468,"frequent":13},{"idnum":40025,"id":"X40025","images":"3.png","x":1,"y":3,"isTile":true,"recent":1733477028069,"frequent":38},{"idnum":40018,"id":"X40018","images":"3.png","x":2,"y":2,"isTile":true,"recent":1733477025837,"frequent":18},{"idnum":40017,"id":"X40017","images":"3.png","x":1,"y":2,"isTile":true,"recent":1733477023445,"frequent":48},{"idnum":70630,"id":"X70630","images":"11.png","x":6,"y":78,"isTile":true,"recent":1733477006830,"frequent":4},{"idnum":70995,"id":"X70995","images":"11.png","x":3,"y":124,"isTile":true,"recent":1733476987356,"frequent"Line truncated
+4
View File
@@ -94,6 +94,8 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"eve_050704.png",
"eve_050801.png",
"eve_070101.png",
"face_050445.png",
"face_120107.png",
"green.png",
"h25.png",
"hero.png",
@@ -115,6 +117,8 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"t015d97564abe3b6a74.jpg",
"t0187fe5a5fa586419d.jpg",
"t01c16e1361b78b9412.jpg",
"tati_050145a.png",
"tati_120124.png",
"u.png",
"ud.png",
"udl.png",
+22 -22
View File
@@ -1024,30 +1024,29 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
},
"control": {
"saveData": function () {
// 存档操作,此函数应该返回“具体要存档的内容”
// 存档操作,此函数应该返回“具体要存档的内容”
// 差异化存储values
var values = {};
for (var key in core.values) {
if (!core.same(core.values[key], core.data.values[key]))
values[key] = core.clone(core.values[key]);
}
// 差异化存储values
var values = {};
for (var key in core.values) {
if (!core.same(core.values[key], core.data.values[key]))
values[key] = core.clone(core.values[key]);
}
// 要存档的内容
var data = {
'floorId': core.status.floorId,
'hero': core.clone(core.status.hero),
'hard': core.status.hard,
'maps': core.clone(core.maps.saveMap()),
'route': core.encodeRoute(core.status.route),
'values': values,
'version': core.firstData.version,
'guid': core.getGuid(),
"time": new Date().getTime()
};
return data;
},
// 要存档的内容
var data = {
'floorId': core.status.floorId,
'hero': core.clone(core.status.hero),
'hard': core.status.hard,
'maps': core.clone(core.maps.saveMap()),
'route': core.encodeRoute(core.status.route),
'values': values,
'version': core.firstData.version,
'guid': core.getGuid(),
"time": new Date().getTime()
};
return data;
},
"loadData": function (data, callback) {
// 读档操作;从存储中读取了内容后的行为
@@ -1087,6 +1086,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.removeFlag('__fromLoad__');
if (callback) callback();
});
core.doAction()
},
"getStatusLabel": function (name) {
// 返回某个状态英文名的对应中文标签,如atk -> 攻击,def -> 防御等。
Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

+311 -12
View File
@@ -5,31 +5,58 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
// 本函数将在所有资源加载完毕后,游戏开启前被执行
core.ui.statusBar.init();
core.registerEvent("changeMouse", function (data) {
core.changeMouse(data.icon, data.div, data.translate[0], data.translate[1], data.scale[0], data.scale[1], data.angel, data.px, data.py)
if (!main.replayChecking && !core.isReplaying()) core.changeMouse(data.icon, data.div, data.translate[0], data.translate[1], data.scale[0], data.scale[1], data.angel, data.px, data.py)
core.doAction()
})
core.registerEvent("removeMouse", function (data) {
core.removeMouse(data.div)
if (!main.replayChecking && !core.isReplaying()) core.removeMouse(data.div)
core.doAction()
})
core.registerEvent("addPop", function (data) {
core.addPop(data.value, data.px, data.py, data.color, data.boldColor, data.left, data.jump, data.time, data.show, data.font, data.speed)
if (!main.replayChecking && !core.isReplaying()) {
data.value = core.replaceText(data.value)
core.addPop(data.value, data.px, data.py, data.color, data.boldColor, data.left, data.jump, data.time, data.show, data.font, data.speed)
}
core.doAction()
})
core.registerEvent("drawWarning", function (data) {
core.drawWarning(data.x, data.y, data?.text, data?.text2, data?.warning)
setTimeout(() => core.doAction(), 3100)
if (!main.replayChecking && !core.isReplaying()) {
data.text = core.replaceText(data.text)
data.text2 = core.replaceText(data.text2)
core.drawWarning(data.x, data.y, data?.text, data?.text2, data?.warning)
setTimeout(() => core.doAction(), 3100)
} else {
core.doAction();
}
})
core.registerEvent("playStereo", function (data) {
core.playStereo(data.name, data.left, data.right, data.split)
if (!main.replayChecking && !core.isReplaying()) core.playStereo(data.name, data.left, data.right, data.split)
core.doAction()
})
core.registerEvent("moveStereo", function (data) {
const id = core.playStereo(data.name, data.left, data.right, data.split)
core.moveStereo(id, data.leftTo, data.rightTo, data.time)
if (!main.replayChecking && !core.isReplaying()) {
const id = core.playStereo(data.name, data.left, data.right, data.split)
core.moveStereo(id, data.leftTo, data.rightTo, data.time)
}
core.doAction()
})
core.registerEvent("cgtext", function (data) {
if (!main.replayChecking && !core.isReplaying()) {
core.ui.cgText.image = data.bg;
core.ui.cgText.head = core.clone(data.head);
core.ui.cgText.name = data.name;
core.ui.cgText.text = data.text;
core.ui.cgText.time = data.time;
core.ui.cgText.bodyList = core.clone(data.bodyList);
main.dom.cgText.style.display = 'block';
core.ui.cgText.update()
} else {
core.doAction()
}
})
}
},
"drawLight": function () {
@@ -1975,6 +2002,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
main.dom.outerUI.style.height = obj.totalHeight + 'px';
main.dom.CGUI.style.width = obj.totalWidth + 'px';
main.dom.CGUI.style.height = obj.totalHeight + 'px';
main.dom.cgText.style.width = obj.totalWidth + 'px';
main.dom.cgText.style.height = obj.totalHeight + 'px';
const innerSize = (obj.canvasWidth * core.domStyle.scale) + "px";
for (let i = 0; i < core.dom.gameCanvas.length; ++i)
@@ -2089,7 +2118,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
if (core.status.automaticRoute == null) core.status.automaticRoute = {};
core.updateStatusBar();
core.ui.CG.update()
core.ui.CG.update();
core.ui.cgText.update();
}
@@ -7127,6 +7157,17 @@ core.plugin.animate = {
MotaActionBlocks['text_0_s'].xmlText(),
MotaActionBlocks['text_1_s'].xmlText(),
MotaActionFunctions.actionParser.parseList("\t[小妖精,fairy]\f[fairy.png,0,0]欢迎使用事件编辑器(双击方块可直接预览)"),
MotaActionFunctions.actionParser.parseList([{
"type": "cgtext",
"bg": "bg_5043.png",
"head": { "name": "face_050445.png", "px": -300 },
"name": "菲奥奈",
"time": 0,
"text": "这句话显示在对话框内",
"bodyList": [
{ "name": "tati_050145a.png", "px": 100, "filter": false }
]
}]),
MotaActionBlocks['moveTextBox_s'].xmlText(),
MotaActionBlocks['clearTextBox_s'].xmlText(),
MotaActionBlocks['comment_s'].xmlText(),
@@ -8835,6 +8876,7 @@ core.plugin.animate = {
//更新
update() {
this.background()
this.drawUI()
}
@@ -8977,13 +9019,13 @@ core.plugin.animate = {
const imagebox3 = makeBox([300, 750], [480, 320])
const imagebox4 = makeBox([800, 750], [480, 320])
const imagebox5 = makeBox([1300, 750], [480, 320])
if (inRect(pos, pageupbox)) {
if (inRect(pos, pagedownbox)) {
if (page < this.UIMx.length - 1) {
page++;
core.clearMap(ctx);
this.update();
}
} else if (inRect(pos, pagedownbox)) {
} else if (inRect(pos, pageupbox)) {
if (page > 0) {
page--;
core.clearMap(ctx);
@@ -9141,6 +9183,7 @@ core.plugin.animate = {
"光标设置": function () {
// 在此增加新插件
this.changeMouse = function (icon, div = 'gameGroup', translateX = 0, translateY = 0, scaleX = 1, scaleY = 1, degree = 0, px = 0, py = 0) {
const canvas = document.createElement('canvas');
canvas.width = 64
canvas.height = 64
@@ -9157,6 +9200,7 @@ core.plugin.animate = {
core.dom[div].style.cursor = `url(${data}) ${px} ${py},url(${data}),auto` //div为你要改变光标的元素,默认为包含状态栏的整个游戏画面,px/py为点击点偏移像素
}
this.removeMouse = function (div = 'gameGroup') {
core.dom[div].style.cursor = 'auto'
}
},
@@ -9211,6 +9255,7 @@ core.plugin.animate = {
/** 添加弹出内容 */
this.addPop = function (value, px, py, color, boldColor, left, jump, time, show, font, speed) {
var data = { px: px, py: py, value: value, color: color || colorD, boldColor: boldColor || boldColorD, frame: 0, left: left || false, jump: jump || false, time: time || 60, show: show || 30, font: font || fontD, speed: speed || 1 };
if (!core.status.pop) core.status.pop = [data];
else core.status.pop.push(data);
@@ -9230,6 +9275,7 @@ core.plugin.animate = {
* @param {string} text 显示的文字
*/
this.drawWarning = function (x, y, text, text2, warning) {
if (timeout) return;
x = x ?? 6;
y = y ?? 6;
@@ -9421,7 +9467,7 @@ core.plugin.animate = {
}
events.prototype._changeFloor_beforeChange = function (info, block, callback) {
this._changeFloor_playSound();
if (block && block?.event) {
if (block && block?.event && !main.replayChecking && !core.isReplaying()) {
const dirEntries = allChangeEntries.find(v => v[1] === block.event.id);
if (block?.event?.trigger === 'changeFloor' && dirEntries) {
const toFloorId = block.event.data.floorId;
@@ -9498,5 +9544,258 @@ core.plugin.animate = {
}
},
"剧情cg": function () {
// 在此增加新插件
const cg = document.createElement('canvas'); //cg画布设置
cg.style.position = 'absolute';
cg.style.zIndex = 300;
cg.style.display = "none"
cg.id = 'cgText';
main.dom.gameGroup.insertAdjacentElement('afterend', cg)
cg.style.top = "50%"
cg.style.left = "50%"
cg.style.transform = "translate(-50%,-50%)"
const ctx = cg.getContext("2d");
main.dom.cgText = cg;
cg.onclick = function (e) {
try {
e.preventDefault();
if (!core.isPlaying()) return false;
const left = core.dom.gameGroup.offsetLeft;
const top = core.dom.gameGroup.offsetTop;
const px = Math.floor((e.clientX - left) / core.domStyle.scale),
py = Math.floor((e.clientY - top) / core.domStyle.scale);
core.ui.cgText.click(px * 3, py * 3);
} catch (ee) {
main.log(ee);
}
}
class cgText {
constructor() {
this.image = ""
this.head = { name: 'face_050445.png', px: -300 }
this.bodyList = [{ name: 'tati_050145a.png', px: 100, filter: false }, { name: 'tati_120124.png', px: 1100, filter: true }]
this.name = ""
this.text = ''
this.time = 0;
}
click(px, py) {
const makeBox = ([x, y], [w, h]) => {
return [
[x, y],
[x + w, y + h]
];
}
const inRect = ([x, y], [
[sx, sy],
[dx, dy]
]) => {
return sx <= x && x <= dx && sy <= y && y <= dy;
};
const pos = [px, py];
const savebox = makeBox([1700, 1100], [192, 96]);
const saveboxVertical = makeBox([52, 1700], [96, 192])
if ((core.domStyle.isVertical && inRect(pos, saveboxVertical)) || (!core.domStyle.isVertical && inRect(pos, savebox))) {
if (core.status.event.animateUI) return;
if (core.status.event.interval != null) return;
const current = core.clone(core.status.event.data.current)
current.showAll = true;
current.time = 0
current.text = current.text.replace(/(\\(z))(\[.*?])?/g, "");
cg.style.display = "none"
const data = [{ 'type': 'callSave' }, current]
core.insertAction(data)
core.doAction();
} else {
// 正在淡入淡出的话不执行
if (core.status.event.animateUI) return;
var data = core.clone(core.status.event.data.current);
// 打字机效果显示全部文字
if (core.status.event.interval != null) {
data.showAll = true;
data.time = 0
data.text = data.text.replace(/(\\(z))(\[.*?])?/g, "");
core.insertAction(data);
core.doAction();
return;
}
cg.style.display = "none"
core.ui._animateUI('hide', null, core.doAction);
}
}
drawTextContent(ctx, content, config) {
ctx = core.getContextByName(ctx);
// 设置默认配置项
var textAttribute = core.status.textAttribute || core.initStatus.textAttribute;
var globalAttribute = core.status.globalAttribute || core.initStatus.globalAttribute;
config = core.clone(config || {});
config.left = config.left || 0;
config.right = config.left + (config.maxWidth == null ? core._PX_ : config.maxWidth);
config.top = config.top || 0;
config.color = core.arrayToRGBA(config.color || textAttribute.text);
if (config.bold == null) config.bold = textAttribute.bold;
config.italic = config.italic || false;
config.align = config.align || textAttribute.align || "left";
config.fontSize = config.fontSize || textAttribute.textfont;
config.lineHeight = config.lineHeight || (config.fontSize * 1.3);
config.defaultFont = config.font = config.font || globalAttribute.font;
config.time = config.time || 0;
config.letterSpacing = config.letterSpacing == null ? (textAttribute.letterSpacing || 0) : config.letterSpacing;
config.index = 0;
config.currcolor = config.color;
config.currfont = config.fontSize;
config.lineMargin = Math.max(Math.round(config.fontSize / 4), config.lineHeight - config.fontSize);
config.topMargin = parseInt(config.lineMargin / 2);
config.lineMaxHeight = config.lineMargin + config.fontSize;
config.offsetX = 0;
config.offsetY = 0;
config.line = 0;
config.blocks = [];
config.isHD = ctx == null || ctx.canvas.hasAttribute('isHD');
// 创建一个新的临时画布
var tempCtx = document.createElement('canvas').getContext('2d');
if (config.isHD && ctx) {
core.maps._setHDCanvasSize(
tempCtx,
ctx.canvas.width,
ctx.canvas.height
);
} else {
tempCtx.canvas.width = ctx == null ? 1 : ctx.canvas.width;
tempCtx.canvas.height = ctx == null ? 1 : ctx.canvas.height;
}
tempCtx.textBaseline = 'top';
tempCtx.font = core.ui._buildFont(config.fontSize, config.bold, config.italic, config.font);
tempCtx.fillStyle = config.color;
config = this._drawTextContent_draw(ctx, tempCtx, content, config);
return config;
}
_drawTextContent_draw(ctx, tempCtx, content, config) {
// Step 1: 绘制到tempCtx上,并记录下图块信息
while (core.ui._drawTextContent_next(tempCtx, content, config));
if (ctx == null) return config;
// Step 2: 从tempCtx绘制到画布上
config.index = 0;
var _drawNext = function () {
if (config.index >= config.blocks.length) return false;
var block = config.blocks[config.index++];
if (block != null) {
// It works, why?
const scale = config.isHD ? devicePixelRatio * core.domStyle.scale : 1;
ctx.restore();
ctx.save(); //保存设置
if (core.domStyle.isVertical) {
ctx.translate(1248, 0) //重新定位右上角为基准
ctx.rotate(Math.PI / 2) //旋转90度
}
ctx.drawImage(
tempCtx.canvas,
block.left * scale,
block.top * scale,
block.width * scale,
block.height * scale,
config.left + block.left + block.marginLeft,
config.top + block.top + block.marginTop,
block.width,
block.height
);
ctx.restore();
}
return true;
}
if (config.time == 0) {
while (_drawNext());
} else {
clearInterval(core.status.event.interval);
core.status.event.interval = setInterval(function () {
if (!_drawNext()) {
clearInterval(core.status.event.interval);
core.status.event.interval = null;
}
}, config.time);
}
return config;
}
update() {
this.background();
}
background() {
const img = core.material.images.images?.[this.image]
if (core.domStyle.isVertical) {
ctx.canvas.width = 1248;
ctx.canvas.height = 2028;
ctx.save(); //保存设置
ctx.translate(1248, 0) //重新定位右上角为基准
ctx.rotate(Math.PI / 2) //旋转90度
} else {
ctx.canvas.width = 2028;
ctx.canvas.height = 1248;
}
if (img) {
ctx.drawImage(img, 0, 0, 2028, 1248)
} else {
core.fillRect(ctx, 0, 0, 2028, 1248)
}
this.bodyList.forEach(v => {
const body = core.material.images.images?.[v.name]
if (v.filter) ctx.filter = 'brightness(50%)'
if (body) {
ctx.drawImage(body, 0, 0, body.width, body.height, v.px, 1248 - body.height * 1.5, body.width * 1.5, body.height * 1.5)
}
ctx.filter = 'none'
})
if (core.isPlaying()) core.drawWindowSkin("winskin.png", ctx, 30, 802, 1968, 416)
const head = core.material.images.images?.[this.head.name]
if (head) {
ctx.drawImage(head, 0, 0, head.width, head.height, this.head.px, 1248 - head.height * 2, head.width * 2, head.height * 2)
}
if (core.isPlaying()) core.drawWindowSkin("winskin.png", ctx, 1700, 1100, 192, 96)
core.fillText(ctx, '存 档', 1736, 1166, '#FFFFFF', "bold 48px Verdana")
if (this.name) core.fillText(ctx, `【${this.name}】`, 500, 880, '#FFFFFF', "bold 48px Verdana")
if (this.text) {
this.drawTextContent(ctx, this.text, {
left: 500,
top: 950,
bold: true,
color: '#FFFFFF',
align: "left",
fontSize: 48,
time: this.time || 0,
font: 'Verdana',
maxWidth: 1000
});
}
ctx.restore();
}
}
core.ui.cgText = new cgText()
}
}