This commit is contained in:
pan
2024-08-16 10:36:45 +08:00
parent dc12cea962
commit 5e4d16d6e7
19 changed files with 4425 additions and 3222 deletions

View File

@@ -1,86 +0,0 @@
/*
* @Author: dgflash
* @Date: 2022-03-29 17:08:08
* @LastEditors: dgflash
* @LastEditTime: 2022-09-02 09:45:41
*/
import { ccenum, Collider, Component, ICollisionEvent, ITriggerEvent, _decorator } from "cc";
const { ccclass, property } = _decorator;
/** 碰撞物体类型 */
export enum CollisionType {
/** 角色类 */
Hero,
/** 飞弹类体*/
Ballistic,
/** 墙体类 */
Wall
}
ccenum(CollisionType);
/** 碰撞器与触发器 */
@ccclass('GameCollision')
export class GameCollision extends Component {
private Event_TriggerEnter: any = "onTriggerEnter";
private Event_TriggerStay: any = "onTriggerStay";
private Event_TriggerExit: any = "onTriggerExit";
private Event_CollisionEnter: any = "onCollisionEnter";
private Event_CollisionStay: any = "onCollisionStay";
private Event_CollisionExit: any = "onCollisionExit";
protected collider: Collider = null!;
@property({ type: CollisionType, tooltip: '碰撞物体类型' })
type: CollisionType = CollisionType.Ballistic;
onLoad() {
this.collider = this.getComponent(Collider)!;
if (this.collider.isTrigger) {
this.collider.on(this.Event_TriggerEnter, this.onTrigger, this);
this.collider.on(this.Event_TriggerStay, this.onTrigger, this);
this.collider.on(this.Event_TriggerExit, this.onTrigger, this);
}
else {
this.collider.on(this.Event_CollisionEnter, this.onCollision, this);
this.collider.on(this.Event_CollisionStay, this.onCollision, this);
this.collider.on(this.Event_CollisionExit, this.onCollision, this);
}
}
private onTrigger(event: ITriggerEvent) {
switch (event.type) {
case this.Event_TriggerEnter:
this.onTriggerEnter(event);
break;
case this.Event_TriggerStay:
this.onTriggerStay(event);
break;
case this.Event_TriggerExit:
this.onTriggerExit(event);
break;
}
}
protected onTriggerEnter(event: ITriggerEvent) { }
protected onTriggerStay(event: ITriggerEvent) { }
protected onTriggerExit(event: ITriggerEvent) { }
private onCollision(event: ICollisionEvent) {
switch (event.type) {
case this.Event_CollisionEnter:
this.onCollisionEnter(event);
break;
case this.Event_CollisionStay:
this.onCollisionStay(event);
break;
case this.Event_CollisionExit:
this.onCollisionExit(event);
break;
}
}
protected onCollisionEnter(event: ICollisionEvent) { }
protected onCollisionStay(event: ICollisionEvent) { }
protected onCollisionExit(event: ICollisionEvent) { }
}

View File

