コード例 #1
0
ファイル: UbhBullet.cs プロジェクト: MinKhant1/InviKiller
    /// <summary>
    /// Bullet Shot
    /// </summary>
    public void Shot(float speed, float angle, float accelSpeed, float accelTurn,
                     bool homing, Transform homingTarget, float homingAngleSpeed,
                     bool wave, float waveSpeed, float waveRangeSize,
                     bool pauseAndResume, float pauseTime, float resumeTime, UbhUtil.AXIS axisMove)
    {
        if (_Shooting)
        {
            return;
        }
        _Shooting = true;

        StartCoroutine(MoveCoroutine(speed, angle, accelSpeed, accelTurn,
                                     homing, homingTarget, homingAngleSpeed,
                                     wave, waveSpeed, waveRangeSize,
                                     pauseAndResume, pauseTime, resumeTime, axisMove));
    }
コード例 #2
0
ファイル: UbhBullet.cs プロジェクト: togech/Factory-Reset
    /// <summary>
    /// Bullet Shot
    /// </summary>
    public void Shot(UbhBaseShot parentBaseShot,
                     float speed, float angle, float accelSpeed, float accelTurn,
                     bool homing, Transform homingTarget, float homingAngleSpeed,
                     bool wave, float waveSpeed, float waveRangeSize,
                     bool pauseAndResume, float pauseTime, float resumeTime, UbhUtil.AXIS axisMove)
    {
        if (shooting)
        {
            return;
        }
        shooting = true;

        m_parentBaseShot = parentBaseShot;

        m_speed            = speed;
        m_angle            = angle;
        m_accelSpeed       = accelSpeed;
        m_accelTurn        = accelTurn;
        m_homing           = homing;
        m_homingTarget     = homingTarget;
        m_homingAngleSpeed = homingAngleSpeed;
        m_wave             = wave;
        m_waveSpeed        = waveSpeed;
        m_waveRangeSize    = waveRangeSize;
        m_pauseAndResume   = pauseAndResume;
        m_pauseTime        = pauseTime;
        m_resumeTime       = resumeTime;
        m_axisMove         = axisMove;

        if (m_axisMove == UbhUtil.AXIS.X_AND_Z)
        {
            // X and Z axis
            m_transformCache.SetEulerAnglesY(-m_angle);
        }
        else
        {
            // X and Y axis
            m_transformCache.SetEulerAnglesZ(m_angle);
        }

        m_selfFrameCnt  = 0f;
        m_selfTimeCount = 0f;
    }
コード例 #3
0
ファイル: UbhBullet.cs プロジェクト: o0flame/Fruit.io
    /// <summary>
    /// Bullet Shot
    /// </summary>
    public void Shot(UbhBaseShot parentBaseShot,
                     float speed, float angle, float accelSpeed, float accelTurn,
                     bool homing, Transform homingTarget, float homingAngleSpeed,
                     bool wave, float waveSpeed, float waveRangeSize,
                     bool pauseAndResume, float pauseTime, float resumeTime,
                     bool useAutoRelease, float autoReleaseTime,
                     UbhUtil.AXIS axisMove, bool inheritAngle)
    {
        if (m_shooting)
        {
            return;
        }
        m_shooting = true;

        m_parentBaseShot = parentBaseShot;

        m_speed            = speed;
        m_angle            = angle;
        m_accelSpeed       = accelSpeed;
        m_accelTurn        = accelTurn;
        m_homing           = homing;
        m_homingTarget     = homingTarget;
        m_homingAngleSpeed = homingAngleSpeed;
        m_wave             = wave;
        m_waveSpeed        = waveSpeed;
        m_waveRangeSize    = waveRangeSize;
        m_pauseAndResume   = pauseAndResume;
        m_pauseTime        = pauseTime;
        m_resumeTime       = resumeTime;
        m_useAutoRelease   = useAutoRelease;
        m_autoReleaseTime  = autoReleaseTime;
        m_axisMove         = axisMove;

        m_baseAngle = 0f;
        if (inheritAngle && m_parentBaseShot.lockOnShot == false)
        {
            if (m_axisMove == UbhUtil.AXIS.X_AND_Z)
            {
                // X and Z axis
                m_baseAngle = m_parentBaseShot.shotCtrl.transform.eulerAngles.y;
            }
            else
            {
                // X and Y axis
                m_baseAngle = m_parentBaseShot.shotCtrl.transform.eulerAngles.z;
            }
        }

        if (m_axisMove == UbhUtil.AXIS.X_AND_Z)
        {
            // X and Z axis
            m_transformCache.SetEulerAnglesY(m_baseAngle - m_angle);
        }
        else
        {
            // X and Y axis
            m_transformCache.SetEulerAnglesZ(m_baseAngle + m_angle);
        }

        m_selfFrameCnt  = 0f;
        m_selfTimeCount = 0f;
    }
