OSDN Git Service

RAD-147: Added "follow" command
authorLatif Khalifa <latifer@streamgrid.net>
Mon, 26 Apr 2010 05:20:39 +0000 (05:20 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Mon, 26 Apr 2010 05:20:39 +0000 (05:20 +0000)
git-svn-id: https://radegast.googlecode.com/svn/trunk@592 f7a694da-4d33-11de-9ad6-1127a62b9fcd

Radegast/Core/Commands/FollowCommand.cs [new file with mode: 0644]
Radegast/Core/StateManager.cs
Radegast/Radegast.csproj
Radegast/RadegastBuild.cs

diff --git a/Radegast/Core/Commands/FollowCommand.cs b/Radegast/Core/Commands/FollowCommand.cs
new file mode 100644 (file)
index 0000000..099d6c6
--- /dev/null
@@ -0,0 +1,101 @@
+// 
+// Radegast Metaverse Client
+// Copyright (c) 2009, Radegast Development Team
+// All rights reserved.
+// 
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+// 
+//     * Redistributions of source code must retain the above copyright notice,
+//       this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above copyright
+//       notice, this list of conditions and the following disclaimer in the
+//       documentation and/or other materials provided with the distribution.
+//     * Neither the name of the application "Radegast", nor the names of its
+//       contributors may be used to endorse or promote products derived from
+//       this software without specific prior written permission.
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// $Id$
+//
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Windows.Forms;
+
+using OpenMetaverse;
+
+namespace Radegast.Commands
+{
+    public class FollowCommand : RadegastCommand
+    {
+        TabsConsole TC { get { return Instance.TabConsole; } }
+        ChatConsole Chat;
+
+        public FollowCommand(RadegastInstance instance)
+            : base(instance)
+        {
+            Name = "follow";
+            Description = "Follows a person";
+            Usage = "follow (person name|stop)";
+
+            Chat = (ChatConsole)TC.Tabs["chat"].Control;
+        }
+
+        public override void Dispose()
+        {
+            Chat = null;
+            base.Dispose();
+        }
+
+        public override void Execute(string name, string[] cmdArgs, ConsoleWriteLine WriteLine)
+        {
+            if (Chat.InvokeRequired)
+            {
+                if (Chat.IsHandleCreated)
+                    Chat.Invoke(new MethodInvoker(() => Execute(name, cmdArgs, WriteLine)));
+                return;
+            }
+
+            if (cmdArgs.Length == 0)
+            {
+                if (Instance.State.FollowName == string.Empty)
+                    WriteLine("Follow inactive, type {0}follow person name, to start following them", CommandsManager.CmdPrefix);
+                else
+                    WriteLine("Following {0}", Instance.State.FollowName);
+                return;
+            }
+
+            string cmd = string.Join(" ", cmdArgs);
+
+            if (cmd == "stop")
+            {
+                Instance.State.StopFollowing();
+                WriteLine("Following stopped");
+                return;
+            }
+
+            List<UUID> people = Chat.GetAvatarList();
+            UUID person = people.Find((UUID id) => { return Instance.getAvatarName(id).ToLower().StartsWith(cmd.ToLower()); });
+            if (person == UUID.Zero)
+            {
+                WriteLine("Could not find {0}", cmd);
+                return;
+            }
+
+            Instance.State.Follow(Instance.getAvatarName(person), person);
+            WriteLine("Following {0}", Instance.State.FollowName);
+        }
+    }
+}
index b988d75..9c88da0 100644 (file)
@@ -405,6 +405,13 @@ namespace Radegast
             }
         }
 
+        public void StopFollowing()
+        {
+            following = false;
+            followName = string.Empty;
+            followID = UUID.Zero;
+        }
+
         #region Look at effect
         private int lastLookAtEffect = 0;
         private UUID lookAtEffect = UUID.Random();
index 4db4c21..e09310f 100644 (file)
@@ -96,6 +96,7 @@
     <Compile Include="Core\ClientSignatures.cs" />\r
     <Compile Include="Core\Commands\CommandsManager.cs" />\r
     <Compile Include="Core\Commands\FaceCommand.cs" />\r
+    <Compile Include="Core\Commands\FollowCommand.cs" />\r
     <Compile Include="Core\Commands\GoCommand.cs" />\r
     <Compile Include="Core\Commands\ICommandInterpreter.cs" />\r
     <Compile Include="Core\Commands\IRadegastCommand.cs" />\r
index e91f13c..6dcd774 100644 (file)
@@ -1,5 +1,5 @@
 // Autogenerated: run updatebuildnr.bat/sh to update 
 namespace Radegast 
 { 
-    public static class RadegastBuild { public static int CurrentRev = 591; } 
+    public static class RadegastBuild { public static int CurrentRev = 592; } 
 }