DESKTOP-5RP3AKU\Jisol 62b72bdcfc 生成野怪逻辑
2023-11-17 02:57:46 +08:00

101 lines
2.5 KiB
TypeScript

import { _decorator, Component, Node } from 'cc';
import { PlayerTacticalItem } from './PlayerTacticalItem';
import { app } from '../../../App';
import PlayerTacticalData, { PlayerTacticalEvent } from '../../../data/PlayerTacticalData';
import JNodeDrag from '../../../../../extensions/ngame/assets/ngame/util/components/JNodeDrag';
import { EventTouch } from 'cc';
import { UITransform } from 'cc';
import { GUI } from '../../UIConfig';
const { ccclass, property } = _decorator;
/**
* 玩家阵法
*/
@ccclass('PlayerTacticalView')
export class PlayerTacticalView extends Component {
//阵法子节点列表
items:PlayerTacticalItem[] = [];
onLoad(){
//阵法
this.items = this.node.getComponentsInChildren(PlayerTacticalItem);
this.items.forEach((item,index) => {
item.onInit(index); //初始化阵法下标
//添加移动事件
item.addMoveEvent(this.onMoveItem.bind(this));
//添加移动结束事件
item.addMoveEndEvent(this.onMoveEndItem.bind(this));
});
this.onUpdateView();
this.onEvent();
}
//移动子节点
onMoveItem(root:PlayerTacticalItem,e:EventTouch){
//获取接触的节点(除了自己)
this.items.forEach(item => {
//排除自己
if(item == root) return;
//排除在移动的节点
if(!(item.node.position.equals(item.drag.original))) return;
//检测接触
if(item.getComponent(UITransform).isHit(e.getUILocation())){
//如果手指接触了 则 将接触的阵法移动到自己
item.onExchange(root);
}
})
}
//子节点移动结束
async onMoveEndItem(){
//移动结束则保存阵法
let pets:number[] = PlayerTacticalData.getIns().getInitTacticalInfo();
this.items.forEach(item => {
pets[item.index] = item.petId || 0;
})
if(await PlayerTacticalData.getIns().UpdateTactical(pets)){
app.layer.Open(GUI.Tips,{text:"保存阵法成功"});
}
}
protected onDestroy(): void {
this.offEvent();
}
//添加监听
onEvent(){
app.event.on(PlayerTacticalEvent.UPDATE_TACTICAL,this.onUpdateView,this);
}
//移除监听
offEvent(){
app.event.off(PlayerTacticalEvent.UPDATE_TACTICAL,this.onUpdateView,this);
}
//更新阵法显示
onUpdateView(){
this.items.forEach(item => {
item.onUpdateView();
})
}
}