123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- import FSprite, { SpriteActionType, SpriteType } from "../FSprite";
- import PSprite from "../PSprite";
- import AIBase from "./AIBase";
- const {ccclass, property} = cc._decorator;
- /**
- * 伙伴AI
- *
- * AI特性:
- * 1.有攻击对象的时候,主动攻击
- * 2.没有攻击对象的时候,跟随
- */
- @ccclass
- export default class AIPet extends AIBase {
- onLoad(){
- super.onLoad();
- this.atk_CD = 3000;
- this.speed = 120;
- this.atk_count = 3;
- this.sprite.SPEED_WALK = this.speed;
- }
- update (dt) {
- if(this.sprite){
- if(this.sprite.gamePause){
- return;
- }
- this.AI();
- }
- }
- public AI(){
- let target = this.checkTarget();
- if(target){
- let time = new Date().getTime();
- (this.sprite as PSprite).stopFollow();
- if(this.sprite.isActive){
- if(this.skills.length > 0){
- let skill = this.checkSkill(target);
- if(skill){
- this.canSkill = false;
- skill.exe(target,()=>{
- this.canSkill = true;
- });
- // cc.tween(this.node).sequence(
- // cc.delayTime(skill.continued/1000),
- // cc.callFunc(()=>{
-
- // })
- // ).start();
- }
- } else{
- if(time - this.atk_Time > this.atk_CD){
- this.atk_Time = time;
- this.fire(target);
- }
- }
- }
- }else{
- (this.sprite as PSprite).startFollow();
- }
- }
- public fire(target:FSprite){
- //判断是否在攻击范围内
- let mts = this.sprite.mButtleDis;
- let p1 = target.node.getPosition();
- let p2 = this.sprite.node.getPosition();
- let dis = cc.Vec2.distance(p1,p2);
- if(dis > mts){
- this.atk_Time = 0;
- let tmp = {
- x:0,
- y:0
- }
- let px1 = p1.x - p2.x;
- if(Math.abs(px1) < 50){
- tmp.x = 0;
- }else if(px1 > 0){
- tmp.x = 1;
- }else{
- tmp.x = -1;
- }
- let py1 = p1.y - p2.y;
- if(Math.abs(py1) < 50){
- tmp.y = 0;
- }else if(py1 > 0){
- tmp.y = 1;
- }else{
- tmp.y = -1;
- }
- this.sprite.setDir(tmp);
- }else{
- this.sprite.setDir({x:0,y:0});
- this.sprite.status = SpriteType.NONE;
- this.sprite.setShooting(true);
- let count = 0;
- this.sprite.setFireCallback(()=>{
- count ++;
- if(count >= this.atk_count){
- this.sprite.setShooting(false);
- this.sprite.setFireCallback(null);
- cc.tween(this).delay(0.7).call(()=>{
- this.walk(this.sprite.mButtleDis);
- }).start();
- }
- });
- }
- }
- }
|