コード例 #4
0
ファイル: UbhBullet.cs プロジェクト: MinKhant1/InviKiller
    IEnumerator MoveCoroutine(float speed, float angle, float accelSpeed, float accelTurn,
                              bool homing, Transform homingTarget, float homingAngleSpeed,
                              bool wave, float waveSpeed, float waveRangeSize,
                              bool pauseAndResume, float pauseTime, float resumeTime, UbhUtil.AXIS axisMove)
    {
        if (axisMove == UbhUtil.AXIS.X_AND_Z)
        {
            // X and Z axis
            transform.SetEulerAnglesY(-angle);
        }
        else
        {
            // X and Y axis
            transform.SetEulerAnglesZ(angle);
        }

        float selfFrameCnt  = 0f;
        float selfTimeCount = 0f;

        while (true)
        {
            if (homing)
            {
                // homing target.
                if (homingTarget != null && 0f < homingAngleSpeed)
                {
                    float rotAngle = UbhUtil.GetAngleFromTwoPosition(transform, homingTarget, axisMove);
                    float myAngle  = 0f;
                    if (axisMove == UbhUtil.AXIS.X_AND_Z)
                    {
                        // X and Z axis
                        myAngle = -transform.eulerAngles.y;
                    }
                    else
                    {
                        // X and Y axis
                        myAngle = transform.eulerAngles.z;
                    }

                    float toAngle = Mathf.MoveTowardsAngle(myAngle, rotAngle, UbhTimer.Instance.DeltaTime * homingAngleSpeed);

                    if (axisMove == UbhUtil.AXIS.X_AND_Z)
                    {
                        // X and Z axis
                        transform.SetEulerAnglesY(-toAngle);
                    }
                    else
                    {
                        // X and Y axis
                        transform.SetEulerAnglesZ(toAngle);
                    }
                }
            }
            else if (wave)
            {
                // acceleration turning.
                angle += (accelTurn * UbhTimer.Instance.DeltaTime);
                // wave.
                if (0f < waveSpeed && 0f < waveRangeSize)
                {
                    float waveAngle = angle + (waveRangeSize / 2f * Mathf.Sin(selfFrameCnt * waveSpeed / 100f));
                    if (axisMove == UbhUtil.AXIS.X_AND_Z)
                    {
                        // X and Z axis
                        transform.SetEulerAnglesY(-waveAngle);
                    }
                    else
                    {
                        // X and Y axis
                        transform.SetEulerAnglesZ(waveAngle);
                    }
                }
                selfFrameCnt++;
            }
            else
            {
                // acceleration turning.
                float addAngle = accelTurn * UbhTimer.Instance.DeltaTime;
                if (axisMove == UbhUtil.AXIS.X_AND_Z)
                {
                    // X and Z axis
                    transform.AddEulerAnglesY(-addAngle);
                }
                else
                {
                    // X and Y axis
                    transform.AddEulerAnglesZ(addAngle);
                }
            }

            // acceleration speed.
            speed += (accelSpeed * UbhTimer.Instance.DeltaTime);

            // move.
            if (axisMove == UbhUtil.AXIS.X_AND_Z)
            {
                // X and Z axis
                transform.position += transform.forward.normalized * speed * UbhTimer.Instance.DeltaTime;
            }
            else
            {
                // X and Y axis
                transform.position += transform.up.normalized * speed * UbhTimer.Instance.DeltaTime;
            }

            yield return(0);

            selfTimeCount += UbhTimer.Instance.DeltaTime;

            // pause and resume.
            if (pauseAndResume && pauseTime >= 0f && resumeTime > pauseTime)
            {
                while (pauseTime <= selfTimeCount && selfTimeCount < resumeTime)
                {
                    yield return(0);

                    selfTimeCount += UbhTimer.Instance.DeltaTime;
                }
            }
        }
    }
コード例 #5
0
ファイル: UbhUtil.cs プロジェクト: MinKhant1/InviKiller
    /// <summary>
    /// Get angle from two transforms position.
    /// </summary>
    public static float GetAngleFromTwoPosition(Transform fromTrans, Transform toTrans, UbhUtil.AXIS axisMove)
    {
        switch (axisMove)
        {
        case AXIS.X_AND_Y:
            return(GetZangleFromTwoPosition(fromTrans, toTrans));

        case AXIS.X_AND_Z:
            return(GetYangleFromTwoPosition(fromTrans, toTrans));

        default:
            return(0f);
        }
    }