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; }
//------------------------------------------------------------------------------------------------------- /** * @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)); }
//------------------------------------------------------------------------------------------------------- /** * @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); }
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()); }
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); }