예제 #1
0
    private void CloseTerrainPos(ref Vector3 curPos)
    {
        Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
        if (rs == null)
        {
            return;
        }

        // 再计算移动速度
        IScene m_curScene = rs.GetActiveScene();

        if (m_curScene == null)
        {
            return;
        }

        //和周围墙做碰撞修正
        // 计算得到新位置,还需要做一次碰撞检测,看是否可以行走
        //Ray rayLine = new Ray(m_vLastPos, pos - m_vLastPos);
        //Engine.ColliderInfo colliderInfo = new Engine.ColliderInfo();
        //float fDis = Vector3.Distance(pos, m_vLastPos);
        //if (m_curScene.GetColliderInfo(ref rayLine, ref colliderInfo))
        //{
        //    //Engine.Utility.Log.Trace("Dis:{0}", colliderInfo.distance);
        //    if (colliderInfo.distance < 1.5f) // 应当是玩家的半径
        //    {
        //        //                     if (colliderInfo.distance < fDis)
        //        //                     {
        //        //                         pos = m_vLastPos + Vector3.Normalize(m_vSpeed) * colliderInfo.distance;
        //        //                     }
        //        //                     else
        //        //                     {
        //        //            m_jumpSpeed =  Vector3.up * _jumpUp;
        //        //             m_vSpeed = m_jumpSpeed ;
        //        m_vSpeed = m_vSpeed - Vector3.Dot(m_vSpeed, colliderInfo.normal) * colliderInfo.normal;
        //        pos = m_vLastPos + m_vSpeed * Time.deltaTime;
        //        /*                    }*/
        //    }
        //}

        Engine.TerrainInfo info;
        if (m_curScene.GetTerrainInfo(ref curPos, out info))
        {
            //斜坡速度衰减.... 去掉
            //Vector3 right = Vector3.Cross(info.normal, m_dir);
            //Vector3 speed = Vector3.Cross(right, info.normal);
            //float cos = Vector3.Dot(m_dir, speed);

            //m_fSpeedTerrainFact = cos;
        }

        curPos.y = info.pos.y;
    }
예제 #2
0
        //-------------------------------------------------------------------------------------------------------

        /**
         * @brief 屏幕点击位置转换到场景坐标
         * @param pos 屏幕位置
         * @param scenePos 场景位置
         */
        public bool GetScenePos(Vector2 pos, out Engine.TerrainInfo terrainInfo)
        {
            terrainInfo = null;
            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return(false);
            }

            // 再计算移动速度
            Engine.IScene scene = rs.GetActiveScene();
            if (scene == null)
            {
                return(false);
            }

            return(scene.GetPickupPos(pos, out terrainInfo));
        }
예제 #3
0
        //-------------------------------------------------------------------------------------------------------

        /**
         * @brief 添加草扰动力
         * @param pos 力中心点位置
         * @param fForce 力大小
         * @param fRadius 力影响范围
         */
        public void AddGrassWaveForce(Vector3 pos, float fForce, float fRadius)
        {
            if (!m_bGrassForce)
            {
                return;
            }

            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return;
            }

            // 再计算移动速度
            Engine.IScene scene = rs.GetActiveScene();
            if (scene == null)
            {
                return;
            }

            scene.AddGrassWaveForce(pos, fForce, fRadius);
        }
예제 #4
0
        public void Update(float dt)
        {
            if (m_ClientGlobal.MainPlayer == null)
            {
                return;
            }

            if (m_enterZoneEvent != null)
            {
                Client.IEntity mainPlayer = m_ClientGlobal.MainPlayer;
                if (mainPlayer != null)
                {
                    int zoneid = this.IsEnterZone(mainPlayer.GetPos());
                    if (zoneid != -1)
                    {
                        m_enterZoneEvent(zoneid);
                    }
                }
            }

            // 检测遮挡物
            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return;
            }

            // 再计算移动速度
            Engine.IScene scene = rs.GetActiveScene();
            if (scene == null)
            {
                return;
            }

            scene.CheckOcclusion(m_ClientGlobal.MainPlayer.GetPos());
        }
예제 #5
0
        public float GetTerrainHeight(Vector3 pos)
        {
            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return(0.0f);
            }

            // 再计算移动速度
            Engine.IScene curScene = rs.GetActiveScene();
            if (curScene == null)
            {
                return(0.0f);
            }


            Engine.TerrainInfo info;
            if (!curScene.GetTerrainInfo(ref pos, out info))
            {
                return(0.0f);
            }

            return(info.pos.y);
        }