示例#1
0
    public void Init(RoleBase creater, Vector3 tarVec, RoleBase tarRole)
    {
        m_Creater = creater;

        m_TarVec = tarVec;

        if (InputManager.instance.m_CurOpaMode == OperateMode.AutoFindEnemies || InputManager.instance.m_CurOpaMode == OperateMode.AutoFindEnemies_RollTarget_JS)
        {
            if (tarRole != null)
            {
                m_TarPos = tarRole.transform.position;
                // if (m_Creater is Hero)
                //     Debug.Log("M_TarRole: " + tarRole.name);
            }
            else
            {
                float dis = creater.m_AtkRange;
                m_TarPos = transform.position + dis * m_TarVec.normalized;
            }
        }
        else if (InputManager.instance.m_CurOpaMode == OperateMode.ManualAtk || InputManager.instance.m_CurOpaMode == OperateMode.ManualAtk_AuxAim)
        {
            m_TarPos = (Vector3)m_Creater.GetCurFaceVec() + m_Creater.GetMidPos() + new Vector3(0, 0.4f, 0);
        }
        m_Player   = Global.instance.m_Hero_01;
        m_StartPos = transform.position;
        m_EndPos   = m_StartPos;
        m_Time     = 0f;
    }
示例#2
0
    private void UpdateCurAtkTarMark(RoleBase tar)
    {
        if (m_CurTarMark == null)
        {
            return;
        }

        if (m_OpaMode == OperateMode.ManualAtk ||
            m_OpaMode == OperateMode.ManualAtk_AuxAim)
        {
            m_CurTarMark.SetActive(false);
            return;
        }
        if (tar == null)
        {
            m_CurTarMark.SetActive(false);
            return;
        }


        // follow
        m_CurTarMark.SetActive(true);
        m_CurTarMark.transform.position = tar.GetMidPos();
    }
示例#3
0
    void FixedUpdate()
    {
        m_Time += Time.deltaTime;

        switch (m_PlayType)
        {
        case EffectPlayType.Bezier:
        {
            if (Vector3.Distance(m_TarPos, transform.position)
                < m_MoveVec * Time.deltaTime)
            {
                if (!IsInvoking("DestroySelf"))
                {
                    Invoke("DestroySelf", m_DestroyDelay);

                    // enable damage
                    Damage dmg = gameObject.GetComponent <Damage>();
                    if (dmg != null)
                    {
                        dmg.enabled = true;
                    }
                    // play the particle of explosion
                    if (m_BezierEndParticle != null)
                    {
                        ParticleManager.instance.CreateParticle(
                            m_BezierEndParticle,
                            m_TarPos, Vector3.zero
                            );
                        m_ParticleSystem.Stop();
                        AudioManager.instance.Play("Explosion_FireBall_01");
                    }
                }
            }

            // bezier
            Bezier myBezier = new Bezier(m_StartPos,
                                         new Vector3(0f, m_BezierCtrlHight, 0f),
                                         new Vector3(0f, m_BezierCtrlHight, 0f), m_TarPos);
            float allTime = Vector3.Distance(m_StartPos, m_TarPos) / m_MoveVec;
            float temp    = Mathf.Clamp(m_Time / allTime, 0f, 1f);

            // pow 2
            // temp = m_Time / (Mathf.Pow(allTime, 2));
            // temp = Mathf.Pow(temp, 3);

            m_CurPos           = myBezier.GetPointAtTime(temp);
            transform.position = m_CurPos;

            // rotate
            // transform.Rotate(new Vector3(0, 0, 1) * Time.deltaTime);
        }
        break;

        case EffectPlayType.Boomerang:
        {
            if (!IsInvoking("DestroySelf"))
            {
                Invoke("DestroySelf", m_DestroyDelay);

                // enable damage
                Damage dmg = gameObject.GetComponent <Damage>();
                if (dmg != null)
                {
                    dmg.enabled = true;
                }
            }
            if (Vector3.Distance(m_TarPos, transform.position)
                < m_MoveVec * Time.deltaTime)
            {
                temp_BoomerangTurnTarget = true;
            }
            if (Vector3.Distance(m_StartPos, transform.position)
                < Vector3.Distance(m_TarPos, transform.position) * 1.3 && temp_BoomerangTurnTarget == true)
            {
                if (m_Creater != null)
                {
                    m_EndPos = m_Creater.GetFootPos();
                }
                else
                {
                    m_EndPos = m_StartPos;
                }
                temp_Move = false;
            }
            if (Vector3.Distance(m_EndPos, transform.position)
                < m_MoveVec * Time.deltaTime * 2 && temp_BoomerangTurnTarget == true)
            {
                Destroy(gameObject);
            }
            if (temp_Move)
            {
                BoomerangBezier(m_TarPos, m_EndPos);
            }
            if (!temp_Move)
            {
                ComeBakeMoveBack();
            }
        }
        break;

        case EffectPlayType.Hold:
        case EffectPlayType.Charge:
        {
            // keep with creater
            if (m_Creater.m_CurStatus == RoleStatus.Die)
            {
                Destroy(gameObject);
                return;
            }

            transform.position = m_Creater.GetMidPos();
        }
        break;

        default:
            break;
        }
    }