mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-26 18:26:23 +00:00
宠物升星
This commit is contained in:
@@ -343,7 +343,7 @@ export class TbGResource {
|
||||
|
||||
|
||||
export namespace TB {
|
||||
export class TbGRoleCUp {
|
||||
export class TbGRoleUpLevel {
|
||||
|
||||
constructor(_json_: any) {
|
||||
if (_json_.grade === undefined) { throw new Error() }
|
||||
@@ -400,7 +400,7 @@ export class Resource {
|
||||
|
||||
|
||||
export namespace TB {
|
||||
export class TbGRoleCStar {
|
||||
export class TbGRoleUpStar {
|
||||
|
||||
constructor(_json_: any) {
|
||||
if (_json_.grade === undefined) { throw new Error() }
|
||||
@@ -717,24 +717,24 @@ export class TbGResource{
|
||||
|
||||
|
||||
|
||||
export class TbGRoleCUp{
|
||||
private _dataMap: Map<number, TB.TbGRoleCUp>
|
||||
private _dataList: TB.TbGRoleCUp[]
|
||||
export class TbGRoleUpLevel{
|
||||
private _dataMap: Map<number, TB.TbGRoleUpLevel>
|
||||
private _dataList: TB.TbGRoleUpLevel[]
|
||||
constructor(_json_: any) {
|
||||
this._dataMap = new Map<number, TB.TbGRoleCUp>()
|
||||
this._dataMap = new Map<number, TB.TbGRoleUpLevel>()
|
||||
this._dataList = []
|
||||
for(var _json2_ of _json_) {
|
||||
let _v: TB.TbGRoleCUp
|
||||
_v = new TB.TbGRoleCUp(_json2_)
|
||||
let _v: TB.TbGRoleUpLevel
|
||||
_v = new TB.TbGRoleUpLevel(_json2_)
|
||||
this._dataList.push(_v)
|
||||
this._dataMap.set(_v.grade, _v)
|
||||
}
|
||||
}
|
||||
|
||||
getDataMap(): Map<number, TB.TbGRoleCUp> { return this._dataMap; }
|
||||
getDataList(): TB.TbGRoleCUp[] { return this._dataList; }
|
||||
getDataMap(): Map<number, TB.TbGRoleUpLevel> { return this._dataMap; }
|
||||
getDataList(): TB.TbGRoleUpLevel[] { return this._dataList; }
|
||||
|
||||
get(key: number): TB.TbGRoleCUp | undefined { return this._dataMap.get(key); }
|
||||
get(key: number): TB.TbGRoleUpLevel | undefined { return this._dataMap.get(key); }
|
||||
|
||||
resolve(tables:Tables)
|
||||
{
|
||||
@@ -749,24 +749,24 @@ export class TbGRoleCUp{
|
||||
|
||||
|
||||
|
||||
export class TbGRoleCStar{
|
||||
private _dataMap: Map<number, TB.TbGRoleCStar>
|
||||
private _dataList: TB.TbGRoleCStar[]
|
||||
export class TbGRoleUpStar{
|
||||
private _dataMap: Map<number, TB.TbGRoleUpStar>
|
||||
private _dataList: TB.TbGRoleUpStar[]
|
||||
constructor(_json_: any) {
|
||||
this._dataMap = new Map<number, TB.TbGRoleCStar>()
|
||||
this._dataMap = new Map<number, TB.TbGRoleUpStar>()
|
||||
this._dataList = []
|
||||
for(var _json2_ of _json_) {
|
||||
let _v: TB.TbGRoleCStar
|
||||
_v = new TB.TbGRoleCStar(_json2_)
|
||||
let _v: TB.TbGRoleUpStar
|
||||
_v = new TB.TbGRoleUpStar(_json2_)
|
||||
this._dataList.push(_v)
|
||||
this._dataMap.set(_v.grade, _v)
|
||||
}
|
||||
}
|
||||
|
||||
getDataMap(): Map<number, TB.TbGRoleCStar> { return this._dataMap; }
|
||||
getDataList(): TB.TbGRoleCStar[] { return this._dataList; }
|
||||
getDataMap(): Map<number, TB.TbGRoleUpStar> { return this._dataMap; }
|
||||
getDataList(): TB.TbGRoleUpStar[] { return this._dataList; }
|
||||
|
||||
get(key: number): TB.TbGRoleCStar | undefined { return this._dataMap.get(key); }
|
||||
get(key: number): TB.TbGRoleUpStar | undefined { return this._dataMap.get(key); }
|
||||
|
||||
resolve(tables:Tables)
|
||||
{
|
||||
@@ -832,10 +832,10 @@ export class Tables {
|
||||
get TbGOnHookGlobal(): TbGOnHookGlobal { return this._TbGOnHookGlobal;}
|
||||
private _TbGResource: TbGResource
|
||||
get TbGResource(): TbGResource { return this._TbGResource;}
|
||||
private _TbGRoleCUp: TbGRoleCUp
|
||||
get TbGRoleCUp(): TbGRoleCUp { return this._TbGRoleCUp;}
|
||||
private _TbGRoleCStar: TbGRoleCStar
|
||||
get TbGRoleCStar(): TbGRoleCStar { return this._TbGRoleCStar;}
|
||||
private _TbGRoleUpLevel: TbGRoleUpLevel
|
||||
get TbGRoleUpLevel(): TbGRoleUpLevel { return this._TbGRoleUpLevel;}
|
||||
private _TbGRoleUpStar: TbGRoleUpStar
|
||||
get TbGRoleUpStar(): TbGRoleUpStar { return this._TbGRoleUpStar;}
|
||||
private _TbSServerInfo: TbSServerInfo
|
||||
get TbSServerInfo(): TbSServerInfo { return this._TbSServerInfo;}
|
||||
|
||||
@@ -848,8 +848,8 @@ export class Tables {
|
||||
this._TbGMap = new TbGMap(loader('tbgmap'))
|
||||
this._TbGOnHookGlobal = new TbGOnHookGlobal(loader('tbgonhookglobal'))
|
||||
this._TbGResource = new TbGResource(loader('tbgresource'))
|
||||
this._TbGRoleCUp = new TbGRoleCUp(loader('tbgrolecup'))
|
||||
this._TbGRoleCStar = new TbGRoleCStar(loader('tbgrolecstar'))
|
||||
this._TbGRoleUpLevel = new TbGRoleUpLevel(loader('tbgroleuplevel'))
|
||||
this._TbGRoleUpStar = new TbGRoleUpStar(loader('tbgroleupstar'))
|
||||
this._TbSServerInfo = new TbSServerInfo(loader('tbsserverinfo'))
|
||||
|
||||
this._TbGGlobal.resolve(this)
|
||||
@@ -860,8 +860,8 @@ export class Tables {
|
||||
this._TbGMap.resolve(this)
|
||||
this._TbGOnHookGlobal.resolve(this)
|
||||
this._TbGResource.resolve(this)
|
||||
this._TbGRoleCUp.resolve(this)
|
||||
this._TbGRoleCStar.resolve(this)
|
||||
this._TbGRoleUpLevel.resolve(this)
|
||||
this._TbGRoleUpStar.resolve(this)
|
||||
this._TbSServerInfo.resolve(this)
|
||||
}
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"ver": "2.0.1",
|
||||
"importer": "json",
|
||||
"imported": true,
|
||||
"uuid": "580aaa0b-8b26-4bc6-9abe-6984e9980679",
|
||||
"uuid": "e973f307-a0ab-478d-85eb-36e1310007a7",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
@@ -2,7 +2,7 @@
|
||||
"ver": "2.0.1",
|
||||
"importer": "json",
|
||||
"imported": true,
|
||||
"uuid": "dfe67d28-0f19-440b-ad19-7c1f70b3528b",
|
||||
"uuid": "02f53704-5e9c-4b95-8ef4-822a6a47882c",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,5 @@
|
||||
import { app } from "../App";
|
||||
import PlayerPetData from "../data/PlayerPetData";
|
||||
import ResourceData from "../data/ResourceData";
|
||||
import { GUI } from "../ui/UIConfig";
|
||||
|
||||
@@ -9,7 +10,8 @@ export const RData = (data:any,isTips:boolean = true) => {
|
||||
if(data.data['resources']){
|
||||
//刷新资源
|
||||
data.data['resources'].forEach(res => {
|
||||
ResourceData.getIns().onUpdateOV(res.operation,res.resource);
|
||||
ResourceData.getIns().onUpdateOV(res.operation,res.resource); //刷新资源
|
||||
PlayerPetData.getIns().onUpdateOV(res.operation,res.pet); //刷新宠物
|
||||
})
|
||||
}
|
||||
return data.data.data;
|
||||
|
@@ -1,6 +1,15 @@
|
||||
import { app } from "../App";
|
||||
import { API, PlayerInfoOV, PlayerPetOV } from "../consts/API";
|
||||
import BaseData from "./BaseData";
|
||||
import PlayerTacticalData from "./PlayerTacticalData";
|
||||
import { ResourceUpdateType } from "./ResourceData";
|
||||
|
||||
export enum PlayerPetEvent{
|
||||
UPDATE = "PlayerPetEvent_UPDATE", //刷新宠物
|
||||
UPDATE_INFO = "PlayerPetEvent_UPDATE_INFO", //刷新宠物信息
|
||||
UPDATE_ADD = "PlayerPetEvent_UPDATE_ADD", //添加宠物
|
||||
UPDATE_MINUS = "PlayerPetEvent_UPDATE_MINUS", //减少宠物
|
||||
}
|
||||
|
||||
//玩家宠物数据
|
||||
export default class PlayerPetData extends BaseData{
|
||||
@@ -20,6 +29,16 @@ export default class PlayerPetData extends BaseData{
|
||||
return this.datas;
|
||||
}
|
||||
|
||||
//获取指定宠物
|
||||
getPetIdData(petTbId:number,datas:PlayerPetOV[] = this.datas):PlayerPetOV[]{
|
||||
return datas.filter(data => data.petTbId == petTbId);
|
||||
}
|
||||
|
||||
//获取未上阵的宠物
|
||||
getNoTacticalData():PlayerPetOV[]{
|
||||
return this.datas.filter(data => PlayerTacticalData.getIns().getTacticalInfo().indexOf(data.petId) < 0);
|
||||
}
|
||||
|
||||
//更新玩家宠物
|
||||
async UpdatePlayerPet(){
|
||||
//获取全部宠物
|
||||
@@ -43,6 +62,54 @@ export default class PlayerPetData extends BaseData{
|
||||
this.datas.push(pet);
|
||||
}
|
||||
|
||||
//刷新返回宠物
|
||||
onUpdateOV(operation:number,resource:PlayerPetOV){
|
||||
|
||||
//如果没有刷新的宠物 则 返回
|
||||
if(!resource) return;
|
||||
|
||||
if(operation == ResourceUpdateType.UPDATE){
|
||||
//更新资源
|
||||
//找到需要被刷新的宠物 然后刷新 找不到则添加
|
||||
let pet = this.datas.filter(pet => pet.petId == resource.petId)[0];
|
||||
if(pet){
|
||||
//更新数据
|
||||
Object.assign(pet,resource);
|
||||
app.event.emit(PlayerPetEvent.UPDATE_INFO)
|
||||
}else{
|
||||
operation = ResourceUpdateType.ADD;
|
||||
this.onUpdateOV(operation,resource);
|
||||
}
|
||||
}else if(operation == ResourceUpdateType.ADD){
|
||||
//查询如果没有这个宠物则添加 负责 刷新
|
||||
let pet = this.datas.filter(pet => pet.petId != resource.petId)[0];
|
||||
if(!pet){
|
||||
//没有则添加
|
||||
this.datas.push(resource);
|
||||
app.event.emit(PlayerPetEvent.UPDATE)
|
||||
app.event.emit(PlayerPetEvent.UPDATE_ADD,pet)
|
||||
}else{
|
||||
operation = ResourceUpdateType.UPDATE;
|
||||
this.onUpdateOV(operation,resource);
|
||||
}
|
||||
}else if(operation == ResourceUpdateType.MINUS){
|
||||
|
||||
//删除的宠物
|
||||
let delPet;
|
||||
//删除指定的宠物
|
||||
this.datas = this.datas.filter(pet => {
|
||||
if(pet.petId == resource.petId){
|
||||
delPet = pet;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
app.event.emit(PlayerPetEvent.UPDATE)
|
||||
delPet && app.event.emit(PlayerPetEvent.UPDATE_MINUS,delPet)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@@ -11,6 +11,13 @@ export enum ResourceType{
|
||||
Gold = 90001, //金币
|
||||
}
|
||||
|
||||
//资源刷新类型
|
||||
export enum ResourceUpdateType{
|
||||
UPDATE = 0, //刷新资源数量
|
||||
MINUS = 1, //减少资源数量
|
||||
ADD = 2, //添加资源数量
|
||||
}
|
||||
|
||||
//玩家资源数据
|
||||
export default class ResourceData extends BaseData{
|
||||
|
||||
@@ -43,12 +50,15 @@ export default class ResourceData extends BaseData{
|
||||
//刷新返回资源
|
||||
onUpdateOV(operation:number,resource:ResourceOV){
|
||||
|
||||
if(operation == 0){
|
||||
//如果没有刷新的资源 则 返回
|
||||
if(!resource) return;
|
||||
|
||||
if(operation == ResourceUpdateType.UPDATE){
|
||||
//更新资源
|
||||
this.data[resource.resourceTbId] = resource.resourceValue;
|
||||
app.event.emit(ResourceEvent.UPDATE)
|
||||
}
|
||||
|
||||
app.event.emit(ResourceEvent.UPDATE)
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { _decorator, Component, Node } from 'cc';
|
||||
import JNLayerBase from '../../../../extensions/ngame/assets/ngame/ui/base/JNLayerBase';
|
||||
import JNScrollView from '../../../../extensions/ngame/assets/ngame/util/components/scrollview/JNScrollView';
|
||||
import PlayerPetData from '../../data/PlayerPetData';
|
||||
import PlayerPetData, { PlayerPetEvent } from '../../data/PlayerPetData';
|
||||
import { API, PlayerPetOV } from '../../consts/API';
|
||||
import { PetOV, PlayerPetOVSelect } from '../VO/PetOV';
|
||||
import { PetIconSelectScroll } from '../Consts/Pet/PetIconSelectScroll';
|
||||
@@ -9,6 +9,8 @@ import { NodeEventType } from 'cc';
|
||||
import { Label } from 'cc';
|
||||
import { app, TD } from '../../App';
|
||||
import { GUI } from '../UIConfig';
|
||||
import { ProgressBar } from 'cc';
|
||||
import JProgressBar from '../../../../extensions/ngame/assets/ngame/util/components/Progress/JProgressBar';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('PetUpStarView')
|
||||
@@ -23,9 +25,10 @@ export class PetUpStarView extends JNLayerBase {
|
||||
petStar:Label; //宠物星级
|
||||
@property(Label)
|
||||
petStarExp:Label; //宠物星级经验
|
||||
|
||||
//宠物数据
|
||||
pets:PlayerPetOVSelect[] = [];
|
||||
@property(JProgressBar)
|
||||
petExpProgress:JProgressBar; //宠物经验条
|
||||
@property(JProgressBar)
|
||||
viewPetExpProgress:JProgressBar; //预览宠物经验条
|
||||
|
||||
data:PlayerPetOV;
|
||||
|
||||
@@ -35,6 +38,16 @@ export class PetUpStarView extends JNLayerBase {
|
||||
this.data = data;
|
||||
this.onUpdateView();
|
||||
|
||||
//监听
|
||||
app.event.on(PlayerPetEvent.UPDATE_INFO,this.onUpdateInfo,this); //刷新宠物信息
|
||||
app.event.on(PlayerPetEvent.UPDATE_MINUS,this.onPetMinus,this); //减少宠物
|
||||
|
||||
}
|
||||
|
||||
onJNClose(): void {
|
||||
//取消监听
|
||||
app.event.off(PlayerPetEvent.UPDATE_INFO,this.onUpdateInfo,this); //刷新宠物信息
|
||||
app.event.off(PlayerPetEvent.UPDATE_MINUS,this.onPetMinus,this); //减少宠物
|
||||
}
|
||||
|
||||
|
||||
@@ -43,9 +56,14 @@ export class PetUpStarView extends JNLayerBase {
|
||||
|
||||
this.onUpdateInfo();
|
||||
|
||||
//获取所有玩家宠物
|
||||
this.pets = PetOV.PlayerPetOVSelects(PlayerPetData.getIns().getData());
|
||||
this.views.refreshData(this.pets);
|
||||
//当前需要升星的宠物并且未上阵 并且排除自己
|
||||
let pets = PetOV.PlayerPetOVSelects(
|
||||
PlayerPetData.getIns().getPetIdData(
|
||||
this.data.petTbId, //同一种宠物
|
||||
PlayerPetData.getIns().getNoTacticalData() //非上阵宠物
|
||||
).filter(pet => pet.petId != this.data.petId) //排除自己
|
||||
);
|
||||
this.views.refreshData(pets);
|
||||
|
||||
//向子节点添加点击事件
|
||||
this.views.addItemEvent(NodeEventType.TOUCH_START,this.onClickItem.bind(this));
|
||||
@@ -60,10 +78,21 @@ export class PetUpStarView extends JNLayerBase {
|
||||
//显示宠物名称
|
||||
this.petNameLabel.string = TD.TbGRole.get(this.data.petTbId).roleName;
|
||||
this.petStar.string = `当前星级: ${this.data.petStar} 星`;
|
||||
this.petStarExp.string = `升级所需经验 / ${this.data.petStarExp}`;
|
||||
|
||||
let upStarExp = TD.TbGRoleUpStar.get(this.data.petStar + 1).merge;
|
||||
this.petStarExp.string = `升级进度: ${upStarExp} / ${this.data.petStarExp}`;
|
||||
this.petExpProgress.value = (this.data.petStarExp / upStarExp);
|
||||
|
||||
}
|
||||
|
||||
//减少宠物
|
||||
onPetMinus(pet:PlayerPetOV){
|
||||
this.views.getItems<PetIconSelectScroll>().forEach(item => {
|
||||
if(item.data.petId == pet.petId)
|
||||
this.views.delData(item.data);
|
||||
});
|
||||
}
|
||||
|
||||
//刷新选择
|
||||
onUpdateSelect(){
|
||||
|
||||
@@ -73,31 +102,55 @@ export class PetUpStarView extends JNLayerBase {
|
||||
item.select.isSelect = data.isSelect;
|
||||
})
|
||||
|
||||
this.onUpdatePreview();
|
||||
|
||||
}
|
||||
|
||||
//更新预览进度条
|
||||
onUpdatePreview(){
|
||||
|
||||
//选择得到的经验
|
||||
let exp = this.views.getItems<PetIconSelectScroll>().filter(item => item.select.isSelect).length;
|
||||
|
||||
let upStarExp;
|
||||
let petStarExp = this.data.petStarExp + exp;
|
||||
let petStar = this.data.petStar;
|
||||
|
||||
while(petStarExp >= (upStarExp = TD.TbGRoleUpStar.get(petStar + 1).merge)){
|
||||
petStar++;
|
||||
petStarExp = Math.floor(petStarExp - upStarExp);
|
||||
}
|
||||
|
||||
this.petStar.string = `当前星级: ${petStar} 星`;
|
||||
this.petStarExp.string = `升级进度: ${upStarExp} / ${petStarExp}`;
|
||||
//预览进度
|
||||
this.viewPetExpProgress.value = (petStarExp / upStarExp);
|
||||
|
||||
}
|
||||
|
||||
//选择全部
|
||||
onClickAll(){
|
||||
let pets = this.views.getData<PlayerPetOVSelect>();
|
||||
//如果全部选择则全部取消
|
||||
if(this.pets.filter(pet => pet.isSelect).length == this.pets.length){
|
||||
this.pets.forEach(pet => pet.isSelect = false);
|
||||
if(pets.filter(pet => pet.isSelect).length == pets.length){
|
||||
pets.forEach(pet => pet.isSelect = false);
|
||||
}else{
|
||||
this.pets.forEach(pet => pet.isSelect = true);
|
||||
pets.forEach(pet => pet.isSelect = true);
|
||||
}
|
||||
this.onUpdateSelect();
|
||||
}
|
||||
|
||||
//点击Item
|
||||
onClickItem(index:number){
|
||||
|
||||
this.pets[index].isSelect = !this.pets[index].isSelect;
|
||||
let pets = this.views.getData<PlayerPetOVSelect>();
|
||||
pets[index].isSelect = !pets[index].isSelect;
|
||||
this.onUpdateSelect();
|
||||
|
||||
}
|
||||
|
||||
//点击合成
|
||||
async onClickUp(){
|
||||
//获取被合成的Id
|
||||
let pets = this.pets.filter(pet => pet.isSelect).map(pet => pet.petId);
|
||||
let pets = this.views.getData<PlayerPetOVSelect>().filter(pet => pet.isSelect).map(pet => pet.petId);
|
||||
|
||||
if(pets.length <= 0){
|
||||
app.layer.Open(GUI.Tips,{text:"请选择需要被合成的宠物"});
|
||||
|
Reference in New Issue
Block a user