Files
slgclient/assets/scripts/map/ui/MapUILogic.ts
2025-11-18 18:38:53 +08:00

533 lines
17 KiB
TypeScript

import { _decorator, Component, Prefab, Node, Layout, Label, instantiate, UITransform } from 'cc';
const { ccclass, property } = _decorator;
import LoginCommand from "../../login/LoginCommand";
import ArmySelectNodeLogic from "./ArmySelectNodeLogic";
import CityArmySettingLogic from "./CityArmySettingLogic";
import FacilityListLogic from "./FacilityListLogic";
import MapUICommand from "./MapUICommand";
import Dialog from "./Dialog";
import UnionCommand from "../../union/UnionCommand";
import MapCommand from "../MapCommand";
import FortressAbout from "./FortressAbout";
import CityAboutLogic from "./CityAboutLogic";
import GeneralListLogic from "./GeneralListLogic";
import TransformLogic from "./TransformLogic";
import { Tools } from "../../utils/Tools";
import GeneralInfoLogic from "./GeneralInfoLogic";
import WarReportLogic from "./WarReportLogic";
import DrawRLogic from "./DrawRLogic";
import { GeneralData } from "../../general/GeneralProxy";
import SkillLogic from "./SkillLogic";
import { SkillConf } from "../../config/skill/Skill";
import SkillInfoLogic from "./SkillInfoLogic";
import { EventMgr } from '../../utils/EventMgr';
@ccclass('MapUILogic')
export default class MapUILogic extends Component {
@property(Node)
contentNode:Node = null;
@property(Prefab)
facilityPrefab: Prefab = null;
protected _facilityNode: Node = null;
@property(Prefab)
armySettingPrefab: Prefab = null;
protected _armySettingNode: Node = null;
@property(Prefab)
dialog: Prefab = null;
protected _dialogNode: Node = null;
@property(Prefab)
generalPrefab: Prefab = null;
protected _generalNode: Node = null;
@property(Prefab)
generalDesPrefab: Prefab = null;
protected _generalDesNode: Node = null;
@property(Prefab)
cityAboutPrefab: Prefab = null;
protected _cityAboutNode: Node = null;
@property(Prefab)
fortressAboutPrefab: Prefab = null;
protected _fortressAboutNode: Node = null;
@property(Prefab)
warReportPrefab: Prefab = null;
protected _warReportNode: Node = null;
@property(Prefab)
armySelectPrefab: Prefab = null;
protected _armySelectNode: Node = null;
@property(Prefab)
drawPrefab: Prefab = null;
protected _drawNode: Node = null;
@property(Prefab)
drawResultrefab: Prefab = null;
protected _drawResultNode: Node = null;
@property(Prefab)
unionPrefab: Prefab = null;
protected _unionNode: Node = null;
@property(Prefab)
chatPrefab: Prefab = null;
protected _chatNode: Node = null;
@property(Prefab)
collectPrefab: Prefab = null;
protected _collectNode: Node = null;
@property(Prefab)
transFormPrefab: Prefab = null;
protected _transFormNode: Node = null;
@property(Prefab)
generalConvertPrefab: Prefab = null;
protected _generalConvertNode: Node = null;
@property(Prefab)
generalRosterPrefab: Prefab = null;
protected _generalRosterNode: Node = null;
@property(Prefab)
skillPrefab: Prefab = null;
protected _skillNode: Node = null;
@property(Prefab)
skillInfoPrefab: Prefab = null;
protected _skillInfoNode: Node = null;
@property(Node)
widgetNode: Node = null;
@property(Layout)
srollLayout: Layout = null;
@property(Label)
nameLabel: Label = null;
@property(Label)
ridLabel: Label = null;
protected _resArray: any = [];
protected _yieldArray: any = [];
protected onLoad(): void {
this._resArray.push({key:"grain", name:"谷:"});
this._resArray.push({key:"wood", name:"木:"});
this._resArray.push({key:"iron", name:"铁:"});
this._resArray.push({key:"stone", name:"石:"});
this._resArray.push({key:"gold", name:"钱:"});
this._yieldArray.push({key:"wood_yield", name:"木+"});
this._yieldArray.push({key:"iron_yield", name:"铁+"});
this._yieldArray.push({key:"stone_yield", name:"石+"});
this._yieldArray.push({key:"grain_yield", name:"谷+"});
EventMgr.on("open_city_about", this.openCityAbout, this);
EventMgr.on("close_city_about", this.closeCityAbout, this);
EventMgr.on("open_fortress_about", this.openFortressAbout, this);
EventMgr.on("open_facility", this.openFacility, this);
EventMgr.on("open_army_setting", this.openArmySetting, this);
EventMgr.on("upate_my_roleRes", this.updateRoleRes, this);
EventMgr.on("open_general_des", this.openGeneralDes, this);
EventMgr.on("open_general_choose", this.openGeneralChoose, this);
EventMgr.on("open_army_select_ui", this.onOpenArmySelectUI, this);
EventMgr.on("open_draw_result", this.openDrawR, this);
EventMgr.on("robLoginUI", this.robLoginUI, this);
EventMgr.on("interior_collect", this.onCollection, this);
EventMgr.on("open_general_convert", this.onOpenGeneralConvert, this);
EventMgr.on("open_general_roster", this.onOpenGeneralRoster, this);
EventMgr.on("open_general", this.openGeneral, this);
EventMgr.on("open_skill", this.onOpenSkill, this);
EventMgr.on("close_skill", this.onCloseSkill, this);
EventMgr.on("open_skillInfo", this.onOpenSkillInfo, this);
this.updateRoleRes();
this.updateRole();
let unionId = MapCommand.getInstance().cityProxy.myUnionId;
if (unionId > 0) {
UnionCommand.getInstance().unionApplyList(unionId);
}
}
protected robLoginUI(): void {
this.showTip("账号在其他地方登录",function () {
EventMgr.emit("enter_login");
});
}
protected showTip(text:string, close:Function):void {
if (this._dialogNode == null){
this._dialogNode = instantiate(this.dialog)
this._dialogNode.parent = this.contentNode;
}else{
this._dialogNode.active = true;
}
this._dialogNode.setSiblingIndex(this.topLayer());
this._dialogNode.getComponent(Dialog).text(text);
this._dialogNode.getComponent(Dialog).setClose(close)
}
protected onDestroy(): void {
this.clearAllNode();
MapUICommand.getInstance().proxy.clearData();
EventMgr.targetOff(this);
console.log("MapUILogic onDestroy")
}
protected onBack(): void {
LoginCommand.getInstance().account_logout();
}
protected clearAllNode(): void {
this._facilityNode = null;
this._generalNode = null;
this._cityAboutNode = null;
this._fortressAboutNode = null;
this._armySelectNode = null;
this._armySettingNode = null;
this._drawNode = null;
this._drawResultNode = null;
this._generalDesNode = null;
this._dialogNode = null
}
public topLayer():number {
return this.contentNode.children.length+1;
}
/**
* 设施
*/
protected openFacility(data: any): void {
if (this._facilityNode == null) {
this._facilityNode = instantiate(this.facilityPrefab);
this._facilityNode.parent = this.contentNode;
} else {
this._facilityNode.active = true;
}
this._facilityNode.setSiblingIndex(this.topLayer());
this._facilityNode.getComponent(FacilityListLogic).setData(data);
}
protected openArmySetting(cityId: number, order: number): void {
if (this._armySettingNode == null) {
this._armySettingNode = instantiate(this.armySettingPrefab);
this._armySettingNode.parent = this.contentNode;
} else {
this._armySettingNode.active = true;
}
this._armySettingNode.setSiblingIndex(this.topLayer());
this._armySettingNode.getComponent(CityArmySettingLogic).setData(cityId, order);
}
/**
* 武将
*/
protected openGeneral(data: number[], type: number = 0, position: number = 0, zIndex: number = 0): void {
if (this._generalNode == null) {
this._generalNode = instantiate(this.generalPrefab);
this._generalNode.parent = this.contentNode;
} else {
this._generalNode.active = true;
}
this._generalNode.setSiblingIndex(this.topLayer());
this._generalNode.getComponent(GeneralListLogic).setData(data, type, position);
}
/**
* 武将选择
* @param data
* @param zIndex
*/
protected openGeneralChoose(data: number[], position: number = 0): void {
this.openGeneral(data, 1, position, 1);
}
/**打开军队选择界面*/
protected onOpenArmySelectUI(cmd: number, x: number, y: number): void {
if (this._armySelectNode == null) {
this._armySelectNode = instantiate(this.armySelectPrefab);
this._armySelectNode.parent = this.node;
} else {
this._armySelectNode.active = true;
}
this._armySelectNode.setSiblingIndex(this.topLayer());
this._armySelectNode.getComponent(ArmySelectNodeLogic).setData(cmd, x, y);
}
/**
* 武将详情
*/
protected openGeneralDes(cfgData: any, curData: any): void {
if (this._generalDesNode == null) {
this._generalDesNode = instantiate(this.generalDesPrefab);
this._generalDesNode.parent = this.contentNode;
} else {
this._generalDesNode.active = true;
}
this._generalDesNode.setSiblingIndex(this.topLayer());
this._generalDesNode.getComponent(GeneralInfoLogic).setData(cfgData, curData);
}
/**
* 城市
*/
protected openCityAbout(data: any): void {
if (this._cityAboutNode == null) {
this._cityAboutNode = instantiate(this.cityAboutPrefab);
this._cityAboutNode.parent = this.contentNode;
} else {
this._cityAboutNode.active = true;
}
this._cityAboutNode.setSiblingIndex(this.topLayer());
this.widgetNode.active = false;
EventMgr.emit("scroll_to_map", data.x, data.y);
this._cityAboutNode.getComponent(CityAboutLogic).setData(data);
}
protected closeCityAbout(): void {
this.widgetNode.active = true;
}
protected openFortressAbout(data: any): void {
if (this._fortressAboutNode == null) {
this._fortressAboutNode = instantiate(this.fortressAboutPrefab);
this._fortressAboutNode.parent = this.contentNode;
} else {
this._fortressAboutNode.active = true;
}
this._fortressAboutNode.setSiblingIndex(this.topLayer());
this._fortressAboutNode.getComponent(FortressAbout).setData(data);
}
/**
* 战报
*/
protected openWarReport(): void {
if (this._warReportNode == null) {
this._warReportNode = instantiate(this.warReportPrefab);
this._warReportNode.parent = this.contentNode;
} else {
this._warReportNode.active = true;
}
this._warReportNode.setSiblingIndex(this.topLayer());
this._warReportNode.getComponent(WarReportLogic).updateView();
}
/**
* 角色信息
*/
protected updateRoleRes(): void {
var children = this.srollLayout.node.children;
var roleRes = LoginCommand.getInstance().proxy.getRoleResData();
var i = 0;
children[i].getChildByName("New Label").getComponent(Label).string = "令牌:" + Tools.numberToShow(roleRes["decree"]);
i+=1;
for (let index = 0; index < this._resArray.length; index++) {
const obj = this._resArray[index];
var label = children[i].getChildByName("New Label").getComponent(Label)
if(obj.key == "gold"){
label.string = obj.name + Tools.numberToShow(roleRes[obj.key]);
}else{
label.string = obj.name + Tools.numberToShow(roleRes[obj.key]) + "/" + Tools.numberToShow(roleRes["depot_capacity"]);
}
i+=1;
}
for (let index = 0; index < this._yieldArray.length; index++) {
const obj = this._yieldArray[index];
var label = children[i].getChildByName("New Label").getComponent(Label)
label.string = obj.name + Tools.numberToShow(roleRes[obj.key]);
i+=1;
}
}
/**
* 抽卡
*/
protected openDraw(): void {
if (this._drawNode == null) {
this._drawNode = instantiate(this.drawPrefab);
this._drawNode.parent = this.contentNode;
} else {
this._drawNode.active = true;
}
this._drawNode.setSiblingIndex(this.topLayer());
}
/**
* 抽卡结果
* @param data
*/
protected openDrawR(data: any): void {
if (this._drawResultNode == null) {
this._drawResultNode = instantiate(this.drawResultrefab);
this._drawResultNode.parent = this.contentNode;
} else {
this._drawResultNode.active = true;
}
this._drawResultNode.setSiblingIndex(this.topLayer());
this._drawResultNode.getComponent(DrawRLogic).setData(data);
console.log("openDrawR:", this.contentNode);
}
protected openUnion(): void {
if (this._unionNode == null) {
this._unionNode = instantiate(this.unionPrefab);
this._unionNode.parent = this.contentNode;
} else {
this._unionNode.active = true;
}
this._unionNode.setSiblingIndex(this.topLayer());
}
protected openChat(): void {
if (this._chatNode == null) {
this._chatNode = instantiate(this.chatPrefab);
this._chatNode.parent = this.contentNode;
} else {
this._chatNode.active = true;
}
this._chatNode.setSiblingIndex(this.topLayer());
}
protected openTr(): void {
if (this._transFormNode == null) {
this._transFormNode = instantiate(this.transFormPrefab);
this._transFormNode.parent = this.contentNode;
} else {
this._transFormNode.active = true;
}
this._transFormNode.setSiblingIndex(this.topLayer());
this._transFormNode.getComponent(TransformLogic).initView();
}
protected onOpenGeneralConvert(): void {
console.log("onOpenGeneralConvert");
if (this._generalConvertNode == null) {
this._generalConvertNode = instantiate(this.generalConvertPrefab);
this._generalConvertNode.parent = this.contentNode;
} else {
this._generalConvertNode.active = true;
}
this._generalConvertNode.setSiblingIndex(this.topLayer());
}
protected onOpenGeneralRoster(): void {
console.log("onOpenGeneralRoster");
if (this._generalRosterNode == null) {
this._generalRosterNode = instantiate(this.generalRosterPrefab);
this._generalRosterNode.parent = this.contentNode;
} else {
this._generalRosterNode.active = true;
}
this._generalRosterNode.setSiblingIndex(this.topLayer());
}
onClickSkillBtn(): void{
this.onOpenSkill(0);
}
protected onOpenSkill(type:number=0, general:GeneralData = null, skillPos:number=-1): void {
console.log("onOpenSkill", type, general, skillPos);
if (this._skillNode == null) {
this._skillNode = instantiate(this.skillPrefab);
this._skillNode.parent = this.contentNode;
} else {
this._skillNode.active = true;
}
this._skillNode.setSiblingIndex(this.topLayer());
this._skillNode.getComponent(SkillLogic).setData(type, general, skillPos);
}
protected onCloseSkill(){
if (this._skillNode) {
this._skillNode.active = false;
}
}
protected onOpenSkillInfo(cfg:SkillConf, type:number=0, general:GeneralData = null, skillPos:number=-1){
console.log("onOpenSkillInfo", cfg, type, general, skillPos);
if (this._skillInfoNode == null) {
this._skillInfoNode = instantiate(this.skillInfoPrefab);
this._skillInfoNode.parent = this.contentNode;
} else {
this._skillInfoNode.active = true;
}
this._skillInfoNode.setSiblingIndex(this.topLayer());
this._skillInfoNode.getComponent(SkillInfoLogic).setData(cfg, type, general, skillPos);
}
//征收
protected onCollection(msg:any):void{
this.showTip("成功征收到 "+msg.gold+" 金币", null);
}
protected updateRole(): void {
var roleData = LoginCommand.getInstance().proxy.getRoleData();
this.nameLabel.string = "昵称: " + roleData.nickName;
this.ridLabel.string = "角色ID: " + roleData.rid + "";
}
protected onClickCollection():void {
if(this._collectNode == null){
this._collectNode = instantiate(this.collectPrefab);
this._collectNode.parent = this.contentNode;
}
this._collectNode.active = true;
this._collectNode.setSiblingIndex(this.topLayer());
}
}