165 lines
5.0 KiB
TypeScript
Raw Normal View History

2023-12-10 00:58:43 +08:00
import { Vec2 } from "cc";
2023-12-08 21:26:47 +08:00
import GDefaultMode from "./default/GDefaultMode";
2023-12-13 19:33:57 +08:00
import { TB } from "../../config/data/schema";
2023-12-10 00:58:43 +08:00
import GRoleDefault from "../base/role/GRoleDefault";
2023-12-11 10:42:36 +08:00
import { _decorator } from "cc";
2023-12-12 18:54:31 +08:00
import GBaseMode from "../GBaseMode";
import { Prefab } from "cc";
import { instantiate } from "cc";
import GRoleCGCrystal from "../base/role/CampGuardian/GRoleCGCrystal";
import { TD } from "../../App";
import { GTowards } from "../base/GObject";
import GRoleBase from "../base/role/GRoleBase";
2023-12-13 10:51:31 +08:00
import { GTactical } from "../entity/GTactical";
import JNFrameTime from "../../../../extensions/ngame/assets/ngame/sync/frame/game/time/JNFrameTime";
2023-12-13 19:33:57 +08:00
import { TbGPetId } from "../../config/TbGPet";
2023-12-14 19:16:28 +08:00
import GModeTools from "./GModeTools";
import GPetAttribute from "../base/values/attribute/role/GPetAttribute";
import RandomUtil from "../../../../extensions/ngame/assets/ngame/util/RandomUtil";
2023-12-11 10:42:36 +08:00
const { ccclass, property } = _decorator;
2023-12-08 21:26:47 +08:00
2023-12-12 18:54:31 +08:00
//阵营守护 角色
export enum GCampGuardianEnum{
PLAYER, //玩家
ENEMY, //敌人
}
2023-12-08 21:26:47 +08:00
//阵营守护
//玩家派兵攻击对方阵营 游戏参考
2023-12-11 10:42:36 +08:00
@ccclass('GCampGuardianMode')
2023-12-12 18:54:31 +08:00
export default class GCampGuardianMode extends GBaseMode<{},{}>{
2023-12-08 21:26:47 +08:00
2023-12-10 00:58:43 +08:00
//玩家水晶位置
2023-12-14 19:16:28 +08:00
playerPos: Vec2 = new Vec2(-800,-100);
2023-12-11 10:42:36 +08:00
//敌方水晶位置
2023-12-14 19:16:28 +08:00
enemyPos: Vec2 = new Vec2(800,-100);
2023-12-12 18:54:31 +08:00
//我方水晶
//敌方水晶
//水晶预制体
@property(Prefab)
crystalPrefab: Prefab;
//角色预制体
@property(Prefab)
petPrefab: Prefab;
2023-12-08 21:26:47 +08:00
2023-12-12 18:54:31 +08:00
//玩家宠物
playerRoles: GRoleBase<{}>[] = [];
//敌方宠物
enemyRoles: GRoleBase<{}>[] = [];
2023-12-10 00:58:43 +08:00
onSyncInitSuccess(){
2023-12-12 18:54:31 +08:00
//生成水晶
this.onGenCrystal(GCampGuardianEnum.PLAYER);
this.onGenCrystal(GCampGuardianEnum.ENEMY);
2023-12-10 00:58:43 +08:00
2023-12-13 10:51:31 +08:00
//定时器生成
JNFrameTime.getInstance().setInterval(() => {
2023-12-14 19:16:28 +08:00
let max = TD.TbGRole.getDataList().length;
this.onGenRole(GCampGuardianEnum.PLAYER,TD.TbGRole.getDataList()[Math.floor(this.getSync().SyncRandomInt(0,max - 1))]);
this.onGenRole(GCampGuardianEnum.ENEMY,TD.TbGRole.getDataList()[Math.floor(this.getSync().SyncRandomInt(0,max - 1))]);
2023-12-13 10:51:31 +08:00
},1000)
2023-12-10 00:58:43 +08:00
}
2023-12-12 18:54:31 +08:00
//生成水晶
onGenCrystal(type:GCampGuardianEnum){
let crystalNode = instantiate(this.crystalPrefab);
let crystal = crystalNode.getComponent(GRoleCGCrystal);
2023-12-13 19:33:57 +08:00
crystal.init(TD.TbGRole.get(TbGPetId.));
2023-12-12 18:54:31 +08:00
switch(type){
case GCampGuardianEnum.PLAYER:
this.addGObject(crystal,this.playerPos)
break;
case GCampGuardianEnum.ENEMY:
crystal.setTowards(GTowards.LEFT)
this.addGObject(crystal,this.enemyPos)
break;
}
}
2023-12-11 10:42:36 +08:00
2023-12-13 10:51:31 +08:00
//生成宠物
onGenRole(type:GCampGuardianEnum,info:TB.TbGRole):GRoleDefault {
2023-12-10 00:58:43 +08:00
2023-12-13 10:51:31 +08:00
let tactical = GTactical.getTactical();
let pos:Vec2;
switch(type){
case GCampGuardianEnum.PLAYER:
2023-12-18 09:31:13 +08:00
tactical.setOffset(this.playerPos);
2023-12-13 10:51:31 +08:00
pos = tactical.getPosXYPosition(1,1,this.playerPos);
break;
case GCampGuardianEnum.ENEMY:
2023-12-18 09:31:13 +08:00
tactical.setOffset(this.enemyPos);
2023-12-13 10:51:31 +08:00
pos = tactical.getPosXYPosition(1,1,this.enemyPos);
break;
}
2023-12-10 00:58:43 +08:00
2023-12-13 10:51:31 +08:00
if(!pos) return;
let role = instantiate(this.petPrefab);
2023-12-10 00:58:43 +08:00
2023-12-13 10:51:31 +08:00
let entity = role.getComponent(GRoleDefault);
//初始化
entity.onInit(type,info,tactical,tactical.getPosXY(1,1));
2023-12-10 00:58:43 +08:00
2023-12-14 19:16:28 +08:00
//绑定寻敌
entity.onQueryEunmy = () => {
return GModeTools.getNearbyEnumy(entity,this.getOnesRoleAlive(type == GCampGuardianEnum.PLAYER ? GCampGuardianEnum.ENEMY : GCampGuardianEnum.PLAYER));
}
2023-12-10 00:58:43 +08:00
2023-12-14 19:16:28 +08:00
//绑定死亡回调
2023-12-18 09:31:13 +08:00
entity.addKillBackEvent(this.onRoleKillBack.bind(this))
2023-12-14 19:16:28 +08:00
//添加宠物属性
entity.onEffectiveValue(new GPetAttribute({
petId:info.id,
petPlayerId:0,
petTbId:info.id,
petLevel:0,
petStar:0,
petStarExp:0,
}));
2023-12-13 10:51:31 +08:00
// //绑定受击回调
// entity.addHitCallback(this.onHitBack.bind(this));
2023-12-10 00:58:43 +08:00
2023-12-13 10:51:31 +08:00
this.addGObject(entity,pos);
2023-12-14 19:16:28 +08:00
this.getOnesRole(type).push(entity);
2023-12-13 10:51:31 +08:00
return entity;
2023-12-10 00:58:43 +08:00
2023-12-13 10:51:31 +08:00
}
2023-12-14 19:16:28 +08:00
//获取阵营宠物
getOnesRole(type: GCampGuardianEnum):GRoleBase<{}>[]{
if(type == GCampGuardianEnum.PLAYER) return this.playerRoles;
if(type == GCampGuardianEnum.ENEMY) return this.enemyRoles;
}
//获取存活的宠物
getOnesRoleAlive(type: GCampGuardianEnum):GRoleBase<{}>[]{
if(type == GCampGuardianEnum.PLAYER) return this.playerRoles.filter(role => !!role.get());
if(type == GCampGuardianEnum.ENEMY) return this.enemyRoles.filter(role => !!role.get());
}
//角色死亡回调
onRoleKillBack(role:GRoleDefault){
//死亡销毁
JNFrameTime.getInstance().setTimeout(() => {
if(role.isValid)
role.node.destroy()
},3000)
}
2023-12-08 21:26:47 +08:00
}