Files
heros/assets/script/game/skills/SkillCom.ts
2024-08-22 09:04:26 +08:00

123 lines
4.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { _decorator,Collider2D ,Contact2DType,v3,IPhysics2DContact,Vec3, tween} from "cc";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
import { BoxSet } from "../common/config/BoxSet";
import { smc } from "../common/SingletonModuleComp";
const { ccclass, property } = _decorator;
/** 视图层对象 */
@ccclass('SkillCom')
@ecs.register('SkillView', false)
export class SkillCom extends CCComp {
/** 视图层逻辑代码分离演示 */
// start() {
// // var entity = this.ent as ecs.Entity; // ecs.Entity 可转为当前模块的具体实体对象
// // this.on(ModuleEvent.Cmd, this.onHandler, this);
// }
speed:number = 200;
y_speed:number = 0;
x_speed:number = 0;
dis:number = 80;
scale:number = 1;
atk:number = 10;
angle:number = 0;
t_pos:Vec3 = null;
is_destroy:boolean = false;
start() {
this.node.active=true
this.node.angle = this.angle;
//根据目标坐标、欧拉角、预设距离增量speed 来计算新的x增量y增量
// this.x_speed = Math.cos(this.angle * Math.PI / 180) * this.speed;
// this.y_speed = Math.sin(this.angle * Math.PI / 180) * this.speed;
let collider = this.getComponent(Collider2D);
if (collider) {
// collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);
collider.on(Contact2DType.POST_SOLVE, this.onPostSolve, this);
}
if(this.t_pos){
//通过欧拉角 延长 目标点位置
this.t_pos.x=Math.cos(this.angle * Math.PI / 180) * this.dis;
this.t_pos.y=Math.sin(this.angle * Math.PI / 180) * this.dis;
tween(this.node).to( 1,{ angle:this.angle,position: this.t_pos},
{
onComplete: (target?: object) => {
this.toDestroy()
},
} ).start();
}else{
tween(this.node).to( this.dis/this.speed,
{ position: new Vec3(this.node.position.x+this.scale*this.dis,this.node.position.y) },
{
onComplete: (target?: object) => {
this.toDestroy()
},
}
).start();
}
}
onPostSolve (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {
switch (selfCollider.group) {
case BoxSet.HERO_SKILL:
switch (otherCollider.group){
case BoxSet.MONSTER:
case BoxSet.DEFAULT:
setTimeout(() => {
this.toDestroy()
}, 10);
break
}
break;
case BoxSet.MONSTER_SKILL:
switch (otherCollider.group){
case BoxSet.PLAYER:
case BoxSet.HERO:
case BoxSet.DEFAULT:
setTimeout(() => {
this.toDestroy()
}, 10);
break
}
}
}
change_collider_group(group:number){
let collider = this.getComponent(Collider2D);
collider.group = group;
}
update(deltaTime: number) {
// this.node.setScale(v3(this.scale,this.node.scale.y,this.node.scale.z))
this.move(deltaTime)
// if(Math.abs(this.node.position.x) > this.dis)
// {
// this.toDestroy()
// }
}
move(dt: number) {
// this.node.setPosition(v3(this.node.position.x+dt*this.x_speed*this.scale,this.node.position.y+this.y_speed,this.node.position.z))
}
check_to_destroy(){
if(!this.is_destroy){
this.is_destroy = true;
this.toDestroy();
}
}
toDestroy() {
if(!this.is_destroy){
this.is_destroy = true;
if(this.node.isValid) this.node.destroy()
}
}
/** 视图对象通过 ecs.Entity.remove(ModuleViewComp) 删除组件是触发组件处理自定义释放逻辑 */
reset() {
this.is_destroy=false
this.node.destroy();
}
}