public void OnBotAgentUpdate(Vector3 toward, uint controlFlag, Quaternion bodyRotation, bool isMoving) { if (isMoving) { m_hasStoppedMoving = false; } m_object.AbsolutePosition += toward * (m_speed * (1f / 45f)); m_object.ScheduleGroupTerseUpdate(); }
//Like handleEventManagerOnSignificantClientMovement, but for objects for parcel incoming object permissions public void EventManagerOnSignificantObjectMovement(ISceneEntity group) { ILandObject over = GetLandObject((int) group.AbsolutePosition.X, (int) group.AbsolutePosition.Y); if (over != null) { //Entered this new parcel if (over.LandData.GlobalID != group.LastParcelUUID) { if (!m_scene.Permissions.CanObjectEntry(group.UUID, false, group.AbsolutePosition, group.OwnerID)) { //Revert the position and do not update the parcel ID group.AbsolutePosition = group.LastSignificantPosition; //If the object has physics, stop it from moving if ((group.RootChild.Flags & PrimFlags.Physics) == PrimFlags.Physics) { bool wasTemporary = ((group.RootChild.Flags & PrimFlags.TemporaryOnRez) != 0); bool wasPhantom = ((group.RootChild.Flags & PrimFlags.Phantom) != 0); bool wasVD = group.RootChild.VolumeDetectActive; bool needsPhysicalRebuild = group.RootChild.UpdatePrimFlags(false, wasTemporary, wasPhantom, wasVD, null); if (needsPhysicalRebuild) group.RebuildPhysicalRepresentation(true); } //Send an update so that all clients see it group.ScheduleGroupTerseUpdate(); } else { UUID oldParcelUUID = group.LastParcelUUID; //Update the UUID then group.LastParcelUUID = over.LandData.GlobalID; //Trigger the event object[] param = new object[3]; param[0] = group; param[1] = over.LandData.GlobalID; param[2] = oldParcelUUID; m_scene.AuroraEventManager.FireGenericEventHandler("ObjectEnteringNewParcel", param); } } } }