From 2a7b4c9db9c72c22ff90e3879e2cc9a5134d679a Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Tue, 3 Sep 2013 19:05:54 +0100 Subject: [PATCH] Add pCampbot "remove behaviour" console command for removing bot behaviours during operation. Doesn't currently work very well as stopping physics, for instance, can leave bot travelling in old direction --- OpenSim/Tools/pCampBot/Bot.cs | 12 +++++++ OpenSim/Tools/pCampBot/BotManager.cs | 53 +++++++++++++++++++++++++--- 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/OpenSim/Tools/pCampBot/Bot.cs b/OpenSim/Tools/pCampBot/Bot.cs index 60375162cb..0bd8151ecc 100644 --- a/OpenSim/Tools/pCampBot/Bot.cs +++ b/OpenSim/Tools/pCampBot/Bot.cs @@ -184,6 +184,12 @@ namespace pCampBot CreateLibOmvClient(); } + public bool TryGetBehaviour(string abbreviatedName, out IBehaviour behaviour) + { + lock (Behaviours) + return Behaviours.TryGetValue(abbreviatedName, out behaviour); + } + public bool AddBehaviour(IBehaviour behaviour) { lock (Behaviours) @@ -200,6 +206,12 @@ namespace pCampBot return false; } + public bool RemoveBehaviour(string abbreviatedName) + { + lock (Behaviours) + return Behaviours.Remove(abbreviatedName); + } + private void CreateLibOmvClient() { GridClient newClient = new GridClient(); diff --git a/OpenSim/Tools/pCampBot/BotManager.cs b/OpenSim/Tools/pCampBot/BotManager.cs index 51c5ff4c93..6433c2e006 100644 --- a/OpenSim/Tools/pCampBot/BotManager.cs +++ b/OpenSim/Tools/pCampBot/BotManager.cs @@ -200,11 +200,11 @@ namespace pCampBot "Can be performed on connected or disconnected bots.", HandleAddBehaviour); -// m_console.Commands.AddCommand( -// "bot", false, "remove behaviour", "remove behaviour ", -// "Remove a behaviour from a bot", -// "Can be performed on connected or disconnected bots.", -// HandleRemoveBehaviour); + m_console.Commands.AddCommand( + "bot", false, "remove behaviour", "remove behaviour ", + "Remove a behaviour from a bot", + "Can be performed on connected or disconnected bots.", + HandleRemoveBehaviour); m_console.Commands.AddCommand( "bot", false, "sit", "sit", "Sit all bots on the ground.", @@ -525,6 +525,49 @@ namespace pCampBot string.Join(", ", behavioursAdded.ConvertAll(b => b.Name).ToArray()), bot.Name); } + private void HandleRemoveBehaviour(string module, string[] cmd) + { + if (cmd.Length != 4) + { + MainConsole.Instance.OutputFormat("Usage: remove behaviour "); + return; + } + + string rawBehaviours = cmd[2]; + int botNumber; + + if (!ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, cmd[3], out botNumber)) + return; + + Bot bot = GetBotFromNumber(botNumber); + + if (bot == null) + { + MainConsole.Instance.OutputFormat("Error: No bot found with number {0}", botNumber); + return; + } + + HashSet abbreviatedBehavioursToRemove = new HashSet(); + List behavioursRemoved = new List(); + + Array.ForEach(rawBehaviours.Split(new char[] { ',' }), b => abbreviatedBehavioursToRemove.Add(b)); + + foreach (string b in abbreviatedBehavioursToRemove) + { + IBehaviour behaviour; + + if (bot.TryGetBehaviour(b, out behaviour)) + { + bot.RemoveBehaviour(b); + behavioursRemoved.Add(behaviour); + } + } + + MainConsole.Instance.OutputFormat( + "Removed behaviours {0} to bot {1}", + string.Join(", ", behavioursRemoved.ConvertAll(b => b.Name).ToArray()), bot.Name); + } + private void HandleDisconnect(string module, string[] cmd) { lock (m_bots)