209 lines
5.7 KiB
TypeScript
209 lines
5.7 KiB
TypeScript
/*
|
|
* @Author: WoNiu
|
|
* @Date: 2024-03-09 17:02:06
|
|
* @LastEditTime: 2024-03-27 16:11:51
|
|
* @LastEditors: WoNiu
|
|
* @Description:
|
|
*/
|
|
import { _decorator, Color, Label, Node, Size, Sprite, SpriteFrame, tween, UITransform, VerticalTextAlignment } from 'cc';
|
|
import { BaseSprite } from '../../GlobalScript/CommonComponent/BaseSprite';
|
|
import { NpkImage } from '../../Tool/NPKImage';
|
|
import { BaseSpriteFrame } from '../../GlobalScript/CommonComponent/BaseSpriteFrame';
|
|
import { GamerRoleType } from './GamerRoleType';
|
|
const { ccclass } = _decorator;
|
|
|
|
|
|
|
|
|
|
/// 玩家Node封装
|
|
@ccclass('GamerCardNode')
|
|
export class GamerCardNode extends Node {
|
|
|
|
/// 玩家角色类型
|
|
private _characterType : GamerRoleType;
|
|
|
|
/// 玩家名称
|
|
private GamerNameLabel : Label;
|
|
|
|
/// 幻想点数
|
|
private _count: number = 0;
|
|
private countLabel: Label;
|
|
|
|
/// 玩家排序的精灵
|
|
private serialNumberSprite: Sprite;
|
|
private serialOneFrame: SpriteFrame;
|
|
private serialTwoFrame: SpriteFrame;
|
|
private serialThreeFrame: SpriteFrame;
|
|
|
|
private blue = new Color('00baff');
|
|
|
|
set charchterType(type:GamerRoleType){
|
|
if(!this.getChildByName('GamerCharacterNode')){
|
|
this._characterType = type;
|
|
this.initCharacterNode();
|
|
}
|
|
}
|
|
|
|
/// 设置新的幻想点数
|
|
set count(newCount: number){
|
|
|
|
let numberString = newCount.toLocaleString();
|
|
|
|
const obj = {n:this._count};
|
|
|
|
if (numberString != this.GamerNameLabel.string){
|
|
tween(obj).to(1.0,{ n: newCount },{onUpdate:(target,ration)=>{
|
|
this._count = obj.n;
|
|
const count:number = parseInt(obj.n.toFixed(0));
|
|
this.countLabel.string = count.toLocaleString();
|
|
this.countLabel.color = this.getCountColor(obj.n);
|
|
}},).start();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/// 设置玩家名称
|
|
set gamerName(newName: string){
|
|
let name = newName;
|
|
if (name.length > 6){
|
|
name = newName.slice(0,3) + '...' + newName.slice(newName.length - 3);
|
|
}
|
|
this.GamerNameLabel.string = name;
|
|
}
|
|
|
|
/// 玩家排序
|
|
set serialNumber( serial: 1 | 2 | 3){
|
|
switch (serial) {
|
|
case 1:
|
|
this.serialNumberSprite.spriteFrame = this.serialOneFrame;
|
|
this.GamerNameLabel.color = Color.RED;
|
|
break;
|
|
case 2:
|
|
this.serialNumberSprite.spriteFrame = this.serialTwoFrame;
|
|
this.GamerNameLabel.color = this.blue;
|
|
break;
|
|
case 3:
|
|
this.serialNumberSprite.spriteFrame = this.serialThreeFrame;
|
|
this.GamerNameLabel.color = Color.GREEN;
|
|
break;
|
|
}
|
|
}
|
|
|
|
private getCountColor(count:number):Color{
|
|
if ( count < 50000){
|
|
return Color.RED;
|
|
}else if ( count < 200000){
|
|
return Color.YELLOW;
|
|
}else{
|
|
return this.blue;
|
|
}
|
|
}
|
|
|
|
|
|
constructor(gamerName:string){
|
|
super();
|
|
|
|
this.initBackgroundNode();
|
|
this.initPNode();
|
|
this.initCountNode();
|
|
this.initGamerNameNode();
|
|
this.initSerialNumberNode();
|
|
|
|
this.gamerName = gamerName;
|
|
|
|
/// 提前加载精灵帧
|
|
new BaseSpriteFrame(NpkImage.ingame, 1, _SpriteFrame => { this.serialOneFrame = _SpriteFrame });
|
|
new BaseSpriteFrame(NpkImage.ingame, 2, _SpriteFrame => { this.serialTwoFrame = _SpriteFrame });
|
|
new BaseSpriteFrame(NpkImage.ingame, 3, _SpriteFrame => { this.serialThreeFrame = _SpriteFrame });
|
|
}
|
|
|
|
/// 背景
|
|
initBackgroundNode(){
|
|
/// 背景节点
|
|
const backgroundNode = new Node('GamerBackgroundNode');
|
|
this.addChild(backgroundNode);
|
|
|
|
/// 给背景节点添加 baseSprite 组件
|
|
const backgroundComponent = backgroundNode.addComponent( BaseSprite );
|
|
backgroundComponent.updateSpriteFrame(NpkImage.ingame,32);
|
|
|
|
}
|
|
|
|
/// 角色
|
|
initCharacterNode(){
|
|
const node = new Node('GamerCharacterNode');
|
|
this.addChild(node);
|
|
|
|
/// 添加 baseSprite 组件
|
|
const backgroundComponent = node.addComponent( BaseSprite );
|
|
backgroundComponent.updateSpriteFrame(NpkImage.character_sd,this._characterType);
|
|
}
|
|
|
|
/// P图标
|
|
initPNode(){
|
|
const node = new Node('GamerPNode');
|
|
this.addChild(node);
|
|
|
|
node.setPosition(50,-9.5);
|
|
|
|
/// 添加 baseSprite 组件
|
|
const backgroundComponent = node.addComponent( BaseSprite );
|
|
backgroundComponent.updateSpriteFrame(NpkImage.ingame,53);
|
|
|
|
}
|
|
|
|
/// 幻想点数
|
|
initCountNode(){
|
|
const node = new Node('GamerCountNode');
|
|
this.addChild(node);
|
|
|
|
node.setPosition(100,-18);
|
|
const trf = node.addComponent(UITransform);
|
|
trf.contentSize = new Size(60,20);
|
|
|
|
const label = node.addComponent(Label);
|
|
label.fontSize = 14;
|
|
label.string = '0';
|
|
label.color = Color.RED;
|
|
label.verticalAlign = VerticalTextAlignment.CENTER;
|
|
this.countLabel = label;
|
|
|
|
|
|
}
|
|
|
|
/// 玩家名称
|
|
initGamerNameNode(){
|
|
const node = new Node('GamerNameNode');
|
|
this.addChild(node);
|
|
|
|
node.setPosition(90,-40);
|
|
const trf = node.addComponent(UITransform);
|
|
trf.contentSize = new Size(100,20);
|
|
|
|
const label = node.addComponent(Label);
|
|
label.string = '';
|
|
label.fontSize = 12;
|
|
label.color = Color.GRAY;
|
|
label.verticalAlign = VerticalTextAlignment.CENTER;
|
|
|
|
this.GamerNameLabel = label;
|
|
}
|
|
|
|
/// 玩家顺序
|
|
initSerialNumberNode(){
|
|
const node = new Node('GamerNameNode');
|
|
this.addChild(node);
|
|
|
|
node.setPosition(160,-30);
|
|
|
|
this.serialNumberSprite = node.addComponent( Sprite );
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|