From cca383b452b6e99a9c364e0741f4f4f858f6a28c Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 18 Jun 2020 13:47:34 +0100 Subject: [PATCH] more to go, fix lsl funtions for parcels env --- .../World/LightShare/EnvironmentModule.cs | 101 ++++++++++++++---- .../Interfaces/IEnvironmentModule.cs | 8 +- .../Framework/Interfaces/IEstateModule.cs | 2 +- OpenSim/Region/Framework/Scenes/Scene.cs | 8 +- .../Shared/Api/Implementation/LSL_Api.cs | 16 ++- .../Shared/Api/Implementation/LS_Api.cs | 20 ++-- 6 files changed, 107 insertions(+), 48 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/LightShare/EnvironmentModule.cs b/OpenSim/Region/CoreModules/World/LightShare/EnvironmentModule.cs index 11e6474543..c803de9767 100644 --- a/OpenSim/Region/CoreModules/World/LightShare/EnvironmentModule.cs +++ b/OpenSim/Region/CoreModules/World/LightShare/EnvironmentModule.cs @@ -163,7 +163,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare catch ( Exception e) { m_DefaultEnv = null; - m_log.WarnFormat("[Enviroment {0}]: failed to decode default enviroment asset: {1}", m_scene.Name, e.Message); + m_log.WarnFormat("[Environment {0}]: failed to decode default environment asset: {1}", m_scene.Name, e.Message); } } } @@ -186,7 +186,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare } catch (Exception e) { - m_log.ErrorFormat("[Enviroment {0}] failed to load initial enviroment {1}", m_scene.Name, e.Message); + m_log.ErrorFormat("[Environment {0}] failed to load initial Environment {1}", m_scene.Name, e.Message); scene.RegionEnvironment = null; m_regionEnvVersion = -1; } @@ -239,7 +239,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare } catch (Exception e) { - m_log.ErrorFormat("[Enviroment {0}] failed to store enviroment {1}", m_scene.Name, e.Message); + m_log.ErrorFormat("[Environment {0}] failed to store Environment {1}", m_scene.Name, e.Message); } } @@ -424,14 +424,14 @@ namespace OpenSim.Region.CoreModules.World.LightShare ViewerEnvironment VEnv; if (parcel == -1) - VEnv = GetRegionEnviroment(); + VEnv = GetRegionEnvironment(); else { ILandObject land = m_scene.LandChannel.GetLandObject(parcel); if (land != null && land.LandData != null && land.LandData.Environment != null) VEnv = land.LandData.Environment; else - VEnv = GetRegionEnviroment(); + VEnv = GetRegionEnvironment(); } OSDMap map = new OSDMap(); @@ -491,7 +491,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare } if (track != -1) { - message = "Enviroment Track not suported"; + message = "Environment Track not suported"; goto Error; } } @@ -519,7 +519,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare if (!m_scene.Permissions.CanEditParcelProperties(agentID, lchannel, 0, true)) // wrong { - message = "No permission to change parcel enviroment"; + message = "No permission to change parcel environment"; goto Error; } VEnv = lchannel.LandData.Environment; @@ -562,13 +562,13 @@ namespace OpenSim.Region.CoreModules.World.LightShare if(lchannel == null) { StoreOnRegion(VEnv); - m_log.InfoFormat("[{0}]: ExtEnviroment region {1} settings from agentID {2} saved", + m_log.InfoFormat("[{0}]: ExtEnvironment region {1} settings from agentID {2} saved", Name, caps.RegionName, agentID); } else { lchannel.StoreEnvironment(VEnv); - m_log.InfoFormat("[{0}]: ExtEnviroment parcel {1} of region {2} settings from agentID {3} saved", + m_log.InfoFormat("[{0}]: ExtEnvironment parcel {1} of region {2} settings from agentID {3} saved", Name, parcel, caps.RegionName, agentID); } @@ -585,7 +585,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare WindlightRefresh(0); - m_log.InfoFormat("[{0}]: ExtEnviroment region {1} settings from agentID {2} saved", + m_log.InfoFormat("[{0}]: ExtEnvironment region {1} settings from agentID {2} saved", Name, caps.RegionName, agentID); LLSDxmlEncode.AddMap(sb); @@ -638,7 +638,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare if (land != null && land.LandData != null && land.LandData.Environment != null) VEnv = land.LandData.Environment; else - VEnv = GetRegionEnviroment(); + VEnv = GetRegionEnvironment(); OSD d = VEnv.ToWLOSD(UUID.Zero, regionID); string env = OSDParser.SerializeLLSDXmlString(d); @@ -683,7 +683,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare ILandObject land = m_scene.LandChannel.GetLandObject(sp.AbsolutePosition.X, sp.AbsolutePosition.Y); if (land != null && land.LandData != null && land.LandData.Environment != null) { - fail_reason = "The parcel where you are has own enviroment set. You need a updated viewer to change enviroment"; + fail_reason = "The parcel where you are has own environment set. You need a updated viewer to change environment"; goto Error; } try @@ -829,7 +829,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare uint vflags = client.GetViewerCaps(); if((vflags & 0x8000) != 0) return; - if(m_scene.RegionInfo.EstateSettings.AllowEnviromentOverride) + if(m_scene.RegionInfo.EstateSettings.AllowEnvironmentOverride) m_eventQueue.WindlightRefreshEvent(1, client.AgentId); } @@ -848,7 +848,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare if(m_scene.GetNumberOfClients() == 0) return; - ViewerEnvironment env = GetRegionEnviroment(); + ViewerEnvironment env = GetRegionEnvironment(); float dayFrac = GetDayFractionTime(env); float wldayFrac = dayFrac; @@ -891,7 +891,27 @@ namespace OpenSim.Region.CoreModules.World.LightShare } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] - public ViewerEnvironment GetRegionEnviroment() + public ViewerEnvironment GetEnvironment(Vector3 pos) + { + ILandObject lo = m_landChannel.GetLandObject(pos.X, pos.Y); + if (lo != null && lo.LandData != null && lo.LandData.Environment != null) + return lo.LandData.Environment; + + return m_scene.RegionEnvironment == null ? m_DefaultEnv : m_scene.RegionEnvironment; + } + + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] + public ViewerEnvironment GetEnvironment(float x, float y) + { + ILandObject lo = m_landChannel.GetLandObject(x, y); + if (lo != null && lo.LandData != null && lo.LandData.Environment != null) + return lo.LandData.Environment; + + return m_scene.RegionEnvironment == null ? m_DefaultEnv : m_scene.RegionEnvironment; + } + + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] + public ViewerEnvironment GetRegionEnvironment() { return m_scene.RegionEnvironment == null ? m_DefaultEnv : m_scene.RegionEnvironment; } @@ -907,7 +927,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] public float GetRegionDayFractionTime() { - return GetDayFractionTime(GetRegionEnviroment()); + return GetDayFractionTime(GetRegionEnvironment()); } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] @@ -953,38 +973,75 @@ namespace OpenSim.Region.CoreModules.World.LightShare [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] public int GetRegionDayLength() { - return GetRegionEnviroment().DayLength; + return GetRegionEnvironment().DayLength; } [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] public int GetRegionDayOffset() { - return GetRegionEnviroment().DayOffset; + return GetRegionEnvironment().DayOffset; } [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector3 GetRegionSunDir(float altitude) { - return GetSunDir(GetRegionEnviroment(), altitude); + return GetSunDir(GetRegionEnvironment(), altitude); } [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] public Quaternion GetRegionSunRot(float altitude) { - return GetSunRot(GetRegionEnviroment(), altitude); + return GetSunRot(GetRegionEnvironment(), altitude); } [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector3 GetRegionMoonDir(float altitude) { - return GetMoonDir(GetRegionEnviroment(), altitude); + return GetMoonDir(GetRegionEnvironment(), altitude); } [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] public Quaternion GetRegionMoonRot(float altitude) { - return GetMoonRot(GetRegionEnviroment(), altitude); + return GetMoonRot(GetRegionEnvironment(), altitude); } + + [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] + public int GetDayLength(Vector3 pos) + { + return GetEnvironment(pos.X, pos.Y).DayLength; + } + + [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] + public int GetDayOffset(Vector3 pos) + { + return GetEnvironment(pos.X, pos.Y).DayOffset; + } + + [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] + public Vector3 GetSunDir(Vector3 pos) + { + return GetSunDir(GetEnvironment(pos.X, pos.Y), pos.Z); + } + + [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] + public Quaternion GetSunRot(Vector3 pos) + { + return GetSunRot(GetEnvironment(pos.X, pos.Y), pos.Z); + } + + [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] + public Vector3 GetMoonDir(Vector3 pos) + { + return GetMoonDir(GetEnvironment(pos.X, pos.Y), pos.Z); + } + + [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.AggressiveInlining)] + public Quaternion GetMoonRot(Vector3 pos) + { + return GetMoonRot(GetEnvironment(pos.X, pos.Y), pos.Z); + } + } } diff --git a/OpenSim/Region/Framework/Interfaces/IEnvironmentModule.cs b/OpenSim/Region/Framework/Interfaces/IEnvironmentModule.cs index 60a7c0d489..c97391a74b 100644 --- a/OpenSim/Region/Framework/Interfaces/IEnvironmentModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IEnvironmentModule.cs @@ -43,7 +43,13 @@ namespace OpenSim.Region.Framework.Interfaces int GetRegionDayOffset(); Vector3 GetRegionSunDir(float altitude); Quaternion GetRegionSunRot(float altitude); - Vector3 GetRegionMoonDir(float altitude); + Vector3 GetRegionMoonDir(float altitude); Quaternion GetRegionMoonRot(float altitude); + int GetDayLength(Vector3 pos); + int GetDayOffset(Vector3 pos); + Vector3 GetSunDir(Vector3 pos); + Quaternion GetSunRot(Vector3 pos); + Vector3 GetMoonDir(Vector3 pos); + Quaternion GetMoonRot(Vector3 pos); } } diff --git a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs index a8464b1190..e36c97ed33 100644 --- a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs @@ -70,7 +70,7 @@ namespace OpenSim.Region.Framework.Interfaces bool IsTerrainXfer(ulong xferID); bool handleEstateChangeInfoCap(string estateName, UUID invoice, bool externallyVisible, bool allowDirectTeleport, bool denyAnonymous, bool denyAgeUnverified, - bool alloVoiceChat, bool overridePublicAccess, bool allowEnviromentOverride); + bool alloVoiceChat, bool overridePublicAccess, bool allowEnvironmentOverride); void HandleRegionInfoRequest(IClientAPI remote_client); } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 1f106c0b9a..8e1b6f6985 100755 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -5884,14 +5884,14 @@ Environment.Exit(1); IEstateDataService estateDataService = EstateDataService; if (estateDataService != null) { - bool parcelEnvOvr = RegionInfo.EstateSettings.AllowEnviromentOverride; + bool parcelEnvOvr = RegionInfo.EstateSettings.AllowEnvironmentOverride; RegionInfo.EstateSettings = estateDataService.LoadEstateSettings(RegionInfo.RegionID, false); - if(parcelEnvOvr && !RegionInfo.EstateSettings.AllowEnviromentOverride) - ClearAllParcelEnviroments(); + if(parcelEnvOvr && !RegionInfo.EstateSettings.AllowEnvironmentOverride) + ClearAllParcelEnvironments(); } } - public void ClearAllParcelEnviroments() + public void ClearAllParcelEnvironments() { IEnvironmentModule envM = RequestModuleInterface(); if(LandChannel != null && envM != null) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 64882daffc..4676569018 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -17487,7 +17487,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (m_envModule == null) return 14400; - return m_envModule.GetRegionDayLength(); + return m_envModule.GetDayLength(m_host.GetWorldPosition()); } public LSL_Integer llGetRegionDayLength() @@ -17507,7 +17507,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (m_envModule == null) return 57600; - return m_envModule.GetRegionDayOffset(); + return m_envModule.GetDayOffset(m_host.GetWorldPosition()); } public LSL_Integer llGetRegionDayOffset() @@ -17527,8 +17527,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (m_envModule == null) return Vector3.Zero; - float z = m_host.GetWorldPosition().Z; - return m_envModule.GetRegionSunDir(z); + return m_envModule.GetSunDir(m_host.GetWorldPosition()); } public LSL_Vector llGetRegionSunDirection() @@ -17549,8 +17548,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (m_envModule == null) return Vector3.Zero; - float z = m_host.GetWorldPosition().Z; - return m_envModule.GetRegionMoonDir(z); + return m_envModule.GetMoonDir(m_host.GetWorldPosition()); } public LSL_Vector llGetRegionMoonDirection() @@ -17571,8 +17569,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (m_envModule == null) return Quaternion.Identity; - float z = m_host.GetWorldPosition().Z; - return m_envModule.GetRegionSunRot(z); + return m_envModule.GetSunRot(m_host.GetWorldPosition()); } public LSL_Rotation llGetRegionSunRotation() @@ -17593,8 +17590,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (m_envModule == null) return Quaternion.Identity; - float z = m_host.GetWorldPosition().Z; - return m_envModule.GetRegionMoonRot(z); + return m_envModule.GetMoonRot(m_host.GetWorldPosition()); } public LSL_Rotation llGetRegionMoonRotation() diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs index 8bdc061255..0a38411e71 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs @@ -62,7 +62,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api internal bool m_LSFunctionsEnabled = false; internal IScriptModuleComms m_comms = null; internal IConfig m_osslconfig; - internal IEnvironmentModule m_enviroment = null; + internal IEnvironmentModule m_environment = null; public void Initialize(IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item) { @@ -80,7 +80,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (m_comms == null) m_LSFunctionsEnabled = false; - m_enviroment = m_ScriptEngine.World.RequestModuleInterface(); + m_environment = m_ScriptEngine.World.RequestModuleInterface(); } public override Object InitializeLifetimeService() @@ -122,7 +122,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// List of windlight parameters public LSL_List lsGetWindlightScene(LSL_List rules) { - if (!m_LSFunctionsEnabled || m_enviroment == null) + if (!m_LSFunctionsEnabled || m_environment == null) { LSShoutError("LightShare functions are not enabled."); return new LSL_List(); @@ -130,7 +130,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_host.AddScriptLPS(1); - RegionLightShareData wl = m_enviroment.ToLightShare(); + RegionLightShareData wl = m_environment.ToLightShare(); LSL_List values = new LSL_List(); int idx = 0; @@ -268,7 +268,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private RegionLightShareData getWindlightProfileFromRules(LSL_List rules) { - RegionLightShareData wl = m_enviroment.ToLightShare(); + RegionLightShareData wl = m_environment.ToLightShare(); int idx = 0; while (idx < rules.Length) @@ -719,7 +719,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// success: true or false public int lsSetWindlightScene(LSL_List rules) { - if (!m_LSFunctionsEnabled || m_enviroment == null) + if (!m_LSFunctionsEnabled || m_environment == null) { LSShoutError("LightShare functions are not enabled."); return 0; @@ -741,7 +741,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api try { RegionLightShareData wl = getWindlightProfileFromRules(rules); - m_enviroment.FromLightShare(wl); + m_environment.FromLightShare(wl); } catch(InvalidCastException e) { @@ -754,7 +754,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void lsClearWindlightScene() { - if (!m_LSFunctionsEnabled || m_enviroment == null) + if (!m_LSFunctionsEnabled || m_environment == null) { LSShoutError("LightShare functions are not enabled."); return; @@ -773,7 +773,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } } - m_enviroment.ResetEnvironmentSettings(m_host.ParentGroup.Scene.RegionInfo.RegionID); + m_environment.ResetEnvironmentSettings(m_host.ParentGroup.Scene.RegionInfo.RegionID); } /// @@ -807,7 +807,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api int success = 0; m_host.AddScriptLPS(1); - if (m_enviroment != null) + if (m_environment != null) { RegionLightShareData wl; try