Exemplo n.º 1
0
        void UpdateShoot()
        {
            RaycastHit hitInfo;
            float      moveDis = mRopeGun.bulletSpeed * Time.deltaTime;

            if (Physics.Raycast(m_LastHookPos, m_ShootDir, out hitInfo, 10, -1, QueryTriggerInteraction.Ignore) &&
                hitInfo.distance <= moveDis)
            {
                if ((1 << hitInfo.transform.gameObject.layer & mRopeGun.effectLayer.value) != 0 &&
                    Vector3.SqrMagnitude(hitInfo.point - mRopeGun.gunMuzzle.position) >= mRopeGun.minDis * mRopeGun.minDis)
                {
                    mRopeGun.hook.position = m_LastHookPos = hitInfo.point;
                    StartClimb();
                }
                else
                {
                    mState = HookGunState.Back;
                }

                m_Audio = AudioManager.instance.Create(mRopeGun.gunMuzzle.position, mRopeGun.ropeSound, mRopeGun.gunMuzzle, true, false);
            }
            else
            {
                m_LastHookPos += moveDis * m_ShootDir;
                if (Vector3.SqrMagnitude(m_LastHookPos - mRopeGun.gunMuzzle.position) >= mRopeGun.range * mRopeGun.range)
                {
                    mState  = HookGunState.Back;
                    m_Audio = AudioManager.instance.Create(mRopeGun.gunMuzzle.position, mRopeGun.ropeSound, mRopeGun.gunMuzzle, true, false);
                }
            }
            UpdateLinePos();
        }
Exemplo n.º 2
0
        public override void DoAction(PEActionParam para)
        {
            if (null == mRopeGun)
            {
                return;
            }
            if (!viewCmpt.hasView)
            {
                return;
            }
            m_LastHookPos = mRopeGun.hook.position;
            motionMgr.SetMaskState(PEActionMask.RopeGunShoot, true);
            mState             = HookGunState.Shooting;
            m_ShootDir         = (ikCmpt.aimTargetPos - mRopeGun.gunMuzzle.position).normalized;
            m_CurrentMoveIndex = 0;
            PeCamera.SetFloat("Sensitivity Multiplier", 0);
            AudioManager.instance.Create(mRopeGun.gunMuzzle.position, mRopeGun.fireSound);
//			Collider[] hitInfos = Physics.OverlapSphere(mRopeGun.gunMuzzle.position, 0.2f, mRopeGun.effectLayer.value, QueryTriggerInteraction.Ignore);
//			for(int i = 0; i < hitInfos.Length; ++i)
//			{
//				if(!hitInfos[i].transform.IsChildOf(entity.transform))
//				{
//					mState = HookGunState.Null;
//					return;
//				}
//			}
        }
Exemplo n.º 3
0
    public override bool CostSkill(ISkillTarget target, int sex = 2, bool buttonDown = false, bool buttonPressed = false)
    {
        if (!base.CostSkill(target, sex, buttonDown, buttonPressed))
        {
            return(false);
        }
        if (mState == HookGunState.Null && buttonDown)
        {
            Vector3 shootDir = target.GetPosition() - mGunMuzzle[mCurrentIndex].End.position;
            shootDir.Normalize();
//			if(shootDir.y > 0.17f) // up 10 angle
            {
                mState            = HookGunState.Shooting;
                mTargetPos        = mHook.transform.position;
                mCurrentMoveIndex = 0;
                mShootDir         = (target.GetPosition() - mGunMuzzle[mCurrentIndex].End.position).normalized;
                mOffsetPos        = mSkillRunner.transform.position - mGunMuzzle[mCurrentIndex].End.position;
                List <string> animList = new List <string>();
                animList.Add("HoldOnFire");
                mSkillRunner.ApplyAnim(animList);
                mClimpOffset = 1.5f;
                mHuman.ApplyDurabilityReduce(0);
                AudioManager.instance.Create(transform.position, mFireSound);
                return(true);
            }
        }
        return(false);
    }
Exemplo n.º 4
0
    void UpdateBulletBackPos()
    {
        RaycastHit hitInfo;

        mHook.transform.position = mTargetPos;
        float moveDis = mBulletSpeed * Time.fixedDeltaTime;

        mShootDir = (mGunMuzzle[mCurrentIndex].End.position - mHook.transform.position).normalized;
        if (Physics.Raycast(mHook.transform.position, mShootDir, out hitInfo))
        {
            if (hitInfo.distance < moveDis)
            {
                mState = HookGunState.Null;
                for (int i = 0; i < mLineList.Count; i++)
                {
                    mLineList[i].localPosition = Vector3.zero;
                }
                mHook.transform.localPosition = Vector3.zero;
                Invoke("EndClimb", 0.2f);
                return;
            }
        }
//		mHook.transform.position += moveDis * mShootDir;
        mTargetPos = mHook.transform.position += moveDis * mShootDir;
        UpdateLinePos();
    }
