diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/EventManager.cs | 56 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 43 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | 7 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 124 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 293 |
5 files changed, 431 insertions, 92 deletions
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 753344d..399379e 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -183,12 +183,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
183 | 183 | ||
184 | public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent; | 184 | public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent; |
185 | 185 | ||
186 | public delegate void ScriptAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion atrot); | ||
187 | |||
188 | public event ScriptAtRotTargetEvent OnScriptAtRotTargetEvent; | ||
189 | |||
190 | public delegate void ScriptNotAtRotTargetEvent(uint localID); | ||
191 | |||
192 | public event ScriptNotAtRotTargetEvent OnScriptNotAtRotTargetEvent; | ||
193 | |||
186 | public delegate void ScriptColliding(uint localID, ColliderArgs colliders); | 194 | public delegate void ScriptColliding(uint localID, ColliderArgs colliders); |
187 | 195 | ||
188 | public event ScriptColliding OnScriptColliderStart; | 196 | public event ScriptColliding OnScriptColliderStart; |
189 | public event ScriptColliding OnScriptColliding; | 197 | public event ScriptColliding OnScriptColliding; |
190 | public event ScriptColliding OnScriptCollidingEnd; | 198 | public event ScriptColliding OnScriptCollidingEnd; |
191 | 199 | ||
200 | public event ScriptColliding OnScriptLandColliderStart; | ||
201 | public event ScriptColliding OnScriptLandColliding; | ||
202 | public event ScriptColliding OnScriptLandColliderEnd; | ||
203 | |||
192 | public delegate void OnMakeChildAgentDelegate(ScenePresence presence); | 204 | public delegate void OnMakeChildAgentDelegate(ScenePresence presence); |
193 | public event OnMakeChildAgentDelegate OnMakeChildAgent; | 205 | public event OnMakeChildAgentDelegate OnMakeChildAgent; |
194 | 206 | ||
@@ -380,6 +392,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
380 | private ScriptChangedEvent handlerScriptChangedEvent = null; //OnScriptChangedEvent; | 392 | private ScriptChangedEvent handlerScriptChangedEvent = null; //OnScriptChangedEvent; |
381 | private ScriptAtTargetEvent handlerScriptAtTargetEvent = null; | 393 | private ScriptAtTargetEvent handlerScriptAtTargetEvent = null; |
382 | private ScriptNotAtTargetEvent handlerScriptNotAtTargetEvent = null; | 394 | private ScriptNotAtTargetEvent handlerScriptNotAtTargetEvent = null; |
395 | private ScriptAtRotTargetEvent handlerScriptAtRotTargetEvent = null; | ||
396 | private ScriptNotAtRotTargetEvent handlerScriptNotAtRotTargetEvent = null; | ||
383 | private ClientMovement handlerClientMovement = null; //OnClientMovement; | 397 | private ClientMovement handlerClientMovement = null; //OnClientMovement; |
384 | private OnPermissionErrorDelegate handlerPermissionError = null; //OnPermissionError; | 398 | private OnPermissionErrorDelegate handlerPermissionError = null; //OnPermissionError; |
385 | private OnPluginConsoleDelegate handlerPluginConsole = null; //OnPluginConsole; | 399 | private OnPluginConsoleDelegate handlerPluginConsole = null; //OnPluginConsole; |
@@ -439,6 +453,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
439 | private ScriptColliding handlerCollidingStart = null; | 453 | private ScriptColliding handlerCollidingStart = null; |
440 | private ScriptColliding handlerColliding = null; | 454 | private ScriptColliding handlerColliding = null; |
441 | private ScriptColliding handlerCollidingEnd = null; | 455 | private ScriptColliding handlerCollidingEnd = null; |
456 | private ScriptColliding handlerLandCollidingStart = null; | ||
457 | private ScriptColliding handlerLandColliding = null; | ||
458 | private ScriptColliding handlerLandCollidingEnd = null; | ||
442 | private GetScriptRunning handlerGetScriptRunning = null; | 459 | private GetScriptRunning handlerGetScriptRunning = null; |
443 | 460 | ||
444 | private SunLindenHour handlerCurrentTimeAsLindenSunHour = null; | 461 | private SunLindenHour handlerCurrentTimeAsLindenSunHour = null; |
@@ -844,6 +861,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
844 | } | 861 | } |
845 | } | 862 | } |
846 | 863 | ||
864 | public void TriggerAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion currentrot) | ||
865 | { | ||
866 | handlerScriptAtRotTargetEvent = OnScriptAtRotTargetEvent; | ||
867 | if (handlerScriptAtRotTargetEvent != null) | ||
868 | { | ||
869 | handlerScriptAtRotTargetEvent(localID, handle, targetrot, currentrot); | ||
870 | } | ||
871 | } | ||
872 | |||
873 | public void TriggerNotAtRotTargetEvent(uint localID) | ||
874 | { | ||
875 | handlerScriptNotAtRotTargetEvent = OnScriptNotAtRotTargetEvent; | ||
876 | if (handlerScriptNotAtRotTargetEvent != null) | ||
877 | { | ||
878 | handlerScriptNotAtRotTargetEvent(localID); | ||
879 | } | ||
880 | } | ||
881 | |||
847 | public void TriggerRequestChangeWaterHeight(float height) | 882 | public void TriggerRequestChangeWaterHeight(float height) |
848 | { | 883 | { |
849 | handlerRequestChangeWaterHeight = OnRequestChangeWaterHeight; | 884 | handlerRequestChangeWaterHeight = OnRequestChangeWaterHeight; |
@@ -1034,6 +1069,27 @@ namespace OpenSim.Region.Framework.Scenes | |||
1034 | handlerCollidingEnd(localId, colliders); | 1069 | handlerCollidingEnd(localId, colliders); |
1035 | } | 1070 | } |
1036 | 1071 | ||
1072 | public void TriggerScriptLandCollidingStart(uint localId, ColliderArgs colliders) | ||
1073 | { | ||
1074 | handlerLandCollidingStart = OnScriptLandColliderStart; | ||
1075 | if (handlerLandCollidingStart != null) | ||
1076 | handlerLandCollidingStart(localId, colliders); | ||
1077 | } | ||
1078 | |||
1079 | public void TriggerScriptLandColliding(uint localId, ColliderArgs colliders) | ||
1080 | { | ||
1081 | handlerLandColliding = OnScriptLandColliding; | ||
1082 | if (handlerLandColliding != null) | ||
1083 | handlerLandColliding(localId, colliders); | ||
1084 | } | ||
1085 | |||
1086 | public void TriggerScriptLandCollidingEnd(uint localId, ColliderArgs colliders) | ||
1087 | { | ||
1088 | handlerLandCollidingEnd = OnScriptLandColliderEnd; | ||
1089 | if (handlerLandCollidingEnd != null) | ||
1090 | handlerLandCollidingEnd(localId, colliders); | ||
1091 | } | ||
1092 | |||
1037 | public void TriggerSetRootAgentScene(UUID agentID, Scene scene) | 1093 | public void TriggerSetRootAgentScene(UUID agentID, Scene scene) |
1038 | { | 1094 | { |
1039 | handlerSetRootAgentScene = OnSetRootAgentScene; | 1095 | handlerSetRootAgentScene = OnSetRootAgentScene; |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 764ac60..bc9301b 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -144,7 +144,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
144 | public CommunicationsManager CommsManager; | 144 | public CommunicationsManager CommsManager; |
145 | 145 | ||
146 | protected SceneCommunicationService m_sceneGridService; | 146 | protected SceneCommunicationService m_sceneGridService; |
147 | public bool loginsdisabled = true; | 147 | public bool LoginsDisabled = true; |
148 | 148 | ||
149 | public new float TimeDilation | 149 | public new float TimeDilation |
150 | { | 150 | { |
@@ -1275,15 +1275,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
1275 | StatsReporter.addScriptLines(m_sceneGraph.GetScriptLPS()); | 1275 | StatsReporter.addScriptLines(m_sceneGraph.GetScriptLPS()); |
1276 | } | 1276 | } |
1277 | 1277 | ||
1278 | if (loginsdisabled && m_frame > 20) | 1278 | if (LoginsDisabled && m_frame == 20) |
1279 | { | 1279 | { |
1280 | // In 99.9% of cases it is a bad idea to manually force garbage collection. However, | 1280 | // In 99.9% of cases it is a bad idea to manually force garbage collection. However, |
1281 | // this is a rare case where we know we have just went through a long cycle of heap | 1281 | // this is a rare case where we know we have just went through a long cycle of heap |
1282 | // allocations, and there is no more work to be done until someone logs in | 1282 | // allocations, and there is no more work to be done until someone logs in |
1283 | GC.Collect(); | 1283 | GC.Collect(); |
1284 | 1284 | ||
1285 | m_log.DebugFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName); | 1285 | IConfig startupConfig = m_config.Configs["Startup"]; |
1286 | loginsdisabled = false; | 1286 | if (startupConfig == null || !startupConfig.GetBoolean("StartDisabled", false)) |
1287 | { | ||
1288 | m_log.DebugFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName); | ||
1289 | LoginsDisabled = false; | ||
1290 | } | ||
1287 | } | 1291 | } |
1288 | } | 1292 | } |
1289 | catch (NotImplementedException) | 1293 | catch (NotImplementedException) |
@@ -3348,7 +3352,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3348 | // TeleportFlags.ViaLandmark | TeleportFlags.ViaLocation | TeleportFlags.ViaLandmark | TeleportFlags.Default - Regular Teleport | 3352 | // TeleportFlags.ViaLandmark | TeleportFlags.ViaLocation | TeleportFlags.ViaLandmark | TeleportFlags.Default - Regular Teleport |
3349 | 3353 | ||
3350 | 3354 | ||
3351 | if (loginsdisabled) | 3355 | if (LoginsDisabled) |
3352 | { | 3356 | { |
3353 | reason = "Logins Disabled"; | 3357 | reason = "Logins Disabled"; |
3354 | return false; | 3358 | return false; |
@@ -3525,8 +3529,35 @@ namespace OpenSim.Region.Framework.Scenes | |||
3525 | return false; | 3529 | return false; |
3526 | } | 3530 | } |
3527 | 3531 | ||
3532 | IGroupsModule groupsModule = | ||
3533 | RequestModuleInterface<IGroupsModule>(); | ||
3534 | |||
3535 | List<UUID> agentGroups = new List<UUID>(); | ||
3536 | |||
3537 | if (groupsModule != null) | ||
3538 | { | ||
3539 | GroupMembershipData[] GroupMembership = | ||
3540 | groupsModule.GetMembershipData(agent.AgentID); | ||
3541 | |||
3542 | for (int i = 0; i < GroupMembership.Length; i++) | ||
3543 | agentGroups.Add(GroupMembership[i].GroupID); | ||
3544 | } | ||
3545 | |||
3546 | bool groupAccess = false; | ||
3547 | UUID[] estateGroups = m_regInfo.EstateSettings.EstateGroups; | ||
3548 | |||
3549 | foreach (UUID group in estateGroups) | ||
3550 | { | ||
3551 | if (agentGroups.Contains(group)) | ||
3552 | { | ||
3553 | groupAccess = true; | ||
3554 | break; | ||
3555 | } | ||
3556 | } | ||
3557 | |||
3528 | if (!m_regInfo.EstateSettings.PublicAccess && | 3558 | if (!m_regInfo.EstateSettings.PublicAccess && |
3529 | !m_regInfo.EstateSettings.HasAccess(agent.AgentID)) | 3559 | !m_regInfo.EstateSettings.HasAccess(agent.AgentID) && |
3560 | !groupAccess) | ||
3530 | { | 3561 | { |
3531 | m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because the user does not have access to the estate", | 3562 | m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because the user does not have access to the estate", |
3532 | agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName); | 3563 | agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index f49d072..6164368 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | |||
@@ -65,13 +65,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
65 | 65 | ||
66 | protected List<UUID> m_agentsInTransit; | 66 | protected List<UUID> m_agentsInTransit; |
67 | 67 | ||
68 | public bool RegionLoginsEnabled | ||
69 | { | ||
70 | get { return m_regionLoginsEnabled; } | ||
71 | set { m_regionLoginsEnabled = value; } | ||
72 | } | ||
73 | private bool m_regionLoginsEnabled = false; | ||
74 | |||
75 | /// <summary> | 68 | /// <summary> |
76 | /// An agent is crossing into this region | 69 | /// An agent is crossing into this region |
77 | /// </summary> | 70 | /// </summary> |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 34d8b49..ec41ac7 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -57,6 +57,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
57 | land_collision_end = 4096, | 57 | land_collision_end = 4096, |
58 | land_collision_start = 8192, | 58 | land_collision_start = 8192, |
59 | at_target = 16384, | 59 | at_target = 16384, |
60 | at_rot_target = 16777216, | ||
60 | listen = 32768, | 61 | listen = 32768, |
61 | money = 65536, | 62 | money = 65536, |
62 | moving_end = 131072, | 63 | moving_end = 131072, |
@@ -81,6 +82,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
81 | public uint handle; | 82 | public uint handle; |
82 | } | 83 | } |
83 | 84 | ||
85 | struct scriptRotTarget | ||
86 | { | ||
87 | public Quaternion targetRot; | ||
88 | public float tolerance; | ||
89 | public uint handle; | ||
90 | } | ||
91 | |||
84 | public delegate void PrimCountTaintedDelegate(); | 92 | public delegate void PrimCountTaintedDelegate(); |
85 | 93 | ||
86 | /// <summary> | 94 | /// <summary> |
@@ -166,10 +174,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
166 | // private Dictionary<UUID, scriptEvents> m_scriptEvents = new Dictionary<UUID, scriptEvents>(); | 174 | // private Dictionary<UUID, scriptEvents> m_scriptEvents = new Dictionary<UUID, scriptEvents>(); |
167 | 175 | ||
168 | private Dictionary<uint, scriptPosTarget> m_targets = new Dictionary<uint, scriptPosTarget>(); | 176 | private Dictionary<uint, scriptPosTarget> m_targets = new Dictionary<uint, scriptPosTarget>(); |
177 | private Dictionary<uint, scriptRotTarget> m_rotTargets = new Dictionary<uint, scriptRotTarget>(); | ||
169 | 178 | ||
170 | private bool m_scriptListens_atTarget = false; | 179 | private bool m_scriptListens_atTarget = false; |
171 | private bool m_scriptListens_notAtTarget = false; | 180 | private bool m_scriptListens_notAtTarget = false; |
172 | 181 | ||
182 | private bool m_scriptListens_atRotTarget = false; | ||
183 | private bool m_scriptListens_notAtRotTarget = false; | ||
184 | |||
173 | internal Dictionary<UUID, string> m_savedScriptState = null; | 185 | internal Dictionary<UUID, string> m_savedScriptState = null; |
174 | 186 | ||
175 | #region Properties | 187 | #region Properties |
@@ -1262,6 +1274,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
1262 | m_targets.Clear(); | 1274 | m_targets.Clear(); |
1263 | m_scene.RemoveGroupTarget(this); | 1275 | m_scene.RemoveGroupTarget(this); |
1264 | } | 1276 | } |
1277 | m_scriptListens_atRotTarget = ((aggregateScriptEvents & scriptEvents.at_rot_target) != 0); | ||
1278 | m_scriptListens_notAtRotTarget = ((aggregateScriptEvents & scriptEvents.not_at_rot_target) != 0); | ||
1279 | |||
1280 | if (!m_scriptListens_atRotTarget && !m_scriptListens_notAtRotTarget) | ||
1281 | { | ||
1282 | lock (m_rotTargets) | ||
1283 | m_rotTargets.Clear(); | ||
1284 | m_scene.RemoveGroupTarget(this); | ||
1285 | } | ||
1265 | 1286 | ||
1266 | ScheduleGroupForFullUpdate(); | 1287 | ScheduleGroupForFullUpdate(); |
1267 | } | 1288 | } |
@@ -3158,6 +3179,30 @@ namespace OpenSim.Region.Framework.Scenes | |||
3158 | 3179 | ||
3159 | } | 3180 | } |
3160 | } | 3181 | } |
3182 | public int registerRotTargetWaypoint(Quaternion target, float tolerance) | ||
3183 | { | ||
3184 | scriptRotTarget waypoint = new scriptRotTarget(); | ||
3185 | waypoint.targetRot = target; | ||
3186 | waypoint.tolerance = tolerance; | ||
3187 | uint handle = m_scene.AllocateLocalId(); | ||
3188 | waypoint.handle = handle; | ||
3189 | lock (m_rotTargets) | ||
3190 | { | ||
3191 | m_rotTargets.Add(handle, waypoint); | ||
3192 | } | ||
3193 | m_scene.AddGroupTarget(this); | ||
3194 | return (int)handle; | ||
3195 | } | ||
3196 | |||
3197 | public void unregisterRotTargetWaypoint(int handle) | ||
3198 | { | ||
3199 | lock (m_targets) | ||
3200 | { | ||
3201 | m_rotTargets.Remove((uint)handle); | ||
3202 | if (m_targets.Count == 0) | ||
3203 | m_scene.RemoveGroupTarget(this); | ||
3204 | } | ||
3205 | } | ||
3161 | 3206 | ||
3162 | public int registerTargetWaypoint(Vector3 target, float tolerance) | 3207 | public int registerTargetWaypoint(Vector3 target, float tolerance) |
3163 | { | 3208 | { |
@@ -3264,6 +3309,85 @@ namespace OpenSim.Region.Framework.Scenes | |||
3264 | } | 3309 | } |
3265 | } | 3310 | } |
3266 | } | 3311 | } |
3312 | if (m_scriptListens_atRotTarget || m_scriptListens_notAtRotTarget) | ||
3313 | { | ||
3314 | if (m_rotTargets.Count > 0) | ||
3315 | { | ||
3316 | bool at_Rottarget = false; | ||
3317 | Dictionary<uint, scriptRotTarget> atRotTargets = new Dictionary<uint, scriptRotTarget>(); | ||
3318 | lock (m_rotTargets) | ||
3319 | { | ||
3320 | foreach (uint idx in m_rotTargets.Keys) | ||
3321 | { | ||
3322 | scriptRotTarget target = m_rotTargets[idx]; | ||
3323 | double angle = Math.Acos(target.targetRot.X * m_rootPart.RotationOffset.X + target.targetRot.Y * m_rootPart.RotationOffset.Y + target.targetRot.Z * m_rootPart.RotationOffset.Z + target.targetRot.W * m_rootPart.RotationOffset.W) * 2; | ||
3324 | if (angle < 0) angle = -angle; | ||
3325 | if (angle > Math.PI) angle = (Math.PI * 2 - angle); | ||
3326 | if (angle <= target.tolerance) | ||
3327 | { | ||
3328 | // trigger at_rot_target | ||
3329 | if (m_scriptListens_atRotTarget) | ||
3330 | { | ||
3331 | at_Rottarget = true; | ||
3332 | scriptRotTarget att = new scriptRotTarget(); | ||
3333 | att.targetRot = target.targetRot; | ||
3334 | att.tolerance = target.tolerance; | ||
3335 | att.handle = target.handle; | ||
3336 | atRotTargets.Add(idx, att); | ||
3337 | } | ||
3338 | } | ||
3339 | } | ||
3340 | } | ||
3341 | |||
3342 | if (atRotTargets.Count > 0) | ||
3343 | { | ||
3344 | uint[] localids = new uint[0]; | ||
3345 | lock (m_parts) | ||
3346 | { | ||
3347 | localids = new uint[m_parts.Count]; | ||
3348 | int cntr = 0; | ||
3349 | foreach (SceneObjectPart part in m_parts.Values) | ||
3350 | { | ||
3351 | localids[cntr] = part.LocalId; | ||
3352 | cntr++; | ||
3353 | } | ||
3354 | } | ||
3355 | |||
3356 | for (int ctr = 0; ctr < localids.Length; ctr++) | ||
3357 | { | ||
3358 | foreach (uint target in atRotTargets.Keys) | ||
3359 | { | ||
3360 | scriptRotTarget att = atRotTargets[target]; | ||
3361 | m_scene.EventManager.TriggerAtRotTargetEvent( | ||
3362 | localids[ctr], att.handle, att.targetRot, m_rootPart.RotationOffset); | ||
3363 | } | ||
3364 | } | ||
3365 | |||
3366 | return; | ||
3367 | } | ||
3368 | |||
3369 | if (m_scriptListens_notAtRotTarget && !at_Rottarget) | ||
3370 | { | ||
3371 | //trigger not_at_target | ||
3372 | uint[] localids = new uint[0]; | ||
3373 | lock (m_parts) | ||
3374 | { | ||
3375 | localids = new uint[m_parts.Count]; | ||
3376 | int cntr = 0; | ||
3377 | foreach (SceneObjectPart part in m_parts.Values) | ||
3378 | { | ||
3379 | localids[cntr] = part.LocalId; | ||
3380 | cntr++; | ||
3381 | } | ||
3382 | } | ||
3383 | |||
3384 | for (int ctr = 0; ctr < localids.Length; ctr++) | ||
3385 | { | ||
3386 | m_scene.EventManager.TriggerNotAtRotTargetEvent(localids[ctr]); | ||
3387 | } | ||
3388 | } | ||
3389 | } | ||
3390 | } | ||
3267 | } | 3391 | } |
3268 | 3392 | ||
3269 | public float GetMass() | 3393 | public float GetMass() |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index d1bc351..56b2f13 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -139,15 +139,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
139 | public uint TimeStampTerse; | 139 | public uint TimeStampTerse; |
140 | 140 | ||
141 | [XmlIgnore] | 141 | [XmlIgnore] |
142 | public UUID FromItemID; | 142 | public UUID FromItemID; |
143 | 143 | ||
144 | [XmlIgnore] | 144 | [XmlIgnore] |
145 | public int STATUS_ROTATE_X; | 145 | public int STATUS_ROTATE_X; |
146 | 146 | ||
147 | [XmlIgnore] | 147 | [XmlIgnore] |
148 | public int STATUS_ROTATE_Y; | 148 | public int STATUS_ROTATE_Y; |
149 | 149 | ||
150 | [XmlIgnore] | 150 | [XmlIgnore] |
151 | public int STATUS_ROTATE_Z; | 151 | public int STATUS_ROTATE_Z; |
152 | 152 | ||
153 | [XmlIgnore] | 153 | [XmlIgnore] |
@@ -1680,19 +1680,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
1680 | return false; | 1680 | return false; |
1681 | 1681 | ||
1682 | return m_parentGroup.RootPart.DIE_AT_EDGE; | 1682 | return m_parentGroup.RootPart.DIE_AT_EDGE; |
1683 | } | 1683 | } |
1684 | 1684 | ||
1685 | public int GetAxisRotation(int axis) | 1685 | public int GetAxisRotation(int axis) |
1686 | { | 1686 | { |
1687 | //Cannot use ScriptBaseClass constants as no referance to it currently. | 1687 | //Cannot use ScriptBaseClass constants as no referance to it currently. |
1688 | if (axis == 2)//STATUS_ROTATE_X | 1688 | if (axis == 2)//STATUS_ROTATE_X |
1689 | return STATUS_ROTATE_X; | 1689 | return STATUS_ROTATE_X; |
1690 | if (axis == 4)//STATUS_ROTATE_Y | 1690 | if (axis == 4)//STATUS_ROTATE_Y |
1691 | return STATUS_ROTATE_Y; | 1691 | return STATUS_ROTATE_Y; |
1692 | if (axis == 8)//STATUS_ROTATE_Z | 1692 | if (axis == 8)//STATUS_ROTATE_Z |
1693 | return STATUS_ROTATE_Z; | 1693 | return STATUS_ROTATE_Z; |
1694 | 1694 | ||
1695 | return 0; | 1695 | return 0; |
1696 | } | 1696 | } |
1697 | 1697 | ||
1698 | public double GetDistanceTo(Vector3 a, Vector3 b) | 1698 | public double GetDistanceTo(Vector3 a, Vector3 b) |
@@ -1853,16 +1853,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1853 | // and build up list of colliders this time | 1853 | // and build up list of colliders this time |
1854 | foreach (uint localid in collissionswith.Keys) | 1854 | foreach (uint localid in collissionswith.Keys) |
1855 | { | 1855 | { |
1856 | if (localid != 0) | 1856 | thisHitColliders.Add(localid); |
1857 | if (!m_lastColliders.Contains(localid)) | ||
1857 | { | 1858 | { |
1858 | thisHitColliders.Add(localid); | 1859 | startedColliders.Add(localid); |
1859 | if (!m_lastColliders.Contains(localid)) | ||
1860 | { | ||
1861 | startedColliders.Add(localid); | ||
1862 | } | ||
1863 | |||
1864 | //m_log.Debug("[OBJECT]: Collided with:" + localid.ToString() + " at depth of: " + collissionswith[localid].ToString()); | ||
1865 | } | 1860 | } |
1861 | //m_log.Debug("[OBJECT]: Collided with:" + localid.ToString() + " at depth of: " + collissionswith[localid].ToString()); | ||
1866 | } | 1862 | } |
1867 | 1863 | ||
1868 | // calculate things that ended colliding | 1864 | // calculate things that ended colliding |
@@ -1904,6 +1900,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1904 | List<DetectedObject> colliding = new List<DetectedObject>(); | 1900 | List<DetectedObject> colliding = new List<DetectedObject>(); |
1905 | foreach (uint localId in startedColliders) | 1901 | foreach (uint localId in startedColliders) |
1906 | { | 1902 | { |
1903 | if (localId == 0) | ||
1904 | return; | ||
1907 | // always running this check because if the user deletes the object it would return a null reference. | 1905 | // always running this check because if the user deletes the object it would return a null reference. |
1908 | if (m_parentGroup == null) | 1906 | if (m_parentGroup == null) |
1909 | return; | 1907 | return; |
@@ -1936,24 +1934,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
1936 | else | 1934 | else |
1937 | { | 1935 | { |
1938 | } | 1936 | } |
1939 | } | 1937 | } |
1940 | else | 1938 | else |
1941 | { | 1939 | { |
1942 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 1940 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
1943 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work | 1941 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work |
1944 | if (found) | 1942 | if (!found) |
1945 | { | 1943 | { |
1946 | DetectedObject detobj = new DetectedObject(); | 1944 | DetectedObject detobj = new DetectedObject(); |
1947 | detobj.keyUUID = obj.UUID; | 1945 | detobj.keyUUID = obj.UUID; |
1948 | detobj.nameStr = obj.Name; | 1946 | detobj.nameStr = obj.Name; |
1949 | detobj.ownerUUID = obj._ownerID; | 1947 | detobj.ownerUUID = obj._ownerID; |
1950 | detobj.posVector = obj.AbsolutePosition; | 1948 | detobj.posVector = obj.AbsolutePosition; |
1951 | detobj.rotQuat = obj.GetWorldRotation(); | 1949 | detobj.rotQuat = obj.GetWorldRotation(); |
1952 | detobj.velVector = obj.Velocity; | 1950 | detobj.velVector = obj.Velocity; |
1953 | detobj.colliderType = 0; | 1951 | detobj.colliderType = 0; |
1954 | detobj.groupUUID = obj._groupID; | 1952 | detobj.groupUUID = obj._groupID; |
1955 | colliding.Add(detobj); | 1953 | colliding.Add(detobj); |
1956 | } | 1954 | } |
1957 | } | 1955 | } |
1958 | } | 1956 | } |
1959 | else | 1957 | else |
@@ -1965,7 +1963,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1965 | ScenePresence av = avlist[i]; | 1963 | ScenePresence av = avlist[i]; |
1966 | 1964 | ||
1967 | if (av.LocalId == localId) | 1965 | if (av.LocalId == localId) |
1968 | { | 1966 | { |
1969 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) | 1967 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) |
1970 | { | 1968 | { |
1971 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 1969 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
@@ -1987,24 +1985,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
1987 | else | 1985 | else |
1988 | { | 1986 | { |
1989 | } | 1987 | } |
1990 | } | 1988 | } |
1991 | else | 1989 | else |
1992 | { | 1990 | { |
1993 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 1991 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
1994 | //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work | 1992 | //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work |
1995 | if (!found) | 1993 | if (!found) |
1996 | { | 1994 | { |
1997 | DetectedObject detobj = new DetectedObject(); | 1995 | DetectedObject detobj = new DetectedObject(); |
1998 | detobj.keyUUID = av.UUID; | 1996 | detobj.keyUUID = av.UUID; |
1999 | detobj.nameStr = av.ControllingClient.Name; | 1997 | detobj.nameStr = av.ControllingClient.Name; |
2000 | detobj.ownerUUID = av.UUID; | 1998 | detobj.ownerUUID = av.UUID; |
2001 | detobj.posVector = av.AbsolutePosition; | 1999 | detobj.posVector = av.AbsolutePosition; |
2002 | detobj.rotQuat = av.Rotation; | 2000 | detobj.rotQuat = av.Rotation; |
2003 | detobj.velVector = av.Velocity; | 2001 | detobj.velVector = av.Velocity; |
2004 | detobj.colliderType = 0; | 2002 | detobj.colliderType = 0; |
2005 | detobj.groupUUID = av.ControllingClient.ActiveGroupId; | 2003 | detobj.groupUUID = av.ControllingClient.ActiveGroupId; |
2006 | colliding.Add(detobj); | 2004 | colliding.Add(detobj); |
2007 | } | 2005 | } |
2008 | } | 2006 | } |
2009 | 2007 | ||
2010 | } | 2008 | } |
@@ -2039,7 +2037,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2039 | { | 2037 | { |
2040 | // always running this check because if the user deletes the object it would return a null reference. | 2038 | // always running this check because if the user deletes the object it would return a null reference. |
2041 | if (localId == 0) | 2039 | if (localId == 0) |
2042 | continue; | 2040 | return; |
2043 | 2041 | ||
2044 | if (m_parentGroup == null) | 2042 | if (m_parentGroup == null) |
2045 | return; | 2043 | return; |
@@ -2077,7 +2075,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2077 | { | 2075 | { |
2078 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2076 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2079 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work | 2077 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work |
2080 | if (found) | 2078 | if (!found) |
2081 | { | 2079 | { |
2082 | DetectedObject detobj = new DetectedObject(); | 2080 | DetectedObject detobj = new DetectedObject(); |
2083 | detobj.keyUUID = obj.UUID; | 2081 | detobj.keyUUID = obj.UUID; |
@@ -2101,7 +2099,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2101 | ScenePresence av = avlist[i]; | 2099 | ScenePresence av = avlist[i]; |
2102 | 2100 | ||
2103 | if (av.LocalId == localId) | 2101 | if (av.LocalId == localId) |
2104 | { | 2102 | { |
2105 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) | 2103 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) |
2106 | { | 2104 | { |
2107 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2105 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
@@ -2171,7 +2169,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2171 | foreach (uint localId in endedColliders) | 2169 | foreach (uint localId in endedColliders) |
2172 | { | 2170 | { |
2173 | if (localId == 0) | 2171 | if (localId == 0) |
2174 | continue; | 2172 | return; |
2175 | 2173 | ||
2176 | // always running this check because if the user deletes the object it would return a null reference. | 2174 | // always running this check because if the user deletes the object it would return a null reference. |
2177 | if (m_parentGroup == null) | 2175 | if (m_parentGroup == null) |
@@ -2208,7 +2206,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2208 | { | 2206 | { |
2209 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2207 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2210 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work | 2208 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work |
2211 | if (found) | 2209 | if (!found) |
2212 | { | 2210 | { |
2213 | DetectedObject detobj = new DetectedObject(); | 2211 | DetectedObject detobj = new DetectedObject(); |
2214 | detobj.keyUUID = obj.UUID; | 2212 | detobj.keyUUID = obj.UUID; |
@@ -2232,7 +2230,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2232 | ScenePresence av = avlist[i]; | 2230 | ScenePresence av = avlist[i]; |
2233 | 2231 | ||
2234 | if (av.LocalId == localId) | 2232 | if (av.LocalId == localId) |
2235 | { | 2233 | { |
2236 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) | 2234 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) |
2237 | { | 2235 | { |
2238 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2236 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
@@ -2292,7 +2290,121 @@ namespace OpenSim.Region.Framework.Scenes | |||
2292 | m_parentGroup.Scene.EventManager.TriggerScriptCollidingEnd(LocalId, EndCollidingMessage); | 2290 | m_parentGroup.Scene.EventManager.TriggerScriptCollidingEnd(LocalId, EndCollidingMessage); |
2293 | } | 2291 | } |
2294 | } | 2292 | } |
2295 | } | 2293 | } |
2294 | if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_start) != 0) | ||
2295 | { | ||
2296 | if (startedColliders.Count > 0) | ||
2297 | { | ||
2298 | ColliderArgs LandStartCollidingMessage = new ColliderArgs(); | ||
2299 | List<DetectedObject> colliding = new List<DetectedObject>(); | ||
2300 | foreach (uint localId in startedColliders) | ||
2301 | { | ||
2302 | if (localId == 0) | ||
2303 | { | ||
2304 | //Hope that all is left is ground! | ||
2305 | DetectedObject detobj = new DetectedObject(); | ||
2306 | detobj.keyUUID = UUID.Zero; | ||
2307 | detobj.nameStr = ""; | ||
2308 | detobj.ownerUUID = UUID.Zero; | ||
2309 | detobj.posVector = m_parentGroup.RootPart.AbsolutePosition; | ||
2310 | detobj.rotQuat = Quaternion.Identity; | ||
2311 | detobj.velVector = Vector3.Zero; | ||
2312 | detobj.colliderType = 0; | ||
2313 | detobj.groupUUID = UUID.Zero; | ||
2314 | colliding.Add(detobj); | ||
2315 | } | ||
2316 | } | ||
2317 | |||
2318 | if (colliding.Count > 0) | ||
2319 | { | ||
2320 | LandStartCollidingMessage.Colliders = colliding; | ||
2321 | // always running this check because if the user deletes the object it would return a null reference. | ||
2322 | if (m_parentGroup == null) | ||
2323 | return; | ||
2324 | |||
2325 | if (m_parentGroup.Scene == null) | ||
2326 | return; | ||
2327 | |||
2328 | m_parentGroup.Scene.EventManager.TriggerScriptLandCollidingStart(LocalId, LandStartCollidingMessage); | ||
2329 | } | ||
2330 | } | ||
2331 | } | ||
2332 | if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision) != 0) | ||
2333 | { | ||
2334 | if (m_lastColliders.Count > 0) | ||
2335 | { | ||
2336 | ColliderArgs LandCollidingMessage = new ColliderArgs(); | ||
2337 | List<DetectedObject> colliding = new List<DetectedObject>(); | ||
2338 | foreach (uint localId in startedColliders) | ||
2339 | { | ||
2340 | if (localId == 0) | ||
2341 | { | ||
2342 | //Hope that all is left is ground! | ||
2343 | DetectedObject detobj = new DetectedObject(); | ||
2344 | detobj.keyUUID = UUID.Zero; | ||
2345 | detobj.nameStr = ""; | ||
2346 | detobj.ownerUUID = UUID.Zero; | ||
2347 | detobj.posVector = m_parentGroup.RootPart.AbsolutePosition; | ||
2348 | detobj.rotQuat = Quaternion.Identity; | ||
2349 | detobj.velVector = Vector3.Zero; | ||
2350 | detobj.colliderType = 0; | ||
2351 | detobj.groupUUID = UUID.Zero; | ||
2352 | colliding.Add(detobj); | ||
2353 | } | ||
2354 | } | ||
2355 | |||
2356 | if (colliding.Count > 0) | ||
2357 | { | ||
2358 | LandCollidingMessage.Colliders = colliding; | ||
2359 | // always running this check because if the user deletes the object it would return a null reference. | ||
2360 | if (m_parentGroup == null) | ||
2361 | return; | ||
2362 | |||
2363 | if (m_parentGroup.Scene == null) | ||
2364 | return; | ||
2365 | |||
2366 | m_parentGroup.Scene.EventManager.TriggerScriptLandColliding(LocalId, LandCollidingMessage); | ||
2367 | } | ||
2368 | } | ||
2369 | } | ||
2370 | if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_end) != 0) | ||
2371 | { | ||
2372 | if (endedColliders.Count > 0) | ||
2373 | { | ||
2374 | ColliderArgs LandEndCollidingMessage = new ColliderArgs(); | ||
2375 | List<DetectedObject> colliding = new List<DetectedObject>(); | ||
2376 | foreach (uint localId in startedColliders) | ||
2377 | { | ||
2378 | if (localId == 0) | ||
2379 | { | ||
2380 | //Hope that all is left is ground! | ||
2381 | DetectedObject detobj = new DetectedObject(); | ||
2382 | detobj.keyUUID = UUID.Zero; | ||
2383 | detobj.nameStr = ""; | ||
2384 | detobj.ownerUUID = UUID.Zero; | ||
2385 | detobj.posVector = m_parentGroup.RootPart.AbsolutePosition; | ||
2386 | detobj.rotQuat = Quaternion.Identity; | ||
2387 | detobj.velVector = Vector3.Zero; | ||
2388 | detobj.colliderType = 0; | ||
2389 | detobj.groupUUID = UUID.Zero; | ||
2390 | colliding.Add(detobj); | ||
2391 | } | ||
2392 | } | ||
2393 | |||
2394 | if (colliding.Count > 0) | ||
2395 | { | ||
2396 | LandEndCollidingMessage.Colliders = colliding; | ||
2397 | // always running this check because if the user deletes the object it would return a null reference. | ||
2398 | if (m_parentGroup == null) | ||
2399 | return; | ||
2400 | |||
2401 | if (m_parentGroup.Scene == null) | ||
2402 | return; | ||
2403 | |||
2404 | m_parentGroup.Scene.EventManager.TriggerScriptLandCollidingEnd(LocalId, LandEndCollidingMessage); | ||
2405 | } | ||
2406 | } | ||
2407 | } | ||
2296 | } | 2408 | } |
2297 | 2409 | ||
2298 | public void PhysicsOutOfBounds(Vector3 pos) | 2410 | public void PhysicsOutOfBounds(Vector3 pos) |
@@ -2758,13 +2870,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
2758 | if (m_parentGroup != null) | 2870 | if (m_parentGroup != null) |
2759 | { | 2871 | { |
2760 | m_parentGroup.SetAxisRotation(axis, rotate); | 2872 | m_parentGroup.SetAxisRotation(axis, rotate); |
2761 | } | 2873 | } |
2762 | //Cannot use ScriptBaseClass constants as no referance to it currently. | 2874 | //Cannot use ScriptBaseClass constants as no referance to it currently. |
2763 | if (axis == 2)//STATUS_ROTATE_X | 2875 | if (axis == 2)//STATUS_ROTATE_X |
2764 | STATUS_ROTATE_X = rotate; | 2876 | STATUS_ROTATE_X = rotate; |
2765 | if (axis == 4)//STATUS_ROTATE_Y | 2877 | if (axis == 4)//STATUS_ROTATE_Y |
2766 | STATUS_ROTATE_Y = rotate; | 2878 | STATUS_ROTATE_Y = rotate; |
2767 | if (axis == 8)//STATUS_ROTATE_Z | 2879 | if (axis == 8)//STATUS_ROTATE_Z |
2768 | STATUS_ROTATE_Z = rotate; | 2880 | STATUS_ROTATE_Z = rotate; |
2769 | } | 2881 | } |
2770 | 2882 | ||
@@ -3698,6 +3810,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3698 | ((AggregateScriptEvents & scriptEvents.collision) != 0) || | 3810 | ((AggregateScriptEvents & scriptEvents.collision) != 0) || |
3699 | ((AggregateScriptEvents & scriptEvents.collision_end) != 0) || | 3811 | ((AggregateScriptEvents & scriptEvents.collision_end) != 0) || |
3700 | ((AggregateScriptEvents & scriptEvents.collision_start) != 0) || | 3812 | ((AggregateScriptEvents & scriptEvents.collision_start) != 0) || |
3813 | ((AggregateScriptEvents & scriptEvents.land_collision_start) != 0) || | ||
3814 | ((AggregateScriptEvents & scriptEvents.land_collision) != 0) || | ||
3815 | ((AggregateScriptEvents & scriptEvents.land_collision_end) != 0) || | ||
3701 | (CollisionSound != UUID.Zero) | 3816 | (CollisionSound != UUID.Zero) |
3702 | ) | 3817 | ) |
3703 | { | 3818 | { |
@@ -3902,6 +4017,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3902 | ((AggregateScriptEvents & scriptEvents.collision) != 0) || | 4017 | ((AggregateScriptEvents & scriptEvents.collision) != 0) || |
3903 | ((AggregateScriptEvents & scriptEvents.collision_end) != 0) || | 4018 | ((AggregateScriptEvents & scriptEvents.collision_end) != 0) || |
3904 | ((AggregateScriptEvents & scriptEvents.collision_start) != 0) || | 4019 | ((AggregateScriptEvents & scriptEvents.collision_start) != 0) || |
4020 | ((AggregateScriptEvents & scriptEvents.land_collision_start) != 0) || | ||
4021 | ((AggregateScriptEvents & scriptEvents.land_collision) != 0) || | ||
4022 | ((AggregateScriptEvents & scriptEvents.land_collision_end) != 0) || | ||
3905 | (CollisionSound != UUID.Zero) | 4023 | (CollisionSound != UUID.Zero) |
3906 | ) | 4024 | ) |
3907 | { | 4025 | { |
@@ -3962,6 +4080,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
3962 | } | 4080 | } |
3963 | } | 4081 | } |
3964 | 4082 | ||
4083 | public int registerRotTargetWaypoint(Quaternion target, float tolerance) | ||
4084 | { | ||
4085 | if (m_parentGroup != null) | ||
4086 | { | ||
4087 | return m_parentGroup.registerRotTargetWaypoint(target, tolerance); | ||
4088 | } | ||
4089 | return 0; | ||
4090 | } | ||
4091 | |||
4092 | public void unregisterRotTargetWaypoint(int handle) | ||
4093 | { | ||
4094 | if (m_parentGroup != null) | ||
4095 | { | ||
4096 | m_parentGroup.unregisterRotTargetWaypoint(handle); | ||
4097 | } | ||
4098 | } | ||
4099 | |||
3965 | public void SetCameraAtOffset(Vector3 v) | 4100 | public void SetCameraAtOffset(Vector3 v) |
3966 | { | 4101 | { |
3967 | m_cameraAtOffset = v; | 4102 | m_cameraAtOffset = v; |