Esempio n. 1
0
        public void Activate()
        {
            int behaviorIndex = this.ChooseIdleBehavior();

            this.currentBehavior = this.behaviors[behaviorIndex];
            this.currentBehavior.StartBehavior();
        }
Esempio n. 2
0
    private void ShootLaser()
    {
        Collider[] colls       = Physics.OverlapSphere(transform.position, laserLength, LayerMask.GetMask("Alley"));
        float      closestDist = float.MaxValue;

        target = null;
        foreach (var item in colls)
        {
            Mob itemMob = item.GetComponent <Mob>();
            if (itemMob)
            {
                Vector3 subVec  = item.transform.position - transform.position;
                float   sqrDist = subVec.sqrMagnitude;
                if (sqrDist <= closestDist)
                {
                    closestDist = sqrDist;
                    target      = itemMob;
                }
            }
        }

        if (target)
        {
            AnimEventBehavior laserStartBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>();
            laserStartBehavior.Init(BehaviorPriority.Skill, new AnimEventBData("laser", mainSoundPlayer, "LaserCharge", 1.0f), laserChargeTime);
            fsm.DirectAddBehavior(laserStartBehavior);

            LaserBehavior laserStayBehavior = ScriptableObject.CreateInstance <LaserBehavior>();
            laserStayBehavior.Init(BehaviorPriority.Skill, new LaserBData(target, mainSoundPlayer, "Laser", 0.25f), laserDuration);
            fsm.DirectAddBehavior(laserStayBehavior);
            IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();
            idleBehavior.Init(BehaviorPriority.Basic, null, 2.5f);
            fsm.DirectAddBehavior(idleBehavior);
        }
    }
Esempio n. 3
0
    private void SpawnMobs()
    {
        AnimEventBehavior animBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>();

        animBehavior.Init(BehaviorPriority.Skill, new AnimEventBData("spawn", mainSoundPlayer, "BossSpawnAura2", 1.0f), 3.0f);
        fsm.DirectAddBehavior(animBehavior);
        IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();

        idleBehavior.Init(BehaviorPriority.Basic, null, 1.0f);
        fsm.DirectAddBehavior(idleBehavior);
    }
Esempio n. 4
0
    private void FireBalls()
    {
        BaseBehavior animBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>();

        animBehavior.Init(BehaviorPriority.Skill, new AnimEventBData("ball", mainSoundPlayer, "BossBallAura", 0.5f), 2.0f);
        fsm.DirectAddBehavior(animBehavior);
        IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();

        idleBehavior.Init(BehaviorPriority.Basic, null, 2.0f);
        fsm.DirectAddBehavior(idleBehavior);
    }
Esempio n. 5
0
 private void MeleeAttack()
 {
     Collider[] colls = Physics.OverlapSphere(transform.position, attRad, LayerMask.GetMask("Alley"));
     if (colls.Length > 0)
     {
         Vector3 subVec = colls[0].transform.position - transform.position;
         subVec.y = 0;
         if (subVec.sqrMagnitude <= sqrAttRad)
         {
             transform.forward = subVec.normalized;
             BaseBehavior attBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>() as BaseBehavior;
             attBehavior.Init(BehaviorPriority.Att, new AnimEventBData("att"), 2.0f);
             fsm.DirectAddBehavior(attBehavior);
             IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>();
             idleBehavior.Init(BehaviorPriority.Basic, null, 0.2f);
             fsm.DirectAddBehavior(idleBehavior);
         }
     }
 }
Esempio n. 6
0
    // 根据战士类型和阵营来创建AI,根据阵营和战士类型来创建目标选择策略
    public AIBase createAI(Toy pToy, HERO_TYPE eHeroType, CAMP_TYPE eCampType)
    {
        AIBase pAI = null;
        switch (eHeroType)
        {
            case HERO_TYPE.AI_WARRIOR:            // 战士
            case HERO_TYPE.AI_MASTER:             // 法师
            case HERO_TYPE.AI_TANKING:            // 肉盾
            case HERO_TYPE.AI_SHOOTER:            // 射手
            case HERO_TYPE.AI_WIZARD:             // 巫师
            case HERO_TYPE.AI_PARADIN:            // 奶骑
                {
                    pAI = createHeroAI(eCampType);

                    IBehavior pBehavior = null;
                    // 设置IDLE行为
                    pBehavior = new IdleBehavior();
                    pAI.setIdleBehavior(pBehavior);

                    // 设置思考行为
                    pBehavior = new ThinkBehavior();
                    pAI.setThinkBehavior(pBehavior);

                    // 冷却行为
                    pBehavior = new CoolDownBehavior();
                    pAI.setCoolDownBehavior(pBehavior);

                    // 设置攻击行为
                    pBehavior = new AttackBehavior();
                    pAI.setAttackBehavior(pBehavior);

                    // 设置选择策略
                    IChoiceStrategy pChoiceStrategy = createChooseStrategy();
                    pAI.setChoiceStrategy(pChoiceStrategy);
                }
                break;
            default:
                break;
                
        }

        return pAI;
    }
        private void ChangeBehavior()
        {
            int behaviorIndex = this.ChooseIdleBehavior();

            if (this.currentBehaviorIndex == behaviorIndex && this.currentBehavior != null)
            {
                this.currentBehavior.Poke();
                this.framesBeforeChange = this.GenerateDuration();
                return;
            }

            if (this.currentBehavior != null)
            {
                this.currentBehavior.StopBehavior();
            }

            this.currentBehavior = this.behaviors[behaviorIndex];
            this.currentBehavior.StartBehavior();
            this.framesBeforeChange   = this.GenerateDuration();
            this.currentBehaviorIndex = behaviorIndex;
        }
Esempio n. 8
0
        public void SetIdleBehavior(IdleBehavior beh, uint ms)
        {
            fIdleBeh = beh;
            fIdleMs = ms;

            fIdleTimer.Stop();
            if (beh != IdleBehavior.DoNothing) {
                fIdleTimer.AutoReset = true;
                fIdleTimer.Interval = Convert.ToDouble(ms);
                fIdleTimer.Start();
            }
        }
Esempio n. 9
0
    private BaseBehavior GetBehaviorEntity(BehaviorType bt)
    {
        if (!behaviorUnions.ContainsKey(bt))
        {
            BaseBehavior bbh = null;
            switch (bt)
            {
            case BehaviorType.BT_Idle:
                bbh = new IdleBehavior();
                break;

            case BehaviorType.BT_FourcesLocal:
                bbh = new FourcesLocalBehavior();
                break;

            case BehaviorType.BT_Torque:
                bbh = new TorqueBehavior();
                break;

            case BehaviorType.BT_ForwardCtlMove:
                bbh = new ForwardControlMoveBehavior();
                break;

            case BehaviorType.BT_WorldForceCtlMove:
                bbh = new WorldForceControlMoveBehavior();
                break;

            case BehaviorType.BT_4DOFForwardMove:
                bbh = new DOF4ForwardMoveBehavior();
                break;

            case BehaviorType.BT_6DOFForwardMove:
                bbh = new DOF6ForwardMoveBehavior();
                break;

            case BehaviorType.BT_StopRotate:
                bbh = new StopRotateBehavior();
                break;

            case BehaviorType.BT_StopMove:
                bbh = new StopMoveBehavior();
                break;

            case BehaviorType.BT_TurnToTarget:
                bbh = new TurnToTargetBehavior();
                break;

            case BehaviorType.BT_UpTurnToTarget:
                bbh = new UpTurnToTargetBehavior();
                break;

            case BehaviorType.BT_TurningMove:
                bbh = new TurningMoveBehavior();
                break;

            case BehaviorType.BT_StopThenMoveToTarget:
                bbh = new StopThenMoveToTargetBehavior();
                break;

            case BehaviorType.BT_SmoothMoveToTarget:
                bbh = new SmoothMoveToTargetBehavior();
                break;

            case BehaviorType.BT_SmoothMoveTargets:
                bbh = new SmoothMoveTargetsBehavior();
                break;

            case BehaviorType.BT_Leap:
                bbh = new LeapBehavior();
                break;

            case BehaviorType.BT_LeapBreak:
                bbh = new LeapBreakBehavior();
                break;

            case BehaviorType.BT_BindMove:
                bbh = new BindMoveBehavior();
                break;

            case BehaviorType.BT_Slied:
                bbh = new SliedBehavior();
                break;

            default:
                bbh = new IdleBehavior();
                break;
            }
            behaviorUnions.Add(bt, bbh);
        }

        return(behaviorUnions[bt]);
    }