提交代码

This commit is contained in:
PC-20230316NUNE\Administrator
2024-01-17 18:36:59 +08:00
parent 8ad2313502
commit 1b4db3c980
46 changed files with 1518 additions and 667 deletions

View File

@@ -11,13 +11,13 @@ import BattleResource from "../tools/BattleResource";
export enum BattleMode{
//无尽模式
OnHook = "OnHook",
OnHook = 0,
//PVP 模式
PVP = "PVP",
PVP = 1,
//阵营守护
CampGuardian = "CampGuardian",
CampGuardian = 2,
//副本
GDungeonMode = "GDungeonMode",
GDungeonMode = 3,
}
export interface GBattleModeInfo{
@@ -102,6 +102,7 @@ export default class GBattleModeManager extends Singleton {
}
this.current = mode;
this.data = data;
this.Close();
this.current = mode;
this.data = data;

View File

@@ -1,12 +1,9 @@
import { _decorator } from "cc";
import GFSMDefault from "../../fsm/Default/GFSMDefault";
import { GFSMDefaultAnim } from "../../fsm/Default/GFSMDefaultAnim";
import { GFSMAnimBase } from "../../fsm/GFSMAnimBase";
import GFSMBase from "../../fsm/GFSMBase";
import GRoleBase from "../GRoleBase";
import { ProgressBar } from "cc";
import { TB } from "../../../../config/data/schema";
import { GPetAminEnum } from "../../anim/GPetAnim";
import { v3 } from "cc";
import GFSMCampGuardianAnim from "../../fsm/CampGuardian/GFSMCampGuardianAnim";
const { property,ccclass } = _decorator;

View File

@@ -113,6 +113,7 @@ export default abstract class GRoleBase<T> extends GObject<T>{
public init(role:TB.TbGRole){
console.log("初始化宠物",!!this.spine,!!(app.battleRes.getRoleSpine(role.id)));
this.spine.skeletonData = app.battleRes.getRoleSpine(role.id);
this.node.scale = v3(role.roleScale,role.roleScale,role.roleScale);
}
//创建一个状态机

View File

@@ -1,7 +1,9 @@
import { TD, app } from "../../../App";
import { TbGEntity } from "../../../config/data/schema";
import { PetEquip, PlayerPetOV } from "../../../consts/API";
import GRoleValues from "./GRoleValues";
import GAttribute from "./attribute/GAttribute";
import GDefaultAttribute from "./attribute/default/GDefaultAttribute";
import GPetAttribute from "./attribute/role/GPetAttribute";
import GPetEquipAttribute from "./attribute/role/GPetEquipAttribute";
@@ -84,4 +86,13 @@ export default class GAttributeData{
}
//根据属性返回属性
static TAttributeValue(info:TbGEntity.TAttributeValue[]){
let value = new GAttribute();
value.add(new GDefaultAttribute().set(info))
return value;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "a5050452-3587-4ccd-a324-f7e7e1fb9cce",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,24 @@
import { TD } from "../../../../../App";
import { TbGEntity } from "../../../../../config/data/schema";
import GAttributeBase from "../GAttributeBase";
//默认属性
export default class GDefaultAttribute extends GAttributeBase{
update() { }
set(info:TbGEntity.TAttributeValue[]){
this.attributes = {};
//获取全部属性信息
TD.TbGAttribute.getDataList().forEach(attr => {
//默认 0
this.attributes[attr.id] = 0;
});
info.forEach(item => this.attributes[item.id] += item.value);
return this;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "770fb39c-b04f-4c1c-9dff-105f01b099f6",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -1,105 +1,75 @@
import { _decorator } from "cc";
import GBaseMode from "../GBaseMode";
import { TB, TbGEntity } from "../../config/data/schema";
import GNormalModeBase, { GNormalModePlayerEnum } from "./default/GNormalModeBase";
import { TD, app } from "../../App";
import GOnHookData from "../../data/GOnHookData";
import PlayerTacticalData from "../../data/PlayerTacticalData";
import PlayerPetData from "../../data/PlayerPetData";
import { TD, app } from "../../App";
import { GUI } from "../../ui/UIConfig";
import { GOnHookModePlayerEnum } from "./GOnHookMode";
import GRoleDefault from "../base/role/GRoleDefault";
import GBattleData from "../../data/GBattleData";
import GAttributeData from "../base/values/GAttributeData";
import JNFrameTime from "../../../../extensions/ngame/assets/ngame/sync/frame/game/time/JNFrameTime";
const { ccclass, property } = _decorator;
//角色
export enum GDungeonModeEnum{
PLAYER, //玩家
ENEMY, //怪物
}
/**
* 副本(默认) 模式
*/
@ccclass('GDungeonMode')
export default class GDungeonMode extends GBaseMode<{},TbGEntity.TDungeon>{
export default class GDungeonMode extends GNormalModeBase<{},TbGEntity.TDungeon>{
onSyncInitSuccess(){
if(!this.data) return;
//生成玩家宠物
onGenPlayerPet(index:number,petId:number){
console.log("初始化 GDungeonMode 模式",this.data);
super.onSyncInitSuccess();
this.onUpdateWorld();
//生成玩家宠物
this.onGenPlayerPet();
//生成Boss
this.onGenBoss();
}
//更新地图
onUpdateWorld(){
let info = TD.TbGOnHookMaps.get(GOnHookData.getIns().info.onHookMap);
this.setWorldMap(info.mapId);
}
onGenPlayerPet(){
//获取玩家阵容
let infos = PlayerTacticalData.getIns().getTacticalInfo();
infos.forEach(petId => {
infos.forEach((petId,index) => {
if(!petId) return;
//获取要生成的宠物
let info = PlayerPetData.getIns().petIdQueryPetInfo(petId);
if(!info){
app.layer.Open(GUI.Tips,{text:"未拥有当前上阵的宠物"});
return;
}
let role = this.onGenRole(GOnHookModePlayerEnum.PLAYER,index,TD.TbGRole.get(info.petTbId));
let role = this.onGenRole(GNormalModePlayerEnum.PLAYER,index + 1,TD.TbGRole.get(info.petTbId));
//添加宠物属性
role.onEffectiveValue(GBattleData.getIns().data.getPetAttribute(petId));
})
//如果场上有这个宠物则更新阵法位置
let passRole:GRoleDefault;
this.playerRoles.forEach(role => {
if(role.getComponent(GRoleOnHookPlayerExpand).petId == petId)
passRole = role;
})
if(passRole){
//更新宠物阵法位置
passRole.tacticalIndex = index;
return;
}
if(!info){
app.layer.Open(GUI.Tips,{text:"未拥有当前上阵的宠物"});
return;
}
let role = this.onGenRole(GOnHookModePlayerEnum.PLAYER,index,TD.TbGRole.get(info.petTbId));
//向宠物添加 OnHook 扩展
let expand = role.node.addComponent(GRoleOnHookPlayerExpand);
expand.petId = petId;
//添加宠物属性
role.onEffectiveValue(GBattleData.getIns().data.getPetAttribute(petId));
}
//生成宠物
onGenRole(type: GOnHookModePlayerEnum,index:number,info:TB.TbGRole):GRoleDefault {
let tactical = this.getInfo(type).tactical;
let pos:Vec2 = this.getInfo(type).tactical.getPosition(index);
if(!pos) return;
let role = instantiate(this.rolePrefab);
let entity = role.getComponent(GRoleDefault);
//初始化
entity.onInit(type,info,tactical,index);
//绑定寻敌
entity.onQueryEunmy = () => {
return this.getEnumy(entity,type);
}
//绑定死亡回调
entity.addKillBackEvent(this.onRoleKillBack.bind(this))
//绑定受击回调
entity.addHitCallback(this.onHitBack.bind(this));
this.addGObject(entity,tactical.getPosition(index));
this.getOnesRole(type).push(entity);
return entity;
onGenBoss(){
let enemy = this.onGenRole(GNormalModePlayerEnum.ENEMY,5,TD.TbGRole.get(this.data.boss));
enemy.onEffectiveValue(GAttributeData.TAttributeValue(this.data.attributes))
}
//战斗结束
onBattleEnd(win:GNormalModePlayerEnum){
//结束游戏
JNFrameTime.getInstance().setTimeout(() => {
this.Close();
},3000)
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "202e1a9e-fabf-412d-818d-69b4e13c8d5f",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -24,11 +24,10 @@ import { GOnHookPet, GOnHookPets } from "../../../../extensions/ngame/assets/nga
import GOnHookManager, { GOnHookManagerEvent } from "../../manager/battle/mode/GOnHookManager";
import GRoleOnHookCreepsExpand from "../base/role/expand/OnHook/GRoleOnHookCreepsExpand";
import GPetAttribute from "../base/values/attribute/role/GPetAttribute";
import GDefaultMode from "./default/GDefaultMode";
import GOnHookData from "../../data/GOnHookData";
import { GModeEvent, GModeHitInfo } from "./GMode";
import GAttributeData from "../base/values/GAttributeData";
import GBattleData, { GBattleDataEnum } from "../../data/GBattleData";
import GNormalModeBase, { GNormalModePlayerEnum } from "./default/GNormalModeBase";
const { ccclass, property } = _decorator;
//挂机模式状态
@@ -38,26 +37,11 @@ export enum GOnHookModeState{
AttackEnd, //攻击结束
}
//角色
export enum GOnHookModePlayerEnum{
PLAYER, //玩家
ENEMY, //怪物
}
//玩家信息
export interface GOnHookInfo{
//阵法
tactical: GTactical;
}
/**
* 挂机模式 无限出现小怪 (不是联机模式 该模式支持使用本地数据 和 API)
*/
@ccclass('GOnHookMode')
export default class GOnHookMode extends GDefaultMode<{},{}>{
@property(Prefab)
rolePrefab: Prefab = null;
export default class GOnHookMode extends GNormalModeBase<{},{}>{
@property(Node)
objects: Node = null;
@@ -65,16 +49,6 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
get scene():Node{
return this.objects;
}
//玩家信息
playerInfo:GOnHookInfo;
//宠物信息
enemyInfo:GOnHookInfo;
//玩家宠物位置
playerPos: Vec2 = new Vec2(-400,0);
//怪物位置
enemyPos: Vec2 = new Vec2(400,0);
//玩家宠物
playerRoles: GRoleDefault[] = [];
@@ -102,6 +76,9 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
//是否战斗失败
isFail:boolean = false;
//让胜负失效
get isEndGame(){return true;}
//添加监听事件
addEvent(){
app.event.on(PlayerTacticalEvent.UPDATE_TACTICAL,this.onUpdatePlayerPet,this);
@@ -121,20 +98,13 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
//初始化战斗
console.log("GOnHookMode 模式初始化");
//调整相机
this.camera.enabled = true;
let camreaPos = this.camera.node.worldPosition;
this.camera.node.worldPosition = v3(0,750,camreaPos.z)
super.onSyncInitSuccess();
//初始化状态机
this.fsm = new GFSMOnHookMode(this);
//更新场景
this.onUpdateWorld();
this.playerInfo = { tactical: GTactical.getTactical().setOffset(this.playerPos) };
this.enemyInfo = { tactical: GTactical.getTactical(true).setOffset(this.enemyPos) };
this.onUpdatePlayerPet();
//添加监听
@@ -149,7 +119,7 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
// })
//生成玩家
// this.playerInfo.roles.forEach((info,index) => this.onGenRole(GOnHookModePlayerEnum.PLAYER,index + 1,info))
// this.playerInfo.roles.forEach((info,index) => this.onGenRole(GNormalModePlayerEnum.PLAYER,index + 1,info))
// //生成敌人
// this.onResetGenerateEnemy();
@@ -173,7 +143,7 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
let infos = PlayerTacticalData.getIns().getTacticalInfo();
//移除不再阵容中的宠物
let roles = [...this.getOnesRoleAlive(GOnHookModePlayerEnum.PLAYER)]
let roles = [...this.getOnesRoleAlive(GNormalModePlayerEnum.PLAYER)]
roles.forEach(role => {
let expand = role.getComponent(GRoleOnHookPlayerExpand);
//如果宠物不再阵容中 则 移除宠物
@@ -195,7 +165,7 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
//更新属性
onUpdateAttribute(){
this.getOnesRole(GOnHookModePlayerEnum.PLAYER).forEach(pet => {
this.getOnesRole(GNormalModePlayerEnum.PLAYER).forEach(pet => {
pet.onEffectiveValue(GBattleData.getIns().data.getPetAttribute(pet.getComponent(GRoleOnHookPlayerExpand).petId));
});
@@ -221,7 +191,7 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
}else{
//获取冲到最前面的宠物
let roles = this.getOnesRoleAlive(GOnHookModePlayerEnum.PLAYER);
let roles = this.getOnesRoleAlive(GNormalModePlayerEnum.PLAYER);
let frontRole = roles.sort((role1,role2) => role2.v2World.x - role1.v2World.x)[0];
if(!frontRole) return;
@@ -254,7 +224,7 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
app.layer.Open(GUI.Tips,{text:"未拥有当前上阵的宠物"});
return;
}
let role = this.onGenRole(GOnHookModePlayerEnum.PLAYER,index,TD.TbGRole.get(info.petTbId));
let role = this.onGenRole(GNormalModePlayerEnum.PLAYER,index,TD.TbGRole.get(info.petTbId));
//向宠物添加 OnHook 扩展
let expand = role.node.addComponent(GRoleOnHookPlayerExpand);
expand.petId = petId;
@@ -267,7 +237,7 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
//生成野怪
onGenCreeps(index:number,creeps:GOnHookPet){
let role = this.onGenRole(GOnHookModePlayerEnum.ENEMY,index,TD.TbGRole.get(creeps.petTbId));
let role = this.onGenRole(GNormalModePlayerEnum.ENEMY,index,TD.TbGRole.get(creeps.petTbId));
//向野怪添加扩展
let expand = role.node.addComponent(GRoleOnHookCreepsExpand);
@@ -285,85 +255,12 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
}
//生成宠物
onGenRole(type: GOnHookModePlayerEnum,index:number,info:TB.TbGRole):GRoleDefault {
let tactical = this.getInfo(type).tactical;
let pos:Vec2 = this.getInfo(type).tactical.getPosition(index);
if(!pos) return;
let role = instantiate(this.rolePrefab);
let entity = role.getComponent(GRoleDefault);
//初始化
entity.onInit(type,info,tactical,index);
//绑定寻敌
entity.onQueryEunmy = () => {
return this.getEnumy(entity,type);
}
//绑定死亡回调
entity.addKillBackEvent(this.onRoleKillBack.bind(this))
//绑定受击回调
entity.addHitCallback(this.onHitBack.bind(this));
this.addGObject(entity,tactical.getPosition(index));
this.getOnesRole(type).push(entity);
return entity;
}
//获取配置
getInfo(type: GOnHookModePlayerEnum): GOnHookInfo {
if(type == GOnHookModePlayerEnum.PLAYER) return this.playerInfo;
if(type == GOnHookModePlayerEnum.ENEMY) return this.enemyInfo;
}
//获取阵营宠物
getOnesRole(type: GOnHookModePlayerEnum):GRoleDefault[]{
if(type == GOnHookModePlayerEnum.PLAYER) return this.playerRoles;
if(type == GOnHookModePlayerEnum.ENEMY) return this.enemyRoles;
}
//获取存活的宠物
getOnesRoleAlive(type: GOnHookModePlayerEnum):GRoleDefault[]{
if(type == GOnHookModePlayerEnum.PLAYER) return this.playerRoles.filter(role => !!role.get());
if(type == GOnHookModePlayerEnum.ENEMY) return this.enemyRoles.filter(role => !!role.get());
}
//获取敌人
getEnumy(player:GRoleDefault,type:GOnHookModePlayerEnum):GRoleDefault{
getEnumy(player:GRoleDefault,type:GNormalModePlayerEnum):GRoleDefault{
if(!this.isAllowAttack) return null;
let enumyOnes = GOnHookModePlayerEnum.ENEMY
//如果是ENEMY 则 它的敌人是 PLAYER
if(type == GOnHookModePlayerEnum.ENEMY) enumyOnes = GOnHookModePlayerEnum.PLAYER
//获取敌人
let roles = this.getOnesRoleAlive(enumyOnes);
//通过距离获取最近的敌人
if(roles[0]){
let len = Math.abs(Vec2.distance(player.v2World,roles[0].v2World));
let enumy = roles[0];
for (let index = 0; index < roles.length; index++) {
const role = roles[index];
let tLen;
if(tLen = Math.abs(Vec2.distance(player.v2World,role.v2World)) < len){
enumy = role;
len = tLen;
}
}
return enumy;
}else{
return null;
}
return super.getEnumy(player,type);
}
@@ -385,20 +282,13 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
}
this.onUpdatePlayerPet();
// this.enemyInfo.roles.forEach((info,index) => this.onGenRole(GOnHookModePlayerEnum.ENEMY,index + 1,info));
// this.enemyInfo.roles.forEach((info,index) => this.onGenRole(GNormalModePlayerEnum.ENEMY,index + 1,info));
}
//角色死亡回调
onRoleKillBack(role:GRoleDefault){
//死亡销毁
JNFrameTime.getInstance().setTimeout(() => {
if(role.isValid)
role.node.destroy()
else console.log(role,"无法销毁");
},3000)
//清理
this.onClearCache();
super.onRoleKillBack(role);
//如果死亡的是野怪则通知野怪死亡
if(role.getComponent(GRoleOnHookCreepsExpand)){
@@ -420,22 +310,6 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
}
//角色受击回调
onHitBack(role:GRoleDefault,hit:number){
if(!role.get()) return;
//添加受击显示
app.event.emit(GModeEvent.HIT,{
mode:this,
role:role,
hit:hit,
world:role.v2World,
camera:this.camera,
});
}
//清理缓存
onClearCache(){
@@ -458,7 +332,7 @@ export default class GOnHookMode extends GDefaultMode<{},{}>{
//是否有怪物
isHaveEnemy(){
if(!this.isAllowAttack) return [];
return this.getOnesRoleAlive(GOnHookModePlayerEnum.ENEMY).filter(role => !!role.get()).length > 0;
return this.getOnesRoleAlive(GNormalModePlayerEnum.ENEMY).filter(role => !!role.get()).length > 0;
}
//前往下一个目标

View File

@@ -1,5 +1,6 @@
import GFSMBase, { GFSMProcessEnum, GFSMProcessInfo, GFSMProcessMode } from "../../base/fsm/GFSMBase";
import GOnHookMode, { GOnHookModePlayerEnum } from "../GOnHookMode";
import GOnHookMode from "../GOnHookMode";
import { GNormalModePlayerEnum } from "../default/GNormalModeBase";
//流程枚举
enum ProcessEnum {
@@ -88,7 +89,7 @@ export default class GFSMOnHookMode extends GFSMBase{
onLeaveFightProcess(){
//判断玩家是否前往到战斗位置
let roles = this.mode.getOnesRoleAlive(GOnHookModePlayerEnum.PLAYER);
let roles = this.mode.getOnesRoleAlive(GNormalModePlayerEnum.PLAYER);
if(roles.length == 0) return GFSMProcessEnum.Reset;
for (let index = 0; index < roles.length; index++) {

View File

@@ -1,22 +1,96 @@
import { Vec2 } from "cc";
import { TB } from "../../../config/data/schema";
import GRoleDefault from "../../base/role/GRoleDefault";
import { GTactical } from "../../entity/GTactical";
import GDefaultMode from "./GDefaultMode";
import { instantiate } from "cc";
import { _decorator } from "cc";
import { Prefab } from "cc";
import JNFrameTime from "../../../../../extensions/ngame/assets/ngame/sync/frame/game/time/JNFrameTime";
import { v3 } from "cc";
import { GModeEvent } from "../GMode";
import { app } from "../../../App";
const { ccclass, property } = _decorator;
//角色
export enum GNormalModeEnum{
export enum GNormalModePlayerEnum{
PLAYER, //玩家
ENEMY, //怪物
}
export default class GNormalModeBase extends GDefaultMode<{},{}>{
export interface GNormalModePlayerInfo{
//阵法
tactical: GTactical;
}
export default class GNormalModeBase<T,DT> extends GDefaultMode<T,DT>{
@property(Prefab)
playerPrefab: Prefab = null;
@property(Prefab)
enemyPrefab: Prefab = null;
//玩家宠物
playerRoles: GRoleDefault[] = [];
//敌方宠物
enemyRoles: GRoleDefault[] = [];
//玩家信息
playerInfo:GNormalModePlayerInfo;
//宠物信息
enemyInfo:GNormalModePlayerInfo;
//玩家宠物位置
playerPos: Vec2 = new Vec2(-400,0);
//怪物位置
enemyPos: Vec2 = new Vec2(400,0);
//是否结束游戏
_isEndGame:boolean = false;
get isEndGame(){return this._isEndGame;}
set isEndGame(value){this._isEndGame = value}
onSyncInitSuccess(){
this.playerInfo = { tactical: GTactical.getTactical().setOffset(this.playerPos) };
this.enemyInfo = { tactical: GTactical.getTactical(true).setOffset(this.enemyPos) };
//调整相机
this.camera.enabled = true;
let camreaPos = this.camera.node.worldPosition;
this.camera.node.worldPosition = v3(0,750,camreaPos.z)
}
//获取配置
getInfo(type: GNormalModePlayerEnum): GNormalModePlayerInfo {
if(type == GNormalModePlayerEnum.PLAYER) return this.playerInfo;
if(type == GNormalModePlayerEnum.ENEMY) return this.enemyInfo;
}
//获取阵营宠物
getOnesRole(type: GNormalModePlayerEnum):GRoleDefault[]{
if(type == GNormalModePlayerEnum.PLAYER) return this.playerRoles;
if(type == GNormalModePlayerEnum.ENEMY) return this.enemyRoles;
}
//获取存活的宠物
getOnesRoleAlive(type: GNormalModePlayerEnum):GRoleDefault[]{
if(type == GNormalModePlayerEnum.PLAYER) return this.playerRoles.filter(role => !!role.get());
if(type == GNormalModePlayerEnum.ENEMY) return this.enemyRoles.filter(role => !!role.get());
}
//生成宠物
onGenRole(type: GNormalModeEnum,index:number,info:TB.TbGRole):GRoleDefault {
onGenRole(type: GNormalModePlayerEnum,index:number,info:TB.TbGRole):GRoleDefault {
let tactical = this.getInfo(type).tactical;
let pos:Vec2 = this.getInfo(type).tactical.getPosition(index);
if(!pos) return;
let role = instantiate(this.rolePrefab);
let role;
if(type == GNormalModePlayerEnum.PLAYER)
role = instantiate(this.playerPrefab);
if(type == GNormalModePlayerEnum.ENEMY)
role = instantiate(this.enemyPrefab);
let entity = role.getComponent(GRoleDefault);
//初始化
@@ -40,5 +114,102 @@ export default class GNormalModeBase extends GDefaultMode<{},{}>{
}
//获取敌人
getEnumy(player:GRoleDefault,type:GNormalModePlayerEnum):GRoleDefault{
let enumyOnes = GNormalModePlayerEnum.ENEMY
//如果是ENEMY 则 它的敌人是 PLAYER
if(type == GNormalModePlayerEnum.ENEMY) enumyOnes = GNormalModePlayerEnum.PLAYER
//获取敌人
let roles = this.getOnesRoleAlive(enumyOnes);
//通过距离获取最近的敌人
if(roles[0]){
let len = Math.abs(Vec2.distance(player.v2World,roles[0].v2World));
let enumy = roles[0];
for (let index = 0; index < roles.length; index++) {
const role = roles[index];
let tLen;
if(tLen = Math.abs(Vec2.distance(player.v2World,role.v2World)) < len){
enumy = role;
len = tLen;
}
}
return enumy;
}else{
return null;
}
}
//清理缓存
onClearCache(){
//清理宠物
let roles = [...this.playerRoles];
roles.forEach(role => {
if(!role.get()){
this.playerRoles.splice(this.playerRoles.indexOf(role),1);
}
})
roles = [...this.enemyRoles];
roles.forEach(role => {
if(!role.get()){
this.enemyRoles.splice(this.enemyRoles.indexOf(role),1);
}
})
}
//角色死亡回调
onRoleKillBack(role:GRoleDefault){
//死亡销毁
JNFrameTime.getInstance().setTimeout(() => {
if(role.isValid)
role.node.destroy()
else console.log(role,"无法销毁");
},3000)
//清理
this.onClearCache();
//如果任何一方死亡则调用结束
if(!this.isEndGame){
if(this.playerRoles.length == 0){
this.isEndGame = true;
return this.onBattleEnd(GNormalModePlayerEnum.ENEMY)
}
if(this.enemyRoles.length == 0){
this.isEndGame = true;
return this.onBattleEnd(GNormalModePlayerEnum.PLAYER)
}
}
}
//战斗结束(胜利队伍)
onBattleEnd(win:GNormalModePlayerEnum){}
//角色受击回调
onHitBack(role:GRoleDefault,hit:number){
if(!role.get()) return;
//添加受击显示
app.event.emit(GModeEvent.HIT,{
mode:this,
role:role,
hit:hit,
world:role.v2World,
camera:this.camera,
});
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "596564e1-2c26-46ce-aaa9-d4276bf9a702",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -61,6 +61,8 @@ export class TbGRole {
this.roleAttackRange = _json_.roleAttackRange
if (_json_.roleHight === undefined) { throw new Error() }
this.roleHight = _json_.roleHight
if (_json_.roleScale === undefined) { throw new Error() }
this.roleScale = _json_.roleScale
}
/**
@@ -87,6 +89,10 @@ export class TbGRole {
* 角色高度
*/
readonly roleHight: number
/**
* 宠物默认缩放
*/
readonly roleScale: number
resolve(tables:Tables)
{
@@ -928,8 +934,12 @@ export class TbGSysDungeon {
this.name = _json_.name
if (_json_.banner === undefined) { throw new Error() }
this.banner = _json_.banner
if (_json_.type === undefined) { throw new Error() }
this.type = _json_.type
if (_json_.tigs === undefined) { throw new Error() }
this.tigs = _json_.tigs
if (_json_.consume === undefined) { throw new Error() }
this.consume = new TbGEntity.TResource(_json_.consume)
}
/**
@@ -944,10 +954,18 @@ export class TbGSysDungeon {
* 副本封面
*/
readonly banner: string
/**
* 游戏模式
*/
readonly type: string
/**
* 类标识
*/
readonly tigs: string
/**
* 消耗资源
*/
readonly consume: TbGEntity.TResource
resolve(tables:Tables)
{

View File

@@ -2,6 +2,9 @@ import { _decorator, Component, Node } from 'cc';
import JNScrollViewItem from '../../../../extensions/ngame/assets/ngame/util/components/scrollview/JNScrollViewItem';
import { TB } from '../../config/data/schema';
import { Label } from 'cc';
import GBattleModeManager, { BattleMode } from '../../battle/GBattleModeManager';
import { app, TD } from '../../App';
import { GUI } from '../UIConfig';
const { ccclass, property } = _decorator;
@ccclass('DungeonShowItem')
@@ -23,6 +26,14 @@ export class DungeonShowItem extends JNScrollViewItem<TB.TbGSysDungeon> {
}
//点击副本
onClickDungeon(){
GBattleModeManager.getIns().Open(BattleMode[`${this.data.type}`],true,TD[`${this.data.tigs}`].getDataList()[0].data);
app.layer.Close(GUI.DungeonView);
}
}

View File

@@ -1,7 +1,7 @@
import { _decorator, Component, Node } from 'cc';
import JNLayerBase from '../../../../extensions/ngame/assets/ngame/ui/base/JNLayerBase';
import { Prefab } from 'cc';
import PlayerPetData from '../../data/PlayerPetData';
import PlayerPetData, { PlayerPetEvent } from '../../data/PlayerPetData';
import JNScrollView from '../../../../extensions/ngame/assets/ngame/util/components/scrollview/JNScrollView';
import { NodeEventType } from 'cc';
import { sp } from 'cc';
@@ -50,9 +50,23 @@ export class IntoBattleView extends JNLayerBase {
console.log("你选择的是",this.tIndex);
app.event.on(PlayerPetEvent.UPDATE_MINUS,this.onPetMinus,this); //减少宠物
this.onUpdateView();
}
onJNClose(): void {
//取消监听
app.event.off(PlayerPetEvent.UPDATE_INFO,this.onPetMinus,this); //减少宠物
}
onPetMinus(pet:PlayerPetOV){
this.views.getItems<PetIconSelectScroll>().forEach(item => {
if(item.data.petId == pet.petId)
this.views.delData(item.data);
});
}
//刷新页面
onUpdateView(){