diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Application/OpenSim.cs | 31 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 25 |
2 files changed, 43 insertions, 13 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 51312df..1149bd7 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -31,6 +31,7 @@ using System.Collections.Generic; | |||
31 | using System.IO; | 31 | using System.IO; |
32 | using System.Reflection; | 32 | using System.Reflection; |
33 | using System.Text; | 33 | using System.Text; |
34 | using System.Text.RegularExpressions; | ||
34 | using System.Timers; | 35 | using System.Timers; |
35 | using log4net; | 36 | using log4net; |
36 | using Nini.Config; | 37 | using Nini.Config; |
@@ -56,7 +57,16 @@ namespace OpenSim | |||
56 | protected bool m_gui = false; | 57 | protected bool m_gui = false; |
57 | protected string m_consoleType = "local"; | 58 | protected string m_consoleType = "local"; |
58 | protected uint m_consolePort = 0; | 59 | protected uint m_consolePort = 0; |
59 | protected string m_custom_prompt; | 60 | |
61 | /// <summary> | ||
62 | /// Prompt to use for simulator command line. | ||
63 | /// </summary> | ||
64 | private string m_consolePrompt; | ||
65 | |||
66 | /// <summary> | ||
67 | /// Regex for parsing out special characters in the prompt. | ||
68 | /// </summary> | ||
69 | private Regex m_consolePromptRegex = new Regex(@"([^\\])\\(\w)", RegexOptions.Compiled); | ||
60 | 70 | ||
61 | private string m_timedScript = "disabled"; | 71 | private string m_timedScript = "disabled"; |
62 | private Timer m_scriptTimer; | 72 | private Timer m_scriptTimer; |
@@ -111,7 +121,7 @@ namespace OpenSim | |||
111 | Util.FireAndForgetMethod = asyncCallMethod; | 121 | Util.FireAndForgetMethod = asyncCallMethod; |
112 | 122 | ||
113 | stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15); | 123 | stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15); |
114 | m_custom_prompt = startupConfig.GetString("custom_prompt", "Region"); | 124 | m_consolePrompt = startupConfig.GetString("console_prompt", @"Region (\R) "); |
115 | } | 125 | } |
116 | 126 | ||
117 | if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool) | 127 | if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool) |
@@ -835,7 +845,22 @@ namespace OpenSim | |||
835 | 845 | ||
836 | string regionName = (m_sceneManager.CurrentScene == null ? "root" : m_sceneManager.CurrentScene.RegionInfo.RegionName); | 846 | string regionName = (m_sceneManager.CurrentScene == null ? "root" : m_sceneManager.CurrentScene.RegionInfo.RegionName); |
837 | MainConsole.Instance.Output(String.Format("Currently selected region is {0}", regionName)); | 847 | MainConsole.Instance.Output(String.Format("Currently selected region is {0}", regionName)); |
838 | m_console.DefaultPrompt = String.Format("{0} ({1}) ", m_custom_prompt, regionName); | 848 | |
849 | // m_log.DebugFormat("Original prompt is {0}", m_consolePrompt); | ||
850 | string prompt = m_consolePrompt; | ||
851 | |||
852 | // Replace "\R" with the region name | ||
853 | // Replace "\\" with "\" | ||
854 | prompt = m_consolePromptRegex.Replace(prompt, m => | ||
855 | { | ||
856 | // m_log.DebugFormat("Matched {0}", m.Groups[2].Value); | ||
857 | if (m.Groups[2].Value == "R") | ||
858 | return m.Groups[1].Value + regionName; | ||
859 | else | ||
860 | return m.Groups[0].Value; | ||
861 | }); | ||
862 | |||
863 | m_console.DefaultPrompt = prompt; | ||
839 | m_console.ConsoleScene = m_sceneManager.CurrentScene; | 864 | m_console.ConsoleScene = m_sceneManager.CurrentScene; |
840 | } | 865 | } |
841 | 866 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index a3ac756..b758b8f 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -2119,18 +2119,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
2119 | //if ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0) | 2119 | //if ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0) |
2120 | // return; | 2120 | // return; |
2121 | 2121 | ||
2122 | bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0); | 2122 | // If we somehow got here to updating the SOG and its root part is not scheduled for update, |
2123 | 2123 | // check to see if the physical position or rotation warrant an update. | |
2124 | if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f)) | 2124 | if (m_rootPart.UpdateFlag == UpdateRequired.NONE) |
2125 | { | 2125 | { |
2126 | m_rootPart.UpdateFlag = UpdateRequired.TERSE; | 2126 | bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0); |
2127 | lastPhysGroupPos = AbsolutePosition; | ||
2128 | } | ||
2129 | 2127 | ||
2130 | if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f)) | 2128 | if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f)) |
2131 | { | 2129 | { |
2132 | m_rootPart.UpdateFlag = UpdateRequired.TERSE; | 2130 | m_rootPart.UpdateFlag = UpdateRequired.TERSE; |
2133 | lastPhysGroupRot = GroupRotation; | 2131 | lastPhysGroupPos = AbsolutePosition; |
2132 | } | ||
2133 | |||
2134 | if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f)) | ||
2135 | { | ||
2136 | m_rootPart.UpdateFlag = UpdateRequired.TERSE; | ||
2137 | lastPhysGroupRot = GroupRotation; | ||
2138 | } | ||
2134 | } | 2139 | } |
2135 | 2140 | ||
2136 | SceneObjectPart[] parts = m_parts.GetArray(); | 2141 | SceneObjectPart[] parts = m_parts.GetArray(); |