mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-27 02:36:14 +00:00
更新无限地图
This commit is contained in:
@@ -4,10 +4,14 @@ import { v3 } from "cc";
|
||||
import { JNFrameInfo } from "../../../extensions/ngame/assets/ngame/sync/frame/JNSyncFrame";
|
||||
import { Node } from "cc";
|
||||
import { Vec3 } from "cc";
|
||||
import { Camera } from "cc";
|
||||
|
||||
|
||||
export default class GBaseMode<T> extends GObject<T> {
|
||||
|
||||
//场景相机
|
||||
camera:Camera;
|
||||
|
||||
get scene():Node{
|
||||
return this.node;
|
||||
}
|
||||
|
@@ -8,13 +8,14 @@ import GButtleBase from "../bullet/GButtleBase";
|
||||
import { GFSMAnimBase } from "../fsm/GFSMAnimBase";
|
||||
import GFSMBase from "../fsm/GFSMBase";
|
||||
import GRoleDefault from "../role/GRoleDefault";
|
||||
import GNode from "../common/GNode";
|
||||
|
||||
//攻击子弹类
|
||||
export class GAttackBullet{
|
||||
|
||||
//创建子弹
|
||||
static create<T extends GButtleBase<{}>>(GClass:{new():T},data:{}):T{
|
||||
let bulletNode = new Node();
|
||||
let bulletNode = GNode.create();
|
||||
bulletNode.addComponent(UITransform);
|
||||
let bullet = bulletNode.addComponent(GClass);
|
||||
bullet.setData(data);
|
||||
|
@@ -8,7 +8,7 @@ import { v3 } from "cc";
|
||||
import { bezier } from "cc";
|
||||
import { v2 } from "cc";
|
||||
import { Vec2 } from "cc";
|
||||
import GEffectUtil from "../../effect/GEffectUtil";
|
||||
import GEffectUtil from "../common/GEffectUtil";
|
||||
import { TableGRoleAttackEffect } from "../../../../resources/config/ts/TableGRoleAttackEffect";
|
||||
import GDetection from "../common/GDetection";
|
||||
import { rect } from "cc";
|
||||
@@ -25,9 +25,9 @@ export default class GAttackParabolicRemote implements GAttackBase{
|
||||
let enemy = role.fsm.enemy;
|
||||
if(!enemy) return;
|
||||
|
||||
let image:SpriteFrame = app.role.bullets[info.attackArgs[0]];
|
||||
let image:SpriteFrame = app.battleRes.bullets[info.attackArgs[0]];
|
||||
let bang = {
|
||||
ske: app.role.effects[info.attackArgs[1]],
|
||||
ske: app.battleRes.effects[info.attackArgs[1]],
|
||||
info: TableGRoleAttackEffect.getConfig(info.attackArgs[1])
|
||||
};
|
||||
let bone = role.spine.findBone(info.attackArgs[2]);
|
||||
|
@@ -1,15 +1,15 @@
|
||||
import { UITransform } from "cc";
|
||||
import { Node } from "cc";
|
||||
import { sp } from "cc";
|
||||
import JNSkeleton from "../../../../extensions/ngame/assets/ngame/sync/frame/game/spine/JNFrameSkeleton";
|
||||
import { GData } from "../../GData";
|
||||
import JNSkeleton from "../../../../../extensions/ngame/assets/ngame/sync/frame/game/spine/JNFrameSkeleton";
|
||||
import { GData } from "../../../GData";
|
||||
import GNode from "./GNode";
|
||||
|
||||
export default class GEffectUtil {
|
||||
|
||||
//创建一个Spine特效
|
||||
static create(spine:sp.SkeletonData):JNSkeleton{
|
||||
let effectNode = new Node();
|
||||
effectNode.layer = GData.layer.World;
|
||||
let effectNode = GNode.create();
|
||||
effectNode.addComponent(UITransform);
|
||||
let ske = effectNode.addComponent(JNSkeleton);
|
||||
ske.skeletonData = spine;
|
@@ -2,7 +2,7 @@
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "2935c359-6cdd-4449-adae-57fc390c9e45",
|
||||
"uuid": "c0673372-37f9-453a-b439-11234bc2d8a7",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
14
JisolGameCocos/assets/script/battle/base/common/GNode.ts
Normal file
14
JisolGameCocos/assets/script/battle/base/common/GNode.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { Node } from "cc";
|
||||
import { GData } from "../../../GData";
|
||||
import { UITransform } from "cc";
|
||||
|
||||
|
||||
//Node 工具
|
||||
export default class GNode{
|
||||
static create():Node{
|
||||
let mapNode = new Node();
|
||||
mapNode.layer = GData.layer.World;
|
||||
return mapNode;
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "4ab3e098-02a1-4274-8c17-bc2ac08f643b",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
@@ -4,6 +4,7 @@ import JNSkeleton from "../../../../../extensions/ngame/assets/ngame/sync/frame/
|
||||
import { Node } from "cc";
|
||||
import GBaseMode from "../../GBaseMode";
|
||||
import { Vec2 } from "cc";
|
||||
import GNode from "./GNode";
|
||||
|
||||
|
||||
//Spine 工具
|
||||
@@ -18,7 +19,7 @@ export default class GSpine{
|
||||
//关闭当前角色原本的Spine
|
||||
role.spine.enabled = false;
|
||||
//添加新的spine
|
||||
let spineNode = new Node();
|
||||
let spineNode = GNode.create();
|
||||
role.node.addChild(spineNode);
|
||||
let another = spineNode.addComponent(JNSkeleton);
|
||||
another.skeletonData = spine;
|
||||
@@ -38,7 +39,7 @@ export default class GSpine{
|
||||
//创建一个Spine
|
||||
static onCreateSpine(spine:sp.SkeletonData):JNSkeleton{
|
||||
|
||||
let spineNode = new Node();
|
||||
let spineNode = GNode.create();
|
||||
let another = spineNode.addComponent(JNSkeleton);
|
||||
another.premultipliedAlpha = false;
|
||||
another.skeletonData = spine;
|
||||
|
@@ -1,7 +1,13 @@
|
||||
import { _decorator, Component, Node } from 'cc';
|
||||
import { JNGSyncBase } from '../../../../App';
|
||||
import { app, JNGSyncBase } from '../../../../App';
|
||||
import { SpriteFrame } from 'cc';
|
||||
import { Camera } from 'cc';
|
||||
import { TableGMap } from '../../../../../resources/config/ts/TableGMap';
|
||||
import { Sprite } from 'cc';
|
||||
import { UITransform } from 'cc';
|
||||
import { v3 } from 'cc';
|
||||
import { Vec2 } from 'cc';
|
||||
import { size } from 'cc';
|
||||
import GNode from '../GNode';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
@@ -16,25 +22,74 @@ export class GMapLoop extends JNGSyncBase<{}> {
|
||||
repeat:number = 1;
|
||||
//一块的地图宽度
|
||||
mapWidth:number = 100;
|
||||
//一块的地图高度
|
||||
mapHeight:number = 100;
|
||||
|
||||
//是否初始化
|
||||
isInit:boolean = false;
|
||||
//世界坐标Y轴
|
||||
worldY:number = 0;
|
||||
|
||||
//创建的地图列表{开始区块:地图图片}
|
||||
createMaps:Map<number,Node> = new Map();
|
||||
|
||||
|
||||
init(map:SpriteFrame,repeat:number){
|
||||
init(map:SpriteFrame,repeat:number = 1,width:number = 0,height:number = 0){
|
||||
this.map = map;
|
||||
this.isInit = true;
|
||||
this.repeat = repeat;
|
||||
this.mapWidth = map.width;
|
||||
this.mapWidth = width || this.map.width;
|
||||
this.mapHeight = height || this.map.height;
|
||||
}
|
||||
|
||||
//更新地图(世界坐标X)
|
||||
UpdateMap(x:number){
|
||||
UpdateMap(x:number,offsetX:number = 0,offsetY:number = 0){
|
||||
|
||||
//计算x在第几个区块
|
||||
let blockIndex = Math.floor((x + offsetX) / this.mapWidth);
|
||||
|
||||
//生成区块的列表
|
||||
let maps:number[] = [];
|
||||
for (let index = 0; index < 1 + (this.repeat * 2); index++) {
|
||||
maps.push(blockIndex + (index - this.repeat));
|
||||
}
|
||||
|
||||
//生成
|
||||
maps.forEach((blockIndex) => {
|
||||
this.createMap(blockIndex,offsetX,offsetY);
|
||||
})
|
||||
|
||||
//销毁其他地图
|
||||
let keys = Array.from(this.createMaps.keys());
|
||||
keys.forEach(key => {
|
||||
if(maps.indexOf(key) < 0){
|
||||
this.createMaps.get(key).destroy();
|
||||
this.createMaps.delete(key);
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
//生成区块地图
|
||||
createMap(blockIndex:number,offsetX:number = 0,offsetY:number = 0){
|
||||
//计算区块开始位置
|
||||
let start = (blockIndex * this.mapWidth) - offsetX;
|
||||
|
||||
if(!this.createMaps.get(blockIndex)){
|
||||
//生成地图
|
||||
let mapNode = GNode.create();
|
||||
let uiTransform = mapNode.addComponent(UITransform);
|
||||
uiTransform.anchorX = 0;
|
||||
this.node.addChild(mapNode);
|
||||
mapNode.worldPosition = v3(start,offsetY,0)
|
||||
let mapImage = mapNode.addComponent(Sprite);
|
||||
mapImage.spriteFrame = this.map;
|
||||
mapImage.sizeMode = Sprite.SizeMode.CUSTOM;
|
||||
uiTransform.contentSize = size(this.mapWidth,this.mapHeight);
|
||||
this.createMaps.set(blockIndex,mapNode);
|
||||
}else{
|
||||
this.createMaps.get(blockIndex).worldPosition = v3(start,offsetY,0)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -82,7 +82,7 @@ export default abstract class GRoleBase<T> extends GObject<T>{
|
||||
//初始化
|
||||
protected init(role:TableGRole){
|
||||
if(this.spine)
|
||||
this.spine.skeletonData = app.role.skData[role.id];
|
||||
this.spine.skeletonData = app.battleRes.skData[role.id];
|
||||
}
|
||||
|
||||
//创建一个状态机
|
||||
|
@@ -27,7 +27,6 @@ export default class GRoleDefault extends GRoleBase<{}>{
|
||||
//能量条
|
||||
@property(ProgressBar)
|
||||
energyVolume:ProgressBar;
|
||||
|
||||
|
||||
//状态机
|
||||
fsm:GFSMDefault;
|
||||
@@ -43,10 +42,6 @@ export default class GRoleDefault extends GRoleBase<{}>{
|
||||
if(this.isDie){
|
||||
//死亡回调
|
||||
this.killBack.forEach(fun => fun(this));
|
||||
//死亡销毁
|
||||
JNFrameTime.getInstance().setTimeout(() => {
|
||||
this.node.destroy()
|
||||
},3000)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "82abb7d2-2e71-4d33-9853-644778b2abc3",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"compressionType": {},
|
||||
"isRemoteBundle": {}
|
||||
}
|
||||
}
|
@@ -9,6 +9,12 @@ import { _decorator } from "cc";
|
||||
import { instantiate } from "cc";
|
||||
import { GPVPModePlayerEnum } from "./GPVPMode";
|
||||
import { JNFrameInfo } from "../../../../extensions/ngame/assets/ngame/sync/frame/JNSyncFrame";
|
||||
import { GMapLoop } from "../base/common/map/GMapLoop";
|
||||
import { Node } from "cc";
|
||||
import JNFrameTime from "../../../../extensions/ngame/assets/ngame/sync/frame/game/time/JNFrameTime";
|
||||
import { TableGMap } from "../../../resources/config/ts/TableGMap";
|
||||
import { app } from "../../App";
|
||||
import { v3 } from "cc";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
|
||||
@@ -34,6 +40,21 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
|
||||
@property(Prefab)
|
||||
rolePrefab: Prefab = null;
|
||||
|
||||
//场景地图
|
||||
@property(GMapLoop)
|
||||
map1:GMapLoop;
|
||||
@property(GMapLoop)
|
||||
map2:GMapLoop;
|
||||
@property(GMapLoop)
|
||||
map3:GMapLoop;
|
||||
|
||||
@property(Node)
|
||||
objects: Node = null;
|
||||
|
||||
get scene():Node{
|
||||
return this.objects;
|
||||
}
|
||||
|
||||
//玩家信息
|
||||
playerInfo:GOnHookInfo;
|
||||
@@ -49,12 +70,30 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
playerRoles: GRoleDefault[] = [];
|
||||
//敌方宠物
|
||||
enemyRoles: GRoleDefault[] = [];
|
||||
|
||||
offsetX:number = 0;
|
||||
|
||||
//地图信息
|
||||
mapInfo:TableGMap;
|
||||
|
||||
onSyncInitSuccess():void{
|
||||
|
||||
//初始化战斗
|
||||
console.log("GOnHookMode 模式初始化");
|
||||
|
||||
//调整相机
|
||||
let camreaPos = this.camera.node.worldPosition;
|
||||
this.camera.node.worldPosition = v3(0,100,camreaPos.z)
|
||||
|
||||
//初始化地图
|
||||
this.mapInfo = TableGMap.getConfig(60001);
|
||||
this.map1.init(app.battleRes.maps[60001][0],1);
|
||||
this.map1.UpdateMap(0,this.camera.node.worldPosition.x,this.mapInfo.map1OffsetY);
|
||||
this.map2.init(app.battleRes.maps[60001][1],1);
|
||||
this.map2.UpdateMap(0,this.camera.node.worldPosition.x,this.mapInfo.map2OffsetY);
|
||||
this.map3.init(app.battleRes.maps[60001][2],1,app.battleRes.maps[60001][1].width,app.battleRes.maps[60001][1].height);
|
||||
this.map3.UpdateMap(0,this.camera.node.worldPosition.x,this.mapInfo.map3OffsetY);
|
||||
|
||||
this.playerInfo = { tactical: GTactical.getTactical().setOffset(this.playerPos), roles: GRoleUtil.getGRoles([10004,10004,10004,10004,10003,10003]) };
|
||||
this.enemyInfo = { tactical: GTactical.getTactical(true).setOffset(this.enemyPos), roles: GRoleUtil.getGRoles([10002]) };
|
||||
|
||||
@@ -67,8 +106,6 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
|
||||
onSyncUpdate(dt: number,frame:JNFrameInfo, input?: {}){
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//生成宠物
|
||||
@@ -139,6 +176,11 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
|
||||
//角色死亡回调
|
||||
onRoleKillBack(role:GRoleDefault){
|
||||
//死亡销毁
|
||||
JNFrameTime.getInstance().setTimeout(() => {
|
||||
if(role.isValid)
|
||||
role.node.destroy()
|
||||
},3000)
|
||||
//如果没有敌人则生成敌人
|
||||
if(this.getOnesRole(GOnHookModePlayerEnum.ENEMY).filter(role => !!role.get()).length <= 0){
|
||||
//生成敌人
|
||||
|
@@ -40,14 +40,14 @@ export default class GSkillCrazySquirrel extends GSkillCDBase{
|
||||
let ah = parseInt(this.info.skillArgs[2]);
|
||||
|
||||
//出现松鼠丢炸弹
|
||||
GSpine.onPlayAnotherSpine(this.role,app.role.effects[50001],"skill",{
|
||||
GSpine.onPlayAnotherSpine(this.role,app.battleRes.effects[50001],"skill",{
|
||||
end:() => {
|
||||
//从天而降
|
||||
let pos = enemy.v2World.add(v2(0,1000));
|
||||
let end = enemy.v2World;
|
||||
|
||||
//生成火球
|
||||
let spine = GSpine.onCreateSpine(app.role.effects[50002]);
|
||||
let spine = GSpine.onCreateSpine(app.battleRes.effects[50002]);
|
||||
this.role.mode.addGNode(spine.node,pos);
|
||||
spine.setAnimation(0,"animation",true);
|
||||
spine.node.angle = 90;
|
||||
@@ -59,7 +59,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.role.effects[50003],"animation");
|
||||
GSpine.onPlaySceneSpine(scene,v2(world.x,world.y),app.battleRes.effects[50003],"animation");
|
||||
console.log(GDetection.testAABBRole(rect(world.x,world.y,aw,ah)).length)
|
||||
GDetection.testAABBRole(rect(world.x,world.y,aw,ah)).forEach(role =>{
|
||||
role.onHit();
|
||||
|
Reference in New Issue
Block a user