@@ -1,9 +0,0 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "d331c466-f23e-4f9a-bce4-ae002d8d7871",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -1,137 +0,0 @@
/*
* @Author: dgflash
* @Date: 2021-08-11 16:41:12
* @LastEditors: dgflash
* @LastEditTime: 2023-01-19 15:27:24
*/
import { Node, Vec3 } from "cc";
import { Timer } from "../../../../extensions/oops-plugin-framework/assets/core/common/timer/Timer";
import { Vec3Util } from "../../../../extensions/oops-plugin-framework/assets/core/utils/Vec3Util";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
/** 向目标移动,移动过程中目标位置变化会自动修正移动目标点,直到未修正前移动到目标点停止 */
@ecs.register('MoveTo')
export class MoveToComp extends ecs.Comp {
/** 移动节点 */
node: Node = null!;
/** 移动方向 */
velocity: Vec3 = Vec3Util.zero;
/** 移动速度(每秒移动的像素距离) */
speed: number = 0;
/** 目标实体ECS编号、目标位置 */
target: Vec3 | Node | null = null;
/** 坐标标(默认本地坐标) */
ns: number = Node.NodeSpace.LOCAL;
/** 偏移距离 */
offset: number = 0;
/** 偏移向量 */
offsetVector: Vec3 | null = null;
/** 移动完成回调 */
onComplete: Function | null = null;
/** 距离变化时 */
onChange: Function | null = null;
reset() {
this.ns = Node.NodeSpace.LOCAL;
this.offset = 0;
this.target = null;
this.offsetVector = null;
this.onComplete = null;
this.onChange = null;
}
}
@ecs.register('VariableMoveTo')
class VariableMoveToComponent extends ecs.Comp {
/** 延时触发器 */
timer: Timer = new Timer();
/** 终点备份 */
end: Vec3 | null = null;
/** 目标位置 */
target!: Vec3;
reset() {
this.end = null;
this.timer.reset();
}
}
/** 跟踪移动到目标位置 */
export class MoveToSystem extends ecs.ComblockSystem<ecs.Entity> implements ecs.IEntityEnterSystem, ecs.IEntityRemoveSystem, ecs.ISystemUpdate {
filter(): ecs.IMatcher {
return ecs.allOf(MoveToComp);
}
entityEnter(e: ecs.Entity): void {
e.add(VariableMoveToComponent);
console.log("MoveToSystem entityEnter");
}
entityRemove(e: ecs.Entity): void {
e.remove(VariableMoveToComponent);
}
update(e: ecs.Entity) {
let move = e.get(MoveToComp);
let mtv = e.get(VariableMoveToComponent);
let end: Vec3;
console.assert(move.speed > 0, "移动速度必须要大于零");
if (move.target instanceof Node) {
end = move.ns == Node.NodeSpace.WORLD ? move.target.worldPosition : move.target.position;
}
else {
end = move.target as Vec3;
}
// 目标移动后,重计算移动方向与移动到目标点的速度
if (mtv.end == null || !mtv.end.strictEquals(end)) {
let target = end.clone();
if (move.offsetVector) {
target = target.add(move.offsetVector); // 这里的问题
}
// 移动方向与移动数度
let start = move.ns == Node.NodeSpace.WORLD ? move.node.worldPosition : move.node.position;
move.velocity = Vec3Util.sub(target, start).normalize();
// 移动时间与目标偏位置计算
let distance = Vec3.distance(start, target) - move.offset;
move.onChange?.call(this);
if (distance - move.offset <= 0) {
this.exit(e);
}
else {
mtv.timer.step = distance / move.speed;
mtv.end = end.clone();
mtv.target = move.velocity.clone().multiplyScalar(distance).add(start);
}
}
if (move.speed > 0) {
let trans = Vec3Util.mul(move.velocity, move.speed * this.dt);
move.node.translate(trans, Node.NodeSpace.LOCAL);
}
// 移动完成事件
if (mtv.timer.update(this.dt)) {
if (move.ns == Node.NodeSpace.WORLD)
move.node.worldPosition = mtv.target;
else
move.node.position = mtv.target;
this.exit(e);
}
}
private exit(e: ecs.Entity) {
let move = e.get(MoveToComp);
move.onComplete?.call(this);
e.remove(VariableMoveToComponent);
e.remove(MoveToComp);
}
}

View File

