重构战斗资源加载 , 新添加宠物

This commit is contained in:
DESKTOP-5RP3AKU\Jisol
2023-12-07 02:14:18 +08:00
parent 1dbbc6c79b
commit 931f580082
257 changed files with 15654 additions and 348 deletions

View File

@@ -150,12 +150,6 @@ export class JLoaderBattle extends JLoaderSystem{
resources:{[id:number]:Asset} = {};
foreverResources:number[] = []; //永久资源Id
roleSpine:{[id:number]:sp.SkeletonData} = {}; //角色Spine
roleResImage:{[id:number]:SpriteFrame} = {}; //角色战斗素材图片
roleResSpine:{[id:number]:sp.SkeletonData} = {}; //角色战斗素材Spine
effects:{[id:number]:sp.SkeletonData} = {}; //Spine特效
maps:{[id:number]:SpriteFrame[]} = {}; //地图
async onInit(): Promise<any> {
app.loading.setCurrent(JLoaderBattle.loading);
@@ -166,46 +160,8 @@ export class JLoaderBattle extends JLoaderSystem{
app.loading.setCurrent(JLoaderBattle.loadingInit);
//将配置表的角色都读取出来
for (const info of TD.TbGRole.getDataMap().values()) {
this.roleSpine[info.id] = await (new Promise(r => {
this.bundle.load(info.spine,sp.SkeletonData,(err,data) => {
r(data);
})
}))
}
//读取角色战斗素材
for(const info of TD.TbGRoleBattleRes.getDataMap().values()){
if(info.resType == "Spine"){
this.roleResSpine[info.id] = await (new Promise(r => {
this.bundle.load(info.resSrc,sp.SkeletonData,(err,data) => {
r(data);
})
}))
}else{
this.roleResImage[info.id] = await (new Promise(r => {
this.bundle.load(info.resSrc,SpriteFrame,(err,data) => {
r(data);
})
}))
}
}
//读取地图
for (const info of TD.TbGMap.getDataMap().values()) {
this.maps[info.id] = await (Promise.all(["1","2","3"].map(index => `map${index}`).map(key => {
return new Promise<SpriteFrame>(r => {
if(info[key]){
this.bundle.load(info[key],SpriteFrame,(err,data) => {
r(data);
})
}
})
})))
}
//默认加载全部资源
await this.loadForeverResources(...TD.TbBattleResource.getDataList());
app.loading.ok(JLoaderBattle.loadingInit);
@@ -222,7 +178,10 @@ export class JLoaderBattle extends JLoaderSystem{
//加载永久资源
loadForeverResource(res:TB.TbBattleResource){
return (new Promise<void>(r => {
this.bundle.load(res.path,(error,data) => {
let Type:new ()=>Asset = [sp.SkeletonData,SpriteFrame][res.type];
this.bundle.load(res.path,Type,(error,data) => {
if(this.foreverResources.indexOf(res.id) < 0){
//添加永久资源
this.resources[res.id] = data;
@@ -276,7 +235,7 @@ export class JLoaderBattle extends JLoaderSystem{
}
//获取资源
getData<T extends Asset>(resId:number):T{
getData<T extends Asset>(resId:number | string):T{
let res = this.resources[resId]
if(!res) console.info(`[JLoaderBattle] 未加载资源${resId}`);
@@ -285,6 +244,19 @@ export class JLoaderBattle extends JLoaderSystem{
}
//获取角色Spine
getRoleSpine(roleId:number){
return this.getData<sp.SkeletonData>(TD.TbGRole.get(roleId).spine)
}
//获取地图
getMap(mapId:number):SpriteFrame[]{
let info = TD.TbGMap.get(mapId)
return ["1","2","3"].map(key => {
return this.getData<SpriteFrame>(info[`map${key}`]);
})
}
}
export const app = {

View File

@@ -13,6 +13,7 @@ import { rect } from "cc";
import GRoleDefault from "../role/GRoleDefault";
import { TB } from "../../../../resources/config/data/schema";
import GRoleAttack from "../common/GRoleAttack";
import { sp } from "cc";
/**
* 抛物线 爆炸普攻
@@ -25,10 +26,9 @@ export default class GAttackParabolicRemote implements GAttackBase{
let enemy = role.fsm.enemy;
if(!enemy) return;
let image:SpriteFrame = app.battleRes.roleResImage[info.attackArgs[0]];
let image:SpriteFrame = app.battleRes.getData<SpriteFrame>(info.attackArgs[0]);
let bang = {
ske: app.battleRes.roleResSpine[info.attackArgs[1]],
info: TD.TbGRoleBattleRes.get(parseInt(info.attackArgs[1]))
ske: app.battleRes.getData<sp.SkeletonData>(info.attackArgs[1]),
};
let bone = role.spine.findBone(info.attackArgs[2]);
let scale:number = parseFloat(info.attackArgs[3]);
@@ -40,7 +40,6 @@ export default class GAttackParabolicRemote implements GAttackBase{
return;
}
// console.log(`播放动画[GAttackParabolicRemote]`,role.nId,enemy.nId)
console.log(role.spine,bone);
let bullet = GAttackBullet.create(GButtleDefault,{

View File

@@ -99,8 +99,8 @@ export default abstract class GRoleBase<T> extends GObject<T>{
//初始化
protected init(role:TB.TbGRole){
console.log("初始化宠物",!!this.spine,!!(app.battleRes.roleSpine[role.id]));
this.spine.skeletonData = app.battleRes.roleSpine[role.id];
console.log("初始化宠物",!!this.spine,!!(app.battleRes.getRoleSpine(role.id)));
this.spine.skeletonData = app.battleRes.getRoleSpine(role.id);
}
//创建一个状态机

View File

@@ -25,9 +25,9 @@ export default class GDefaultMode<T,DT> extends GBaseMode<T,DT>{
this.mapInfo = TD.TbGMap.get(mapId);
let scale = this.mapInfo.scale;
this.map1.init(app.battleRes.maps[mapId][0],1,app.battleRes.maps[mapId][0].width * scale,app.battleRes.maps[mapId][0].height * scale);
this.map2.init(app.battleRes.maps[mapId][1],1,app.battleRes.maps[mapId][1].width * scale,app.battleRes.maps[mapId][1].height * scale);
this.map3.init(app.battleRes.maps[mapId][2],1,app.battleRes.maps[mapId][1].width * scale,1048 * scale);
this.map1.init(app.battleRes.getMap(mapId)[0],1,app.battleRes.getMap(mapId)[0].width * scale,app.battleRes.getMap(mapId)[0].height * scale);
this.map2.init(app.battleRes.getMap(mapId)[1],1,app.battleRes.getMap(mapId)[1].width * scale,app.battleRes.getMap(mapId)[1].height * scale);
this.map3.init(app.battleRes.getMap(mapId)[2],1,app.battleRes.getMap(mapId)[1].width * scale,1048 * scale);
//更新地图
this.onUpdateMap(0);

View File

@@ -10,6 +10,7 @@ import { rect } from "cc";
import GRoleDefault from "../../../base/role/GRoleDefault";
import { TB } from "../../../../../resources/config/data/schema";
import GRoleAttack from "../../../base/common/GRoleAttack";
import { sp } from "cc";
/**
* 疯狂松鼠技能
@@ -40,14 +41,14 @@ export default class GSkillCrazySquirrel extends GSkillCDBase{
let ah = parseInt(this.info.skillArgs[2]);
//出现松鼠丢炸弹
GSpine.onPlayAnotherSpine(this.role,app.battleRes.roleResSpine[30003],"skill",{
GSpine.onPlayAnotherSpine(this.role,app.battleRes.getData(140003),"skill",{
end:() => {
//从天而降
let pos = enemy.v2World.add(v2(0,1000));
let end = enemy.v2World.clone();
//生成火球
let spine = GSpine.onCreateSpine(app.battleRes.roleResSpine[30004]);
let spine = GSpine.onCreateSpine(app.battleRes.getData(140004));
this.role.mode.addGNode(spine.node,pos);
spine.setAnimation(0,"animation",true);
spine.node.angle = 90;
@@ -59,7 +60,7 @@ export default class GSkillCrazySquirrel extends GSkillCDBase{
.onComplete(() => {
let world = spine.node.worldPosition;
spine.node.destroy();
GSpine.onPlaySceneSpine(scene,v2(world.x,world.y),app.battleRes.roleResSpine[30005],"animation");
GSpine.onPlaySceneSpine(scene,v2(world.x,world.y),app.battleRes.getData<sp.SkeletonData>(140005),"animation");
GDetection.testAABBCenterRole(rect(world.x,world.y,aw,ah)).forEach(enemy =>{
GRoleAttack.onNormalAttack(this.role,enemy);
});

View File

@@ -46,7 +46,7 @@ export class PetIcon extends Component {
//刷新页面
onUpdateView(){
this.spine.skeletonData = app.battleRes.roleSpine[this.info.petTbId];
this.spine.skeletonData = app.battleRes.getRoleSpine(this.info.petTbId);
this.spine.setAnimation(0,UIPetAnim.std,true);
if(this.info.petStar){

View File

@@ -53,7 +53,7 @@ export class PetPreviewWindow extends Component {
this.onUpdateInit();
//显示宠物
this.spine.skeletonData = app.battleRes.roleSpine[this.info.petTbId];
this.spine.skeletonData = app.battleRes.getRoleSpine(this.info.petTbId);
this.spine.setAnimation(0,UIPetAnim.std,true);
//等级

View File

@@ -36,7 +36,7 @@ export class NoviceSelectPetView extends JNGLayerBase {
//获取Spine组件
let spine = item.getComponentInChildren(sp.Skeleton);
//设置显示的角色
spine.skeletonData = app.battleRes.roleSpine[this.petIds[index]];
spine.skeletonData = app.battleRes.getRoleSpine(this.petIds[index]);
//全部角色播放等待动画
spine.setAnimation(0,UIPetAnim.std,true);
})