コード例 #1
0
ファイル: Parachute.cs プロジェクト: shrubba/planetexplorers
 public override void InitEquipment(SkillAsset.SkillRunner runner, ItemAsset.ItemObject item)
 {
     base.InitEquipment(runner, item);
     if (null != mGlideObj)
     {
         mAnimator = mGlideObj.GetComponent <Animator>();
     }
     mPCM = runner.GetComponent <PhysicsCharacterMotor>();
 }
コード例 #2
0
    public void SafeCheckVelocity(PhysicsCharacterMotor rigidbody)
    {
        Vector3 pos = rigidbody.transform.position;

        if (pos.y < 0)
        {
            rigidbody.transform.position = pos - pos.y * Vector3.up;
            return;
        }

        if (IsPosInGenerating(ref pos))
        {
            rigidbody.FreezeGravity = true;
        }
        else         //if(!rigidbody.grounded)
        {
            rigidbody.FreezeGravity = false;
            float      upRayLen       = 1500.0f;
            float      dnRayLen       = 400.0f;
            int        vfterrainLayer = Pathea.Layer.VFVoxelTerrain;
            RaycastHit hit;
            if (Physics.Raycast(pos + Vector3.up * upRayLen, Vector3.down, out hit, upRayLen - 0.1f, 1 << vfterrainLayer))
            {
                // Add check if part of player is under terrain, may cause player jump up out of cave
                if (pos.y >= hit.point.y - 1.5f || !Physics.Raycast(pos + Vector3.up, Vector3.down, dnRayLen, 1 << vfterrainLayer))
                {
                    VFVoxel voxel = VFVoxelTerrain.self.Voxels.SafeRead((int)pos.x, (int)pos.y, (int)pos.z);
                    if (0 != voxel.Type && voxel.Volume > 127)
                    {
                        voxel = VFVoxelTerrain.self.Voxels.SafeRead((int)pos.x, (int)pos.y - 1, (int)pos.z);
                        if (0 != voxel.Type && voxel.Volume > 127)
                        {
                            Debug.Log("PlayerFallenCheckFix");
                            rigidbody.transform.position = hit.point;
                        }
                    }
                }
            }
        }
    }
コード例 #3
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];
            }
        }
    }