Files
fc/dev/project/library/imports/2b/2be2456c-0566-4d31-a446-c6199411c1f5.js
T

262 lines
7.0 KiB
JavaScript
Raw Normal View History

2026-05-24 10:21:26 +08:00
"use strict";
cc._RF.push(module, '2be24VsBWZNMaRGxhmUEcH1', 'cmp.bedroom.story.wnd');
// Scripts/mod/home/bedroom/cmp.bedroom.story.wnd.js
"use strict";
/******************************************************************
*
* 闺房剧情场景
*
******************************************************************/
var BridgeWindow = require("bridge.window");
var HomeModel = require("home.mod");
var FxBGM = require("nx.fx.BGM");
var FxSpine = require("nx.fx.spine");
var START_ID = "start";
var AUTO_INTERVAL = 3;
cc.Class({
"extends": BridgeWindow,
properties: {
spBG: {
"default": null,
type: FxSpine
},
nodHead: {
"default": null,
type: cc.Node
},
nodTime: {
"default": null,
type: cc.Node
},
nodTitle: {
"default": null,
type: cc.Node
},
nodContent: {
"default": null,
type: cc.Node
},
nodChoices: {
"default": null,
type: cc.Node
},
cmpBGM: {
"default": null,
type: FxBGM
}
},
// 关闭
onDisable: function onDisable() {
this.unscheduleAllCallbacks();
},
// 重载:参数打开
onOpenConfigs: function onOpenConfigs(_params) {
var _this = this;
// 设置自动
this.setAutoPlay(false);
this.setEnd(false);
this.partner_id = _params.partner_id;
this.profile_id = _params.profile_id;
// 配置获取
this.partner = game.configs.partner_data.data_partner_base[this.partner_id];
this.profile = game.configs.favor_data.data_interface[this.profile_id];
this.talks = game.configs.favor_data.data_content[this.profile_id];
if (nx.dt.objEmpty(this.partner) || nx.dt.objEmpty(this.talks) || nx.dt.objEmpty(this.profile)) {
this.scheduleOnce(function () {
_this.close();
}, 0.1);
nx.error("无效闺蜜剧情章节:" + this.profile_id);
return;
}
// 标题
var txt = nx.text.getKey(this.profile.name || "Archives");
nx.gui.setString(this.nodHead, "txt", txt);
// 背景动画
var path = cc.path.join("prefab/home/bedroom/roles", this.profile.bg_res, "spines/model");
if (this.spBG.key != path) {
this.spBG.play(path, "action", null, true);
}
// 角色名
nx.gui.setString(this.nodTitle, "txt", nx.text.getKey(this.partner.name));
// 背景音乐
if (nx.dt.strNEmpty(this.profile.bgm)) {
path = cc.path.join("prefab/home/bedroom/bgm", this.profile.bgm);
this.cmpBGM.bgmRK = path;
this.cmpBGM.reActive();
}
// 设置当前对话
var step = _params.step || -1;
if (step <= 0) {
step = 1;
}
var talkId = "start";
for (var tid in this.talks) {
var t = this.talks[tid];
if (t && t.rank == step) {
talkId = tid;
break;
}
}
this.resetTalk(talkId);
},
// 设置当前对话
resetTalk: function resetTalk(_talk_id) {
this.talk_id = _talk_id || START_ID;
var data = this.talks[this.talk_id];
if (nx.dt.objEmpty(data)) {
this.curtalk = null;
nx.error("无效的对话:", this.profile_id, _talk_id);
return;
}
this.cur = {
index: -1,
tid: data.number,
content: data.content,
selects: []
};
for (var _i in data.next_content_id) {
var id = data.next_content_id[_i];
this.cur.selects.push(this.talks[id]);
}
this.setEnd(false);
this.onTouchNext();
},
// 点击下一步
onTouchNext: function onTouchNext() {
// 下一句
this.cur.index += 1;
// 对话已经完成
if (this.cur.index >= this.cur.content.length) {
// 如果单选项
if (this.cur.selects.length == 1) {
var ifo = this.cur.selects[i];
if (ifo) {
this.resetTalk(ifo.next_content_id[0]);
}
}
// 如果已经完结
if (this.cur.selects.length == 0) {
this.setAutoPlay(false);
this.setEnd(true);
}
return;
}
// 文本
var txt = nx.text.getKey(this.cur.content[this.cur.index]);
nx.gui.setString(this.nodContent, "txt", txt);
// 选项更新
var end = this.cur.index == this.cur.content.length - 1;
var ops = this.cur.selects.length == 2;
var root = nx.gui.setActive(this.nodContent.parent, "choices", end && ops);
if (root && end && ops) {
var choice = function choice(_btn, _info) {
var path = cc.path.join("prefab/home/bedroom/ui", "icon" + _info.icon);
nx.gui.setSpriteFrame(_btn, "icon", path);
nx.gui.setString(_btn, "txt", nx.text.getKey(_info.content[0]));
};
choice(nx.gui.find(root, "c1/btn"), this.cur.selects[0]);
choice(nx.gui.find(root, "c2/btn"), this.cur.selects[1]);
}
},
// 点击选项
onTouchChoice: function onTouchChoice(_key) {
var _this2 = this;
var index = parseInt(_key) || 1;
var cfgs = this.cur.selects[index - 1];
if (nx.dt.objEmpty(cfgs)) {
return;
}
var HC = HomeModel.getInstance();
var tid = cfgs.next_content_id[0];
HC.commitStoryOp(this.profile_id, cfgs.number, function (_ret, _data) {
if (!_ret) {
nx.tbox(_data);
return;
}
// 下段
_this2.resetTalk(tid);
});
},
// 点击自动
onTouchAuto: function onTouchAuto() {
this.setAutoPlay(true);
},
// 点击取消自动
onTouchAutoCancel: function onTouchAutoCancel() {
this.setAutoPlay(false);
},
// 设置结束标记
setEnd: function setEnd(_end) {
nx.gui.setActive(this.nodContent, "end", _end);
},
// 设置自动
setAutoPlay: function setAutoPlay(_open) {
var _this3 = this;
this.unscheduleAllCallbacks();
this.autoPlaying = _open;
nx.gui.setActive(this.nodContent, "flag", _open);
nx.gui.setActive(this.nodContent, "ops/auto", !_open);
nx.gui.setActive(this.nodContent, "ops/auto_cancel", _open);
var flag = nx.gui.find(this.nodContent, "flag");
if (!_open) {
cc.Tween.stopAllByTarget(flag);
return;
}
// 闪烁
cc.tween(flag).repeatForever(cc.tween().to(0.5, {
opacity: 100
}).to(0.5, {
opacity: 200
})).start();
// 心跳
this.schedule(function () {
if (_this3.cur.selects.length == 2) {
_this3.onTouchChoice(_this3.profile["default"]);
} else {
_this3.onTouchNext();
}
}, AUTO_INTERVAL, cc.macro.repeatForever);
},
// 点击跳过
onTouchSkip: function onTouchSkip() {
if (this.cur && this.cur.selects.length == 2) {
this.onTouchChoice(this.profile["default"]);
}
},
// 点击剧本集
onTouchGraphic: function onTouchGraphic() {
var _this4 = this;
var home = HomeModel.getInstance();
home.reqArchiveInfo(this.profile_id, function (_ret, _data) {
if (!_ret) {
nx.tbox(_data);
return;
}
nx.bridge.createPanel("WndBedroomDocument", {
partner_id: _this4.partner_id,
profile_id: _this4.profile_id,
talks: _data.historical_dialogue,
results: _data.personal_profile_result,
story: _this4
});
});
}
});
cc._RF.pop();