Exemplo n.º 5
0
 void StartClimb()
 {
     mState = HookGunState.Climbing;
     anim.SetBool(ClimbAnim, true);
     phyCtrl.m_SubAcc   = Physics.gravity.y * Vector3.down;
     phyCtrl.useRopeGun = true;
     phyCtrl._rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
     m_ExDoClimbTime = Time.time + mRopeGun.minClimbTime;
     Effect.EffectBuilder.Instance.Register(mRopeGun.hitEffectID, null, mRopeGun.hook.position, Quaternion.identity);
 }
Exemplo n.º 6
0
        void UpdateBack()
        {
            float   moveDis = mRopeGun.bulletSpeed * Time.deltaTime;
            Vector3 dir     = mRopeGun.gunMuzzle.position - m_LastHookPos;

            if (dir.sqrMagnitude <= moveDis * moveDis)
            {
                mState = HookGunState.Null;
                mRopeGun.hook.localPosition = Vector3.zero;
                ResetLine();
            }
            else
            {
                m_LastHookPos += moveDis * dir.normalized;
                UpdateLinePos();
            }
        }
Exemplo n.º 7
0
    void UpdateBulletShootPos()
    {
        RaycastHit hitInfo;

        mHook.transform.position = mTargetPos;
        float moveDis = mBulletSpeed * Time.fixedDeltaTime;

        if (Physics.Raycast(mHook.transform.position, mShootDir, out hitInfo))
        {
            if (hitInfo.distance < moveDis)
            {
                if (hitInfo.transform.gameObject.layer == Pathea.Layer.VFVoxelTerrain)
                {
                    mTargetPos = hitInfo.point;
                    mState     = HookGunState.Climbing;
                    List <string> anim = new List <string>();
                    anim.Add("GrapplingStart");
                    mSkillRunner.ApplyAnim(anim);
                    mClimpOffset = 1.5f;
                    if (null != mSkillRunner.GetComponent <Rigidbody>())
                    {
                        mSkillRunner.GetComponent <Rigidbody>().isKinematic = true;
                    }
                    return;
                }
                else if (!hitInfo.collider.isTrigger)
                {
                    mState = HookGunState.Back;
                    return;
                }
            }
        }
        mTargetPos = mHook.transform.position += moveDis * mShootDir;
        if (Vector3.Distance(mHook.transform.position, mGunMuzzle[mCurrentIndex].End.position) > mRange)
        {
            mState = HookGunState.Back;
        }
        UpdateLinePos();
    }
Exemplo n.º 8
0
        void UpdateClimbing()
        {
            Vector3 projectPos = Vector3.zero;

            for (; m_CurrentMoveIndex < mLinePosList.Count - 1; ++m_CurrentMoveIndex)
            {
                Vector3 indexDir   = mLinePosList[m_CurrentMoveIndex + 1] - mLinePosList[m_CurrentMoveIndex];
                Vector3 currentDir = mRopeGun.gunMuzzle.position - mLinePosList[m_CurrentMoveIndex];
                Vector3 projectDir = Vector3.Project(currentDir, indexDir);
                if (projectDir.sqrMagnitude < PETools.PEMath.Epsilon ||
                    Vector3.Angle(projectDir, indexDir) > 90f ||
                    projectDir.sqrMagnitude < indexDir.sqrMagnitude)
                {
                    projectPos = mLinePosList[m_CurrentMoveIndex] + projectDir;
                    break;
                }
            }


            if (phyCtrl.velocity.magnitude > 5f * mRopeGun.climbSpeed || Vector3.SqrMagnitude(trans.position - m_LastHookPos) > 40000f)
            {
                trans.position = m_LastHookPos + 2f * Vector3.up;
                mState         = HookGunState.Null;
                ResetPhy();
                return;
            }

            if (m_CurrentMoveIndex == mLinePosList.Count - 1 ||
                Vector3.SqrMagnitude(projectPos - m_LastHookPos) <= 0.25f ||
                (Time.time >= m_ExDoClimbTime && phyCtrl.grounded))
            {
                mState = HookGunState.Null;
                ResetPhy();
                return;
            }

            mRopeGun.hook.position = m_LastHookPos;
            Vector3 targetToProjectPos = projectPos - m_LastHookPos;
            Vector3 targetToHookPos    = mRopeGun.gunMuzzle.position - m_LastHookPos;
            float   angle = Vector3.Angle(targetToHookPos, targetToProjectPos);

            if (angle > PETools.PEMath.Epsilon)
            {
                Vector3    normal = Vector3.Cross(targetToProjectPos.normalized, targetToHookPos.normalized);
                Quaternion rot    = Quaternion.AngleAxis(angle, normal);
                for (int i = m_CurrentMoveIndex; i < mLinePosList.Count - 1; ++i)
                {
                    Vector3 dir = mLinePosList[i] - m_LastHookPos;
                    dir             = rot * dir;
                    mLinePosList[i] = dir + m_LastHookPos;
                }
            }

            Vector3 moveDir = Vector3.Normalize(mLinePosList[m_CurrentMoveIndex + 1] - mLinePosList[m_CurrentMoveIndex]);

            phyCtrl.m_SubAcc = moveDir.y > 0 ? Physics.gravity.y * Vector3.down : Vector3.zero;
            phyCtrl.ResetSpeed(((moveDir.y > 0)?1f:mRopeGun.moveDownSpeedScale) * mRopeGun.climbSpeed);
            phyCtrl.desiredMovementDirection = moveDir;

            for (int i = 0; i < mRopeGun.lineList.Count; i++)
            {
                if (i < m_CurrentMoveIndex + 1)
                {
                    mRopeGun.lineList[i].localPosition = Vector3.zero;
                }
                else
                {
                    mRopeGun.lineList[i].position = mLinePosList[i];
                }
            }
        }
Exemplo n.º 9
0
    void UpdateUserPos()
    {
        Vector3 StartPos = mLinePosList[mCurrentMoveIndex];
        Vector3 EndPos   = mLinePosList[mCurrentMoveIndex + 1];
        Vector3 Dir      = EndPos - StartPos;

        mOffsetPos = mSkillRunner.transform.position - mGunMuzzle[mCurrentIndex].End.position;
        float MoveDis = mPushSpeed * Time.fixedDeltaTime;

        mCurrentMoveDis += MoveDis;
        PhysicsCharacterMotor pcM = mSkillRunner.GetComponent <PhysicsCharacterMotor>();

        if (null != pcM)
        {
            if (!pcM.GetComponent <Rigidbody>().isKinematic)
            {
                pcM.GetComponent <Rigidbody>().velocity = Vector3.zero;
            }
            mClimpOffset -= Time.fixedDeltaTime;
            if (mClimpOffset < 0f && pcM.grounded)
            {
                mSkillRunner.transform.position = EndPos;
                mState = HookGunState.Null;
                for (int i = 0; i < mLineList.Count; i++)
                {
                    mLineList[i].localPosition = Vector3.zero;
                }
                mHook.transform.localPosition = Vector3.zero;
                Invoke("EndClimb", 0.2f);

                if (Vector3.Distance(EndPos, mHook.position) < 1f)
                {
                    Ray ray = new Ray(mHook.position + 0.5f * Vector3.up, mSkillRunner.transform.forward);
                    if (!Physics.Raycast(ray, 0.5f))
                    {
                        mSkillRunner.transform.position = mHook.position + 0.5f * (Vector3.up + mSkillRunner.transform.forward);
                    }
                }
                else
                {
                    Ray ray = new Ray(mSkillRunner.transform.position + 0.5f * Vector3.up, mSkillRunner.transform.forward);
                    if (!Physics.Raycast(ray, 0.5f))
                    {
                        mSkillRunner.transform.position = mSkillRunner.transform.position + 0.5f * (Vector3.up + mSkillRunner.transform.forward);
                    }
                }
                return;
            }
        }
        if (mCurrentMoveDis > Dir.magnitude)
        {
            if (mCurrentMoveIndex == mLinePosList.Count - 2)           // endMove
            {
                mSkillRunner.transform.position = EndPos;
                mState = HookGunState.Null;
                for (int i = 0; i < mLineList.Count; i++)
                {
                    mLineList[i].localPosition = Vector3.zero;
                }
                mHook.transform.localPosition = Vector3.zero;

                Invoke("EndClimb", 0.2f);

                Ray ray = new Ray(mHook.position + 0.5f * Vector3.up, mSkillRunner.transform.forward);
                if (!Physics.Raycast(ray, 0.5f))
                {
                    mSkillRunner.transform.position = mHook.position + 0.5f * (Vector3.up + mSkillRunner.transform.forward);
                }
                return;
            }
            else
            {
                mCurrentMoveDis -= Dir.magnitude;
                mCurrentMoveIndex++;
                StartPos = mLinePosList[mCurrentMoveIndex];
                EndPos   = mLinePosList[mCurrentMoveIndex + 1];
                Dir      = EndPos - StartPos;
            }
        }

        mSkillRunner.transform.position = StartPos + Dir.normalized * mCurrentMoveDis + mOffsetPos;


        for (int i = 0; i < mLineList.Count; i++)
        {
            if (i < mCurrentMoveIndex + 1)
            {
                mLineList[i].position = mGunMuzzle[mCurrentIndex].End.position;
            }
            else
            {
                mLineList[i].position = mLinePosList[i];
            }
        }
    }