@@ -1,9 +0,0 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "d233722c-c438-4eb3-ad17-6b407ef7bad0",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -62,6 +62,7 @@ export class SingletonModuleComp extends ecs.Comp {
time:0,
cd:10,
ref_cost:0,
up_cost:6,
},
shuaxin: {
min: 0,

View File

@@ -10,47 +10,40 @@ export const CardType = {
}
export const CardList={
1:[1001,1002,1003,1004,1005,1006],
2:[1011,1021,1031,1041,2021,2022,2031,2032],
3:[1011,1021,1031,1041,2021,2022,2031,2032],
4:[1011,1021,1031,1041,2021,2022,2031,2032],
5:[1011,1021,1031,1041,2021,2022,2031,2032],
6:[1011,1021,1031,1041,2021,2022,2031,2032],
2:[1001,1002,1003,1004,1005,1006],
3:[1001,1002,1003,1004,1005,1006],
4:[1001,1002,1003,1004,1005,1006],
5:[1001,1002,1003,1004,1005,1006],
6:[1001,1002,1003,1004,1005,1006],
}
export const CardSet = {
1001:{
uuid:1001, name:'叽叽', type:1, level:1,prefab_path:1001,atk:1,atk_cd:0.5, hp:15, power:45, speed:80,
uuid:1001, name:'叽叽', type:1, level:1,path:1001,atk:1,atk_cd:0.5, hp:15, power:45, speed:80,
skill:{ }
},
1002:{
uuid:1002, name:'汪汪', type:1, level:1,prefab_path:1002,atk:2,atk_cd:1, hp:15, power:50, speed:50,
uuid:1002, name:'汪汪', type:1, level:1,path:1002,atk:2,atk_cd:1, hp:15, power:50, speed:50,
skill:{ }
},
1003:{
uuid:1003, name:'喵喵', type:1, level:1,prefab_path:1003,atk:1, atk_cd:0.5, hp:20, power:50, speed:50,
uuid:1003, name:'喵喵', type:1, level:1,path:1003,atk:1, atk_cd:0.5, hp:20, power:50, speed:50,
skill:{ }
},
1004:{
uuid:1004, name:'胖大', type:2, level:1,prefab_path:1004,atk:4,atk_cd:1.5, hp:15, power:50, speed:50,
uuid:1004, name:'胖大', type:2, level:1,path:1004,atk:4,atk_cd:1.5, hp:15, power:50, speed:50,
skill:{ }
},
1005:{
uuid:1005, name:'汪汪[强]', type:1, level:2,prefab_path:1005,atk:6,atk_cd:1, hp:25, power:50, speed:50,
uuid:1005, name:'汪汪[强]', type:1, level:2,path:1005,atk:6,atk_cd:1, hp:25, power:50, speed:50,
skill:{ }
},
1006:{
uuid:1006, name:'沃夫', type:1, level:2,prefab_path:1006,atk:6,atk_cd:1, hp:30, power:50, speed:50,
skill:{ }
},
2031:{
uuid:2031, name:'泰哥', type:1, level:2,prefab_path:2031,atk:4,atk_cd:0.5, hp:25, power:50, speed:50,
skill:{ }
},
2032:{
uuid:2032, name:'喵喵[厚]', type:1, level:2,prefab_path:2032,atk:2.5,atk_cd:0.5, hp:40, power:50, speed:50,
uuid:1006, name:'沃夫', type:1, level:2,path:1006,atk:6,atk_cd:1, hp:30, power:50, speed:50,
skill:{ }
},

View File

@@ -1,58 +0,0 @@
/*
* @Author: dgflash
* @Date: 2022-07-21 17:30:59
* @LastEditors: dgflash
* @LastEditTime: 2022-09-02 14:40:28
*/
import { Node } from "cc";
/** 物理分组数据 */
export class GroupItem {
private _value: number;
/** 分组值 */
get value(): number {
return this._value;
}
private _name!: string;
/** 分组名 */
get name(): string {
return this._name;
}
/** 碰撞掩码 */
get mask(): number {
return 1 << this._value;
}
/**
* 构造函数
* @param value 分组值
* @param name 分组名
*/
constructor(value: number, name: string) {
this._value = value;
this._name = name;
}
}
/***
* 为了方便使用,将编辑器中的物理分组定义到代码。如果编辑器中有修改,确保同步到这里。
*/
export class PhysicsUtil {
/** 默认物理分组 */
static DEFAULT = new GroupItem(0, 'DEFAULT');
/** 能通过屏幕触摸中发出的射线检查到的游戏对象 */
static MONSTER = new GroupItem(2, 'MONSTER');
static HERO = new GroupItem(4, 'HERO');
static MONSTER_SKILL = new GroupItem(8, 'MONSTER_SKILL');
static HERO_SKILL = new GroupItem(16, 'HERO_SKILL');
static setNodeLayer(item: GroupItem, node: Node) {
node.layer = item.mask;
node.children.forEach(n => {
n.layer = item.mask;
PhysicsUtil.setNodeLayer(item, n);
});
}
}

View File

@@ -1,9 +0,0 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "ea3b7cf5-1be6-4436-a5a3-df3e1c913cb5",
"files": [],
"subMetas": {},
"userData": {}
}