diff options
Diffstat (limited to 'tools/mass test client/Commands/Movement/FollowCommand.cs')
-rw-r--r-- | tools/mass test client/Commands/Movement/FollowCommand.cs | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tools/mass test client/Commands/Movement/FollowCommand.cs b/tools/mass test client/Commands/Movement/FollowCommand.cs new file mode 100644 index 0000000..49be106 --- /dev/null +++ b/tools/mass test client/Commands/Movement/FollowCommand.cs | |||
@@ -0,0 +1,90 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using libsecondlife; | ||
5 | using libsecondlife.Packets; | ||
6 | |||
7 | namespace libsecondlife.TestClient | ||
8 | { | ||
9 | public class FollowCommand: Command | ||
10 | { | ||
11 | public FollowCommand(TestClient testClient) | ||
12 | { | ||
13 | Name = "follow"; | ||
14 | Description = "Follow another avatar. (usage: follow [FirstName LastName]) If no target is set then will follow master."; | ||
15 | } | ||
16 | |||
17 | public override string Execute(string[] args, LLUUID fromAgentID) | ||
18 | { | ||
19 | string target = String.Empty; | ||
20 | for (int ct = 0; ct < args.Length; ct++) | ||
21 | target = target + args[ct] + " "; | ||
22 | target = target.TrimEnd(); | ||
23 | |||
24 | if (target.Length > 0) | ||
25 | { | ||
26 | if (Follow(target)) | ||
27 | return "Following " + target; | ||
28 | else | ||
29 | return "Unable to follow " + target + ". Client may not be able to see that avatar."; | ||
30 | } | ||
31 | else | ||
32 | { | ||
33 | if (Follow(Client.MasterKey)) | ||
34 | return "Following " + Client.MasterKey; | ||
35 | else | ||
36 | return "No target specified and no master not found. usage: follow [FirstName LastName])"; | ||
37 | } | ||
38 | } | ||
39 | |||
40 | const float DISTANCE_BUFFER = 3.0f; | ||
41 | Avatar followAvatar; | ||
42 | |||
43 | bool Follow(string name) | ||
44 | { | ||
45 | foreach (Avatar av in Client.AvatarList.Values) | ||
46 | { | ||
47 | if (av.Name == name) | ||
48 | { | ||
49 | followAvatar = av; | ||
50 | Active = true; | ||
51 | return true; | ||
52 | } | ||
53 | } | ||
54 | return false; | ||
55 | } | ||
56 | |||
57 | bool Follow(LLUUID id) | ||
58 | { | ||
59 | foreach (Avatar av in Client.AvatarList.Values) | ||
60 | { | ||
61 | if (av.ID == id) | ||
62 | { | ||
63 | followAvatar = av; | ||
64 | Active = true; | ||
65 | return true; | ||
66 | } | ||
67 | } | ||
68 | return false; | ||
69 | } | ||
70 | |||
71 | public override void Think() | ||
72 | { | ||
73 | if (Helpers.VecDist(followAvatar.Position, Client.Self.Position) > DISTANCE_BUFFER) | ||
74 | { | ||
75 | //move toward target | ||
76 | LLVector3 avPos = followAvatar.Position; | ||
77 | Client.Self.AutoPilot((ulong)avPos.X + (ulong)Client.regionX, (ulong)avPos.Y + (ulong)Client.regionY, avPos.Z); | ||
78 | } | ||
79 | //else | ||
80 | //{ | ||
81 | // //stop at current position | ||
82 | // LLVector3 myPos = client.Self.Position; | ||
83 | // client.Self.AutoPilot((ulong)myPos.x, (ulong)myPos.y, myPos.Z); | ||
84 | //} | ||
85 | |||
86 | base.Think(); | ||
87 | } | ||
88 | |||
89 | } | ||
90 | } | ||