Ejemplo n.º 1
0
        //-------------------------------------------------------------------------------------------------------
        private void CloseTerrainPos(ref Vector3 curPos)
        {
            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return;
            }

            // 再计算移动速度
            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;
        }
Ejemplo n.º 2
0
        private object SetPos(object param)
        {
            if (m_Owner != null)
            {
                Vector3 pos             = (Vector3)param;
                Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                if (rs == null)
                {
                    return(null);
                }
                // 取下地表高度
                // 再计算移动速度
                Engine.IScene curScene = rs.GetActiveScene();
                if (curScene == null)
                {
                    return(null);
                }
                Engine.TerrainInfo info;
                if (curScene.GetTerrainInfo(ref pos, out info))
                {
                    //if (pos.y < info.pos.y)
                    {
                        pos.y = info.pos.y;// +0.08f; // 往上提一个距离
                    }
                }

                //if (pos.y <= 10f)
                //{
                //    if (!EntitySystem.m_ClientGlobal.IsMainPlayer(m_Owner))
                //    {
                //        Vector3 mainPos = EntitySystem.m_ClientGlobal.MainPlayer.GetPos();
                //        pos.y = mainPos.y;
                //    }
                //}


                //if (EntitySystem.m_ClientGlobal.IsMainPlayer(m_Owner))
                //{
                //    Engine.Utility.Log.LogGroup("XXF", "Entity.SetPos ({0},{1})", pos.x,-pos.z);
                //}

                m_Owner.SetPos(ref pos);
            }
            else
            {
                Engine.Utility.Log.LogGroup("XXF", "Entity.SetPos m_Owner is null");
            }

            return(null);
        }