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

180 lines
4.9 KiB
TypeScript

import { _decorator, Component, Label, Prefab, Node, Layout, instantiate } from 'cc';
const { ccclass, property } = _decorator;
import GeneralCommand from "../../general/GeneralCommand";
import { GeneralConfig, GeneralData } from "../../general/GeneralProxy";
import GeneralItemLogic, { GeneralItemType } from "./GeneralItemLogic";
@ccclass('GeneralAddPrLogic')
export default class GeneralAddPrLogic extends Component {
@property(Label)
nameLab: Label = null;
@property(Prefab)
generalItemPrefab: Prefab = null;
@property(Node)
generalItemParent: Node = null;
@property(Layout)
srollLayout:Layout = null;
@property(Label)
prLabel: Label = null;
@property(Node)
addPr: Node = null;
private _currData:GeneralData = null;
private _cfgData:GeneralConfig = null;
private _generalNode:Node = null;
private _nameObj:any = {};
private _addPrObj:any = {};
private _addPrArr:string[] = [];
private _canUsePr:number = -1;
private _step:number = 100;
protected _curAll:number = 0;
@property([Node])
prItems: Node[] = [];
protected onLoad():void{
this._generalNode = instantiate(this.generalItemPrefab);
this._generalNode.parent = this.generalItemParent;
this._nameObj = {
force:"武力",
strategy:"战略",
defense:"防御",
speed:"速度",
destroy:"破坏",
};
this._addPrArr = ["force","strategy","defense","speed","destroy"]
}
public setData(cfgData:any,curData:any):void{
console.log("curData:",curData)
this._canUsePr =-1;
this._currData = curData;
this._cfgData = cfgData;
this.nameLab.string = this._cfgData.name;
var com = this._generalNode.getComponent(GeneralItemLogic);
if(com){
com.updateItem(this._currData, GeneralItemType.GeneralNoThing);
}
this._addPrObj = {
force:this._currData.force_added,
strategy:this._currData.strategy_added,
defense:this._currData.defense_added,
speed:this._currData.speed_added,
destroy:this._currData.destroy_added,
};
this._curAll = Math.abs(this._currData.hasPrPoint - this._currData.usePrPoint);
this.updateView();
}
protected updateView():void{
var children = this.srollLayout.node.children;
var i = 0;
for(var key in this._nameObj){
children[i].getChildByName("New Label").getComponent(Label).string = this._nameObj[key] +":" +
GeneralData.getPrStr(this._cfgData[key],this._addPrObj[key],this._currData.level,this._cfgData[key+"_grow"]);
var node:Label = children[i].getChildByName("New Sprite").getChildByName("change Label").getComponent(Label);
node.string = this._addPrObj[key]/this._step +''
i++;
}
if(this._canUsePr == -1){
this._canUsePr = Math.abs(this._currData.hasPrPoint - this._currData.usePrPoint);
}
this.prLabel.string = "可用属性点:" + this._canUsePr/this._step + "/" + this._currData.hasPrPoint/this._step;
this.addPr.active = this._currData.hasPrPoint > 0?true:false;
}
protected plus(target:any,index:number = 0):void{
var num:number = this._addPrObj[this._addPrArr[index]]
if(!this.isCanePlus() || num >= this._currData.hasPrPoint){
return
}
num = num + this._step;
num = num > this._currData.hasPrPoint?this._currData.hasPrPoint:num;
this._addPrObj[this._addPrArr[index]] = num;
this._canUsePr -= this._step
this.updateView();
}
protected reduce(target:any,index:number = 0):void{
var num:number = this._addPrObj[this._addPrArr[index]]
if(!this.isCaneReduce() || num == 0){
return
}
num = num - this._step;
num = num < 0?0:num;
this._addPrObj[this._addPrArr[index]] = num;
this._canUsePr += this._step
this.updateView();
}
private getAllUse():number{
var num:number = 0;
for(var key in this._addPrObj){
num +=this._addPrObj[key];
}
return num
}
private isCanePlus():boolean{
var all:number = this.getAllUse();
if(all + this._step > this._currData.hasPrPoint){
return false;
}
return true;
}
private isCaneReduce():boolean{
var all:number = this.getAllUse();
if(all - this._step < 0){
return false;
}
return true;
}
protected onClickAddPr():void{
GeneralCommand.getInstance().addPrGeneral(
this._currData.id,
this._addPrObj.force,
this._addPrObj.strategy,
this._addPrObj.defense,
this._addPrObj.speed,
this._addPrObj.destroy);
}
}