Esempio n. 1
0
    void SetBullockCarts(long id, float lvl)
    {
        MonsterData md = new MonsterData(id, (int)lvl);

        md.groupIndex = 1;
        md.lvlRate    = lvl;
        md.state      = Modestatus.NpcPlayer;
        cartCs        = BattleUtil.AddMoveComponents(cart, md.attrNode.modelNode);
        cartCs.pm.nav.obstacleAvoidanceType = UnityEngine.AI.ObstacleAvoidanceType.NoObstacleAvoidance;
        cartCs.pm.nav.avoidancePriority     = 59;
        cartCs.InitData(md);
        BullockCarts bc = UnityUtil.AddComponetIfNull <BullockCarts>(cart);

        if (bc)
        {
            bc.OnArrDes  += () => { DungeonOverHandle(null); };
            cartCs.OnHit += bc.BeAttacked;
        }
        cartCs.OnDead   += (c) => { WinCondition(false); };
        cartCs.moveSpeed = cartCs.moveInitSpeed;
        cartCs.AddHpBar();
        AddCs(cartCs);
        if (sceneType == SceneType.KV)
        {
            GameObject prompt = new GameObject("UIPrompt");
            prompt.transform.parent        = cartCs.transform;
            prompt.transform.localPosition = new Vector3(0, 1.2f, 0);
            CDTimer.GetInstance().AddCD(0.5f, (int count, long cid) => { HUDAndHPBarManager.instance.AddPrompt(prompt.transform); });
        }
        cart.tag = "Cart";
    }
Esempio n. 2
0
    protected override void OnFixedUpdate()
    {
        if (GameLibrary.isBossChuChang)
        {
            return;
        }
        if (!GameLibrary.Instance().CanControlSwitch(thisCs.pm))
        {
            thisCs.pm.Stop();
            return;
        }

        if (autoPoints.Length > 0)
        {
            CheckAutos();
        }
        targetCs = GetAttackTarget(thisCs.TargetRange);
        thisCs.SetAttackTargetTo(targetCs);
        if (isAttack && targetCs != null)
        {
            float targetRadius = targetCs.cc != null ? targetCs.CharData.attrNode.model_size * targetCs.cc.radius : 0.2f;
            float selfRadius   = thisCs.cc != null ? thisCs.cc.radius : 0.2f;
            float minDis       = targetRadius + selfRadius;

            if (BattleUtil.ReachPos(transform.position, targetCs.transform.position, minDis))
            {
                if (avoidPos == Vector3.zero)
                {
                    avoidPos = BattleUtil.GetCanNavPos(thisCs.pm.nav, transform.position + 2f * minDis * (transform.position - targetCs.transform.position).normalized);
                    //Debug.LogError("set pos to " + avoidPos);
                }
                //if(thisCs == CharacterManager.playerCS)
                //{
                //    if(avoidPoint == null)
                //    {
                //        avoidPoint = GameObject.CreatePrimitive(PrimitiveType.Cube);
                //        avoidPoint.transform.localScale = 0.1f * Vector3.one;
                //    }
                //    avoidPoint.transform.position = avoidPos;
                //}
                //Debug.LogError("pos is " + avoidPos);
            }
            else
            {
                avoidPos = Vector3.zero;
                //Debug.LogError("set pos to 0");
            }

            if (avoidPos != Vector3.zero)
            {
                if (BattleUtil.ReachPos(transform.position, avoidPos, 0.1f))
                {
                    avoidPos = Vector3.zero;
                    //Debug.LogError("reach pos and reset to 0");
                }
                else
                {
                    thisCs.pm.Approaching(avoidPos, 0f);
                    //Debug.LogError("nav to " + avoidPos);
                }
            }
            else if (!aiSkillHandler.NormalAISkill())
            {
                aiSkillHandler.NormalAttack();
            }
        }
        else
        {
            if (null != protectionCs)
            {
                BullockCarts bc = protectionCs.GetComponent <BullockCarts>();
                if (bc == null)
                {
                    return;
                }
                Vector3 targetPos = Vector3.zero;
                if (bc.autoPoint != null)
                {
                    targetPos = bc.autoPoint.transform.position + Vector3.forward * 0.2f;
                }
                if (bc.autoPoint == null || BattleUtil.ReachPos(transform.position, targetPos, 0.1f))
                {
                    thisCs.pm.Stop();
                }
                else
                {
                    thisCs.pm.Approaching(targetPos);
                }
            }
            else
            {
                AutoNav();
            }
        }
    }