diff options
author | Melanie | 2012-12-22 01:04:49 +0100 |
---|---|---|
committer | Melanie | 2012-12-22 01:04:49 +0100 |
commit | 2313a86e327c895667b133af785e1bd13233ffa2 (patch) | |
tree | 6180c1546b9f911b81fcaa50f1bb587611135ce3 /OpenSim/Region/Framework | |
parent | * Partial Commit for Avatar Appearance to include the functionality of Cached... (diff) | |
parent | Merge branch 'avination' into ubitwork (diff) | |
download | opensim-SC-2313a86e327c895667b133af785e1bd13233ffa2.zip opensim-SC-2313a86e327c895667b133af785e1bd13233ffa2.tar.gz opensim-SC-2313a86e327c895667b133af785e1bd13233ffa2.tar.bz2 opensim-SC-2313a86e327c895667b133af785e1bd13233ffa2.tar.xz |
Merge branch 'ubitwork' into avination
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 93 |
1 files changed, 46 insertions, 47 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index ff9df37..85f4ee5 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -2109,9 +2109,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2109 | if (part == null) | 2109 | if (part == null) |
2110 | return; | 2110 | return; |
2111 | 2111 | ||
2112 | // TODO: determine position to sit at based on scene geometry; don't trust offset from client | ||
2113 | // see http://wiki.secondlife.com/wiki/User:Andrew_Linden/Office_Hours/2007_11_06 for details on how LL does it | ||
2114 | |||
2115 | if (PhysicsActor != null) | 2112 | if (PhysicsActor != null) |
2116 | m_sitAvatarHeight = PhysicsActor.Size.Z * 0.5f; | 2113 | m_sitAvatarHeight = PhysicsActor.Size.Z * 0.5f; |
2117 | 2114 | ||
@@ -2130,25 +2127,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2130 | } | 2127 | } |
2131 | else | 2128 | else |
2132 | { | 2129 | { |
2133 | // if (Util.GetDistanceTo(AbsolutePosition, pos) <= 10) | 2130 | if (PhysicsSit(part,offset)) // physics engine |
2134 | // { | 2131 | return; |
2135 | // m_log.DebugFormat( | ||
2136 | // "[SCENE PRESENCE]: Sitting {0} on {1} {2} because sit target is unset and within 10m", | ||
2137 | // Name, part.Name, part.LocalId); | ||
2138 | |||
2139 | if (m_scene.PhysicsScene != null && | ||
2140 | part.PhysActor != null && | ||
2141 | Util.GetDistanceTo(AbsolutePosition, pos) <= 30) | ||
2142 | { | ||
2143 | |||
2144 | Vector3 camdif = CameraPosition - part.AbsolutePosition; | ||
2145 | camdif.Normalize(); | ||
2146 | |||
2147 | // m_log.InfoFormat("sit {0} {1}", offset.ToString(), camdif.ToString()); | ||
2148 | |||
2149 | if (m_scene.PhysicsScene.SitAvatar(part.PhysActor, AbsolutePosition, CameraPosition, offset, new Vector3(0.35f, 0, 0.65f), PhysicsSitResponse) != 0) | ||
2150 | return; | ||
2151 | } | ||
2152 | 2132 | ||
2153 | if (Util.GetDistanceTo(AbsolutePosition, pos) <= 10) | 2133 | if (Util.GetDistanceTo(AbsolutePosition, pos) <= 10) |
2154 | { | 2134 | { |
@@ -2156,12 +2136,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2156 | AbsolutePosition = pos + new Vector3(0.0f, 0.0f, m_sitAvatarHeight); | 2136 | AbsolutePosition = pos + new Vector3(0.0f, 0.0f, m_sitAvatarHeight); |
2157 | canSit = true; | 2137 | canSit = true; |
2158 | } | 2138 | } |
2159 | // else | ||
2160 | // { | ||
2161 | // m_log.DebugFormat( | ||
2162 | // "[SCENE PRESENCE]: Ignoring sit request of {0} on {1} {2} because sit target is unset and outside 10m", | ||
2163 | // Name, part.Name, part.LocalId); | ||
2164 | // } | ||
2165 | } | 2139 | } |
2166 | 2140 | ||
2167 | if (canSit) | 2141 | if (canSit) |
@@ -2223,14 +2197,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2223 | m_requestedSitTargetID = part.LocalId; | 2197 | m_requestedSitTargetID = part.LocalId; |
2224 | m_requestedSitTargetUUID = targetID; | 2198 | m_requestedSitTargetUUID = targetID; |
2225 | 2199 | ||
2226 | // m_log.DebugFormat("[SIT]: Client requested Sit Position: {0}", offset); | ||
2227 | |||
2228 | if (m_scene.PhysicsScene.SupportsRayCast()) | ||
2229 | { | ||
2230 | //m_scene.PhysicsScene.RaycastWorld(Vector3.Zero,Vector3.Zero, 0.01f,new RaycastCallback()); | ||
2231 | //SitRayCastAvatarPosition(part); | ||
2232 | //return; | ||
2233 | } | ||
2234 | } | 2200 | } |
2235 | else | 2201 | else |
2236 | { | 2202 | { |
@@ -2240,24 +2206,57 @@ namespace OpenSim.Region.Framework.Scenes | |||
2240 | SendSitResponse(targetID, offset, Quaternion.Identity); | 2206 | SendSitResponse(targetID, offset, Quaternion.Identity); |
2241 | } | 2207 | } |
2242 | 2208 | ||
2243 | public void PhysicsSitResponse(int status, uint partID, Vector3 offset, Quaternion Orientation) | 2209 | // returns false if does not suport so older sit can be tried |
2210 | public bool PhysicsSit(SceneObjectPart part, Vector3 offset) | ||
2244 | { | 2211 | { |
2212 | if (part == null || part.ParentGroup.IsAttachment) | ||
2213 | { | ||
2214 | return true; | ||
2215 | } | ||
2245 | 2216 | ||
2246 | if (status < 0) | 2217 | if ( m_scene.PhysicsScene == null) |
2218 | return false; | ||
2219 | |||
2220 | if (part.PhysActor == null) | ||
2247 | { | 2221 | { |
2248 | ControllingClient.SendAlertMessage("Sit position no longer exists"); | 2222 | // none physcis shape |
2249 | return; | 2223 | if (part.PhysicsShapeType == (byte)PhysicsShapeType.None) |
2224 | ControllingClient.SendAlertMessage(" There is no suitable surface to sit on, try another spot."); | ||
2225 | else | ||
2226 | { // non physical phantom TODO | ||
2227 | ControllingClient.SendAlertMessage(" There is no suitable surface to sit on, try another spot."); | ||
2228 | return false; | ||
2229 | } | ||
2230 | return true; | ||
2250 | } | 2231 | } |
2251 | 2232 | ||
2252 | if (status == 0) | 2233 | // not doing autopilot |
2234 | m_requestedSitTargetID = 0; | ||
2235 | |||
2236 | if (m_scene.PhysicsScene.SitAvatar(part.PhysActor, AbsolutePosition, CameraPosition, offset, new Vector3(0.35f, 0, 0.65f), PhysicsSitResponse) != 0) | ||
2237 | return true; | ||
2238 | |||
2239 | return false; | ||
2240 | } | ||
2241 | |||
2242 | // status | ||
2243 | // < 0 ignore | ||
2244 | // 0 bad sit spot | ||
2245 | public void PhysicsSitResponse(int status, uint partID, Vector3 offset, Quaternion Orientation) | ||
2246 | { | ||
2247 | if (status < 0) | ||
2253 | return; | 2248 | return; |
2254 | 2249 | ||
2255 | SceneObjectPart part = m_scene.GetSceneObjectPart(partID); | 2250 | if (status == 0) |
2256 | if (part == null || part.ParentGroup.IsAttachment) | ||
2257 | { | 2251 | { |
2252 | ControllingClient.SendAlertMessage(" There is no suitable surface to sit on, try another spot."); | ||
2258 | return; | 2253 | return; |
2259 | } | 2254 | } |
2260 | 2255 | ||
2256 | SceneObjectPart part = m_scene.GetSceneObjectPart(partID); | ||
2257 | if (part == null) | ||
2258 | return; | ||
2259 | |||
2261 | // m_log.InfoFormat("physsit {0} {1}", offset.ToString(),Orientation.ToString()); | 2260 | // m_log.InfoFormat("physsit {0} {1}", offset.ToString(),Orientation.ToString()); |
2262 | 2261 | ||
2263 | part.AddSittingAvatar(UUID); | 2262 | part.AddSittingAvatar(UUID); |
@@ -2269,16 +2268,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
2269 | ControllingClient.SendSitResponse( | 2268 | ControllingClient.SendSitResponse( |
2270 | part.UUID, offset, Orientation, false, cameraAtOffset, cameraEyeOffset, forceMouselook); | 2269 | part.UUID, offset, Orientation, false, cameraAtOffset, cameraEyeOffset, forceMouselook); |
2271 | 2270 | ||
2272 | part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); | 2271 | // not using autopilot |
2273 | |||
2274 | // assuming no autopilot in use | ||
2275 | Velocity = Vector3.Zero; | 2272 | Velocity = Vector3.Zero; |
2276 | RemoveFromPhysicalScene(); | 2273 | RemoveFromPhysicalScene(); |
2277 | 2274 | ||
2278 | Rotation = Orientation; | 2275 | Rotation = Orientation; |
2279 | m_pos = offset; | 2276 | m_pos = offset; |
2280 | 2277 | ||
2281 | m_requestedSitTargetID = 0; // invalidate the viewer sit comand for now | 2278 | m_requestedSitTargetID = 0; |
2282 | part.ParentGroup.AddAvatar(UUID); | 2279 | part.ParentGroup.AddAvatar(UUID); |
2283 | 2280 | ||
2284 | ParentPart = part; | 2281 | ParentPart = part; |
@@ -2286,6 +2283,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2286 | 2283 | ||
2287 | Animator.TrySetMovementAnimation("SIT"); | 2284 | Animator.TrySetMovementAnimation("SIT"); |
2288 | SendAvatarDataToAllAgents(); | 2285 | SendAvatarDataToAllAgents(); |
2286 | |||
2287 | part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); | ||
2289 | } | 2288 | } |
2290 | 2289 | ||
2291 | 2290 | ||