From 18c625bda669509fc9aae330703fe09ff7a6c72e Mon Sep 17 00:00:00 2001 From: Dan Lake Date: Thu, 10 Nov 2011 14:09:35 -0800 Subject: [PATCH 1/3] When updating SOG, a physics taint should not override a full update with a terse update --- .../Framework/Scenes/SceneObjectGroup.cs | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 339cf0f13e..f6bfc9ba79 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -1731,18 +1731,23 @@ namespace OpenSim.Region.Framework.Scenes //if ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0) // return; - bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0); - - if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f)) + // If we somehow got here to updating the SOG and its root part is not scheduled for update, + // check to see if the physical position or rotation warrant an update. + if (m_rootPart.UpdateFlag == UpdateRequired.NONE) { - m_rootPart.UpdateFlag = UpdateRequired.TERSE; - lastPhysGroupPos = AbsolutePosition; - } + bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0); - if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f)) - { - m_rootPart.UpdateFlag = UpdateRequired.TERSE; - lastPhysGroupRot = GroupRotation; + if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f)) + { + m_rootPart.UpdateFlag = UpdateRequired.TERSE; + lastPhysGroupPos = AbsolutePosition; + } + + if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f)) + { + m_rootPart.UpdateFlag = UpdateRequired.TERSE; + lastPhysGroupRot = GroupRotation; + } } SceneObjectPart[] parts = m_parts.GetArray(); From 2d4ac6288dab1b12997c54cdc93d71ac5d0be8fc Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 10 Nov 2011 22:56:13 +0000 Subject: [PATCH 2/3] Alter commit 3758306 to allow region name to be substituted within a region console prompt This is to allow broader subsitution in the future. Currently, the only substitions are \R (for region name) and \\ (for a single backslash) e.g. "Region (\R) " is the current and continuing default prompt This renames custom_prompt in [Startup] to ConsolePrompt --- OpenSim/Region/Application/OpenSim.cs | 31 ++++++++++++++++++++++++--- bin/OpenSim.ini.example | 14 ++++++------ bin/OpenSimDefaults.ini | 7 ++++++ 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 9fe284f4ca..beb75a8904 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -31,6 +31,7 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text; +using System.Text.RegularExpressions; using System.Timers; using log4net; using Nini.Config; @@ -56,7 +57,16 @@ namespace OpenSim protected bool m_gui = false; protected string m_consoleType = "local"; protected uint m_consolePort = 0; - protected string m_custom_prompt; + + /// + /// Prompt to use for simulator command line. + /// + private string m_consolePrompt; + + /// + /// Regex for parsing out special characters in the prompt. + /// + private Regex m_consolePromptRegex = new Regex(@"([^\\])\\(\w)", RegexOptions.Compiled); private string m_timedScript = "disabled"; private Timer m_scriptTimer; @@ -111,7 +121,7 @@ namespace OpenSim Util.FireAndForgetMethod = asyncCallMethod; stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15); - m_custom_prompt = startupConfig.GetString("custom_prompt", "Region"); + m_consolePrompt = startupConfig.GetString("console_prompt", @"Region (\R) "); } if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool) @@ -835,7 +845,22 @@ namespace OpenSim string regionName = (m_sceneManager.CurrentScene == null ? "root" : m_sceneManager.CurrentScene.RegionInfo.RegionName); MainConsole.Instance.Output(String.Format("Currently selected region is {0}", regionName)); - m_console.DefaultPrompt = String.Format("{0} ({1}) ", m_custom_prompt, regionName); + +// m_log.DebugFormat("Original prompt is {0}", m_consolePrompt); + string prompt = m_consolePrompt; + + // Replace "\R" with the region name + // Replace "\\" with "\" + prompt = m_consolePromptRegex.Replace(prompt, m => + { +// m_log.DebugFormat("Matched {0}", m.Groups[2].Value); + if (m.Groups[2].Value == "R") + return m.Groups[1].Value + regionName; + else + return m.Groups[0].Value; + }); + + m_console.DefaultPrompt = prompt; m_console.ConsoleScene = m_sceneManager.CurrentScene; } diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index c5205dbeae..253b24dbbf 100755 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -36,6 +36,14 @@ [Startup] + ;# {ConsolePrompt} {} {ConsolePrompt} {} "Region (\R) " + ;; Console prompt + ;; Certain special characters can be used to customize the prompt + ;; Currently, these are + ;; \R - substitute region name + ;; \\ - substitute \ + ; ConsolePrompt = "Region (\R) " + ;# {save_crashes} {} {Save crashes to disk?} {true false} false ;; Set this to true if you want to log crashes to disk ;; this can be useful when submitting bug reports. @@ -230,12 +238,6 @@ ;; by scripts have changed. ; DeleteScriptsOnStartup = true - ;; Custom prompt - ;; This value replaces the word "Region" in console prompt - ;; (usualy "Region (regionName) # " - ;; Useful only if you have to monitor serveral servers - ; custom_prompt = "MyServer1" - [SMTP] ;; The SMTP server enabled the email module to send email to external ;; destinations. diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index 7ea710e477..2c5fbf5c90 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -3,6 +3,13 @@ [Startup] + ; Console prompt + ; Certain special characters can be used to customize the prompt + ; Currently, these are + ; \R - substitute region name + ; \\ - substtitue \ + ConsolePrompt = "Region (\R) " + ; Set this to true if you want to log crashes to disk ; this can be useful when submitting bug reports. ; However, this will only log crashes within OpenSimulator that cause the entire program to exit From f5abae5ac67caefdc305cfa8551dfa749bf8b5c7 Mon Sep 17 00:00:00 2001 From: Melanie Date: Thu, 10 Nov 2011 22:34:54 +0100 Subject: [PATCH 3/3] Implement nudging support for strafing motion --- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index fc5141f8eb..e662492936 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1509,7 +1509,8 @@ namespace OpenSim.Region.Framework.Scenes if ((MovementFlag & (byte)(uint)DCF) == 0) { - if (DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE) + if (DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE || + DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT_NUDGE) { MovementFlag |= (byte)nudgehack; } @@ -1522,7 +1523,8 @@ namespace OpenSim.Region.Framework.Scenes else { if ((MovementFlag & (byte)(uint)DCF) != 0 || - ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE) + ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE || + DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT_NUDGE) && ((MovementFlag & (byte)nudgehack) == nudgehack)) ) // This or is for Nudge forward {