123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /**
- * 冲锋
- */
- import CMath from "../../../../util/CMath";
- import FSprite, { SpriteActionType } from "../FSprite";
- import PSprite from "../PSprite";
- import ChargeCollision from "./ChargeCollision";
- import SkillBase from "./SkillBase";
- const {ccclass, property} = cc._decorator;
- @ccclass
- export default class SkillCharge extends SkillBase {
- @property({
- type:cc.Node,
- displayName: '预警显示'
- })
- mRedGo: cc.Node = null;
- /**
- * 预警延时
- */
- @property({
- displayName: '预警延时'
- })
- public dtime = 2;
- /**
- * 冲刺消耗的时间
- */
- @property({
- displayName: '冲刺消耗的时间'
- })
- public ctime = 0.7;
- onLoad(){
- super.onLoad();
- this.mRedGo.active = false;
- }
-
- public exe(target:FSprite,callback:()=>void){
- this.time = new Date().getTime();
- // this.sprite.setDir({x:0,y:0});
- this.mRedGo.active = true;
- let p1 = this.node.getPosition();
- let p2 = target.node.getPosition();
- let angle = CMath.getAngle(p1,p2);
- this.mRedGo.angle = angle*180/Math.PI;
- if(target instanceof PSprite){
- target.tangentMove(this.sprite.node);
- }
- cc.tween(this.node).sequence(
- cc.delayTime(this.dtime),
- cc.callFunc(()=>{
- this.mRedGo.active = false;
- this.moveGO(angle,callback);
- })
- ).start();
- }
- private moveGO(angle,callback:()=>void){
- this.sprite.playAction(SpriteActionType.atk,false,()=>{
- // this.AI.walk(this.range);
- this.sprite.playAction(SpriteActionType.stand,true)
- });
- let pos = cc.v2();
- let length = this.mRedGo.width;
- pos.x = length*Math.cos(angle);
- pos.y = length*Math.sin(angle);
-
- //copy当前碰撞区域,创建子弹打出去
- let boxCollider = this.node.getComponent(cc.PhysicsBoxCollider);
-
- let node = new cc.Node();
- node.x = this.node.x;
- node.y = this.node.y;
- node.group = 'bullet'
- let rigidBody = node.addComponent(cc.RigidBody);
- rigidBody.type = cc.RigidBodyType.Dynamic;
- // rigidBody.allowSleep = false;
- rigidBody.enabledContactListener = true;
- let physicsBoxCollider = node.addComponent(cc.PhysicsBoxCollider);
- physicsBoxCollider.sensor = true;
- physicsBoxCollider.size = boxCollider.size.clone();
- physicsBoxCollider.offset = boxCollider.offset.clone();
-
- let chargeCollision = node.addComponent(ChargeCollision);
- chargeCollision.skillBase = this;
- node.parent = this.sprite.ff.mMap.mSprites;
- cc.tween(this.node).sequence(
- cc.moveBy(this.ctime,pos),
- cc.callFunc(()=>{
- })
- ).start();
- cc.tween(node).sequence(
- cc.moveBy(this.ctime,pos),
- cc.callFunc(()=>{
- node.destroy();
- callback()
- })
- ).start();
- }
-
- }
|