aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/World
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/OptionalModules/World')
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs59
1 files changed, 48 insertions, 11 deletions
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index 8cb8318..fcfacc6 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -46,12 +46,54 @@ namespace OpenSim.Region.OptionalModules.World.NPC
46 46
47 // private const bool m_enabled = false; 47 // private const bool m_enabled = false;
48 48
49 private Dictionary<UUID,NPCAvatar> m_avatars = new Dictionary<UUID, NPCAvatar>(); 49 private Dictionary<UUID, NPCAvatar> m_avatars = new Dictionary<UUID, NPCAvatar>();
50 private Dictionary<UUID,AvatarAppearance> m_appearanceCache = new Dictionary<UUID, AvatarAppearance>(); 50 private Dictionary<UUID, AvatarAppearance> m_appearanceCache = new Dictionary<UUID, AvatarAppearance>();
51 51
52 public void Initialise(Scene scene, IConfigSource source) 52 public void Initialise(Scene scene, IConfigSource source)
53 { 53 {
54 scene.RegisterModuleInterface<INPCModule>(this); 54 scene.RegisterModuleInterface<INPCModule>(this);
55 scene.EventManager.OnSignificantClientMovement += HandleOnSignificantClientMovement;
56 }
57
58 public void HandleOnSignificantClientMovement(ScenePresence presence)
59 {
60 lock (m_avatars)
61 {
62 if (m_avatars.ContainsKey(presence.UUID))
63 {
64 double distanceToTarget = Util.GetDistanceTo(presence.AbsolutePosition, presence.MoveToPositionTarget);
65// m_log.DebugFormat(
66// "[NPC MODULE]: Abs pos of {0} is {1}, target {2}, distance {3}",
67// presence.Name, presence.AbsolutePosition, presence.MoveToPositionTarget, distanceToTarget);
68
69 // Check the error term of the current position in relation to the target position
70 if (distanceToTarget <= 1)
71 {
72// m_log.DebugFormat("[NPC MODULE]: Stopping movement of npc {0} {1}", presence.Name, presence.UUID);
73 // We are close enough to the target for now
74 presence.ResetMoveToPosition();
75 presence.Velocity = Vector3.Zero;
76
77 // FIXME: This doesn't work
78 if (presence.PhysicsActor.Flying)
79 presence.Animator.TrySetMovementAnimation("HOVER");
80 else
81 presence.Animator.TrySetMovementAnimation("STAND");
82 }
83 else
84 {
85 Vector3 agent_control_v3 = new Vector3();
86 presence.DoMoveToPositionUpdate(ref agent_control_v3, presence.Rotation, false, true);
87 presence.AddNewMovement(agent_control_v3, presence.Rotation);
88 }
89//
90//// presence.DoMoveToPositionUpdate((0, presence.MoveToPositionTarget, null);
91
92//
93//
94
95 }
96 }
55 } 97 }
56 98
57 private AvatarAppearance GetAppearance(UUID target, Scene scene) 99 private AvatarAppearance GetAppearance(UUID target, Scene scene)
@@ -141,15 +183,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC
141 ScenePresence sp; 183 ScenePresence sp;
142 scene.TryGetScenePresence(agentID, out sp); 184 scene.TryGetScenePresence(agentID, out sp);
143 185
144// m_log.DebugFormat( 186 m_log.DebugFormat(
145// "[NPC MODULE]: Moving {0} to {1} in {2}", sp.Name, pos, scene.RegionInfo.RegionName); 187 "[NPC MODULE]: Moving {0} to {1} in {2}", sp.Name, pos, scene.RegionInfo.RegionName);
146// 188
147// List<string> targetArgs = new List<string>(); 189 sp.DoMoveToPosition(0, pos, m_avatars[agentID]);
148// targetArgs.Add(pos.X);
149// targetArgs.Add(pos.Y);
150// targetArgs.Add(pos.Z);
151// sp.DoMoveToPosition(null, "NPC", targetArgs);
152// sp.DoMoveToPosition(0, pos, m_avatars[agentID]);
153 } 190 }
154 } 191 }
155 } 192 }