public void Deserialize(ControllerData[] controllerData) { lock (scriptedcontrols) { scriptedcontrols.Clear(); #if (!ISWIN) foreach (ControllerData c in controllerData) { ScriptControllers sc = new ScriptControllers { itemID = c.ItemID, part = m_sp.Scene.GetSceneObjectPart(c.ObjectID), ignoreControls = (ScriptControlled)c.IgnoreControls, eventControls = (ScriptControlled)c.EventControls }; if (sc.part != null) { scriptedcontrols[sc.itemID] = sc; } } #else foreach (ScriptControllers sc in controllerData.Select(c => new ScriptControllers { itemID = c.ItemID, part = m_sp.Scene.GetSceneObjectPart(c.ObjectID), ignoreControls = (ScriptControlled)c.IgnoreControls, eventControls = (ScriptControlled)c.EventControls }).Where(sc => sc.part != null)) { scriptedcontrols[sc.itemID] = sc; } #endif } }
public void RegisterScriptController(ScriptControllers SC) { lock (scriptedcontrols) { scriptedcontrols[SC.itemID] = SC; } m_sp.ControllingClient.SendTakeControls((int)SC.eventControls, true, true); }
public void RegisterControlEventsToScript(int controls, int accept, int pass_on, ISceneChildEntity part, UUID Script_item_UUID) { ScriptControllers obj = new ScriptControllers { ignoreControls = ScriptControlled.CONTROL_ZERO, eventControls = ScriptControlled.CONTROL_ZERO, itemID = Script_item_UUID, part = part }; if (pass_on == 0 && accept == 0) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; } if (pass_on == 0 && accept == 1) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; obj.eventControls = (ScriptControlled)controls; } if (pass_on == 1 && accept == 1) { IgnoredControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = (ScriptControlled)controls; obj.ignoreControls = ScriptControlled.CONTROL_ZERO; } lock (scriptedcontrols) { if (pass_on == 1 && accept == 0) { IgnoredControls &= ~(ScriptControlled)controls; if (scriptedcontrols.ContainsKey(Script_item_UUID)) { scriptedcontrols.Remove(Script_item_UUID); } } else { scriptedcontrols[Script_item_UUID] = obj; } } m_sp.ControllingClient.SendTakeControls(controls, pass_on == 1 ? true : false, true); }
public void Deserialize(ControllerData[] controllerData) { lock (scriptedcontrols) { scriptedcontrols.Clear(); foreach (ControllerData c in controllerData) { ScriptControllers sc = new ScriptControllers(); sc.itemID = c.ItemID; sc.ignoreControls = (ScriptControlled)c.IgnoreControls; sc.eventControls = (ScriptControlled)c.EventControls; scriptedcontrols[sc.itemID] = sc; } } }
protected internal void SendControlToScripts(uint flags) { ScriptControlled allflags = ScriptControlled.CONTROL_ZERO; if (MouseDown) { allflags = LastCommands & (ScriptControlled.CONTROL_ML_LBUTTON | ScriptControlled.CONTROL_LBUTTON); if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_UP) != 0 || (flags & unchecked ((uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_UP)) != 0) { allflags = ScriptControlled.CONTROL_ZERO; MouseDown = true; } } if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_DOWN) != 0) { allflags |= ScriptControlled.CONTROL_ML_LBUTTON; MouseDown = true; } if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0) { allflags |= ScriptControlled.CONTROL_LBUTTON; MouseDown = true; } // find all activated controls, whether the scripts are interested in them or not if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS) != 0) { allflags |= ScriptControlled.CONTROL_FWD; } if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG) != 0) { allflags |= ScriptControlled.CONTROL_BACK; } if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS) != 0) { allflags |= ScriptControlled.CONTROL_UP; } if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0) { allflags |= ScriptControlled.CONTROL_DOWN; } if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS) != 0) { allflags |= ScriptControlled.CONTROL_LEFT; } if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG) != 0) { allflags |= ScriptControlled.CONTROL_RIGHT; } if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0) { allflags |= ScriptControlled.CONTROL_ROT_RIGHT; } if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0) { allflags |= ScriptControlled.CONTROL_ROT_LEFT; } // optimization; we have to check per script, but if nothing is pressed and nothing changed, we can skip that if (allflags != ScriptControlled.CONTROL_ZERO || allflags != LastCommands) { lock (scriptedcontrols) { foreach (KeyValuePair <UUID, ScriptControllers> kvp in scriptedcontrols) { UUID scriptUUID = kvp.Key; ScriptControllers scriptControlData = kvp.Value; ScriptControlled localHeld = allflags & scriptControlData.eventControls; // the flags interesting for us ScriptControlled localLast = LastCommands & scriptControlData.eventControls; // the activated controls in the last cycle ScriptControlled localChange = localHeld ^ localLast; // the changed bits if (localHeld != ScriptControlled.CONTROL_ZERO || localChange != ScriptControlled.CONTROL_ZERO) { // only send if still pressed or just changed m_sp.Scene.EventManager.TriggerControlEvent(scriptControlData.part, scriptUUID, m_sp.UUID, (uint)localHeld, (uint)localChange); } } } } LastCommands = allflags; }
private void AddScriptToControlNotifications(OpenMetaverse.UUID Script_item_UUID, SceneObjectPart part, ref ScriptControllers obj) { m_scriptedcontrols[Script_item_UUID] = obj; PhysicsActor physActor = part.ParentGroup.RootPart.PhysActor; if (physActor != null) { physActor.OnPhysicsRequestingCameraData -= physActor_OnPhysicsRequestingCameraData; physActor.OnPhysicsRequestingCameraData += physActor_OnPhysicsRequestingCameraData; } }
public void RegisterControlEventsToScript(int oldControls, int oldPassOn, int controls, int accept, int pass_on, uint Obj_localID, UUID Script_item_UUID, bool silent) { ScriptControllers obj = new ScriptControllers(); obj.ignoreControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = ScriptControlled.CONTROL_ZERO; obj.itemID = Script_item_UUID; obj.objID = Obj_localID; SceneObjectPart part = m_scene.GetSceneObjectPart(Obj_localID); if (part == null) { m_log.ErrorFormat("[SCENE PRESENCE]: Could not register control events to script in object {0}. Object was not found in the scene", Obj_localID); return; } lock (m_scriptedcontrols) { if (pass_on == 0 && accept == 0) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; } if (pass_on == 0 && accept == 1) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; obj.eventControls = (ScriptControlled)controls; } if (pass_on == 1 && accept == 1) { IgnoredControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = (ScriptControlled)controls; obj.ignoreControls = ScriptControlled.CONTROL_ZERO; } if (pass_on == 1 && accept == 0) { IgnoredControls &= ~(ScriptControlled)controls; RemoveScriptFromControlNotifications(Script_item_UUID, part); } else { AddScriptToControlNotifications(Script_item_UUID, part, ref obj); } } if (!silent) { // SL includes these extra bits if you request FWD/BACK/LEFT/RIGHT oldControls = AdjustControlsForNudges(oldControls); controls = AdjustControlsForNudges(controls); if (accept == 0) { if (pass_on == 0) // a=false, p=false ControllingClient.SendTakeControls2(oldControls, false, oldPassOn != 0, ~controls, true, false); else // false, true ControllingClient.SendTakeControls2(oldControls, false, oldPassOn != 0, ~controls, true, true); } else { if (pass_on == 0) // a=true, p=false ControllingClient.SendTakeControls2(oldControls, false, oldPassOn != 0, controls, true, false); else // true, true ControllingClient.SendTakeControls2(oldControls, false, oldPassOn != 0, controls, true, true); } } }
public void RegisterControlEventsToScript(int controls, int accept, int pass_on, uint Obj_localID, UUID Script_item_UUID) { ScriptControllers obj = new ScriptControllers(); obj.ignoreControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = ScriptControlled.CONTROL_ZERO; obj.itemID = Script_item_UUID; obj.objID = Obj_localID; if (pass_on == 0 && accept == 0) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; } if (pass_on == 0 && accept == 1) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; obj.eventControls = (ScriptControlled)controls; } if (pass_on == 1 && accept == 1) { IgnoredControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = (ScriptControlled)controls; obj.ignoreControls = ScriptControlled.CONTROL_ZERO; } lock (scriptedcontrols) { if (pass_on == 1 && accept == 0) { IgnoredControls &= ~(ScriptControlled)controls; if (scriptedcontrols.ContainsKey(Script_item_UUID)) scriptedcontrols.Remove(Script_item_UUID); } else { if (scriptedcontrols.ContainsKey(Script_item_UUID)) { scriptedcontrols[Script_item_UUID] = obj; } else { scriptedcontrols.Add(Script_item_UUID, obj); } } } ControllingClient.SendTakeControls(controls, pass_on == 1 ? true : false, true); }
private void CopyFrom(AgentData cAgent) { m_callbackURI = cAgent.CallbackURI; // m_log.DebugFormat( // "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()", // Name, m_scene.RegionInfo.RegionName, m_callbackURI); m_pos = cAgent.Position; m_velocity = cAgent.Velocity; CameraPosition = cAgent.Center; CameraAtAxis = cAgent.AtAxis; CameraLeftAxis = cAgent.LeftAxis; CameraUpAxis = cAgent.UpAxis; ParentUUID = cAgent.ParentPart; PrevSitOffset = cAgent.SitOffset; // When we get to the point of re-computing neighbors everytime this // changes, then start using the agent's drawdistance rather than the // region's draw distance. DrawDistance = cAgent.Far; // DrawDistance = Scene.DefaultDrawDistance; if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) ControllingClient.SetChildAgentThrottle(cAgent.Throttles); m_headrotation = cAgent.HeadRotation; Rotation = cAgent.BodyRotation; m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) GodLevel = cAgent.GodLevel; SetAlwaysRun = cAgent.AlwaysRun; Appearance = new AvatarAppearance(cAgent.Appearance); if (PhysicsActor != null) { bool isFlying = Flying; RemoveFromPhysicalScene(); AddToPhysicalScene(isFlying); } try { lock (scriptedcontrols) { if (cAgent.Controllers != null) { scriptedcontrols.Clear(); foreach (ControllerData c in cAgent.Controllers) { ScriptControllers sc = new ScriptControllers(); sc.objectID = c.ObjectID; sc.itemID = c.ItemID; sc.ignoreControls = (ScriptControlled)c.IgnoreControls; sc.eventControls = (ScriptControlled)c.EventControls; scriptedcontrols[sc.itemID] = sc; } } } } catch { } // FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object? if (cAgent.Anims != null) Animator.Animations.FromArray(cAgent.Anims); if (cAgent.DefaultAnim != null) Animator.Animations.SetDefaultAnimation(cAgent.DefaultAnim.AnimID, cAgent.DefaultAnim.SequenceNum, UUID.Zero); if (cAgent.AnimState != null) Animator.Animations.SetImplicitDefaultAnimation(cAgent.AnimState.AnimID, cAgent.AnimState.SequenceNum, UUID.Zero); if (Scene.AttachmentsModule != null) Scene.AttachmentsModule.CopyAttachments(cAgent, this); // This must occur after attachments are copied, as it releases the CompleteMovement() calling thread // originating from the client completing a teleport. Otherwise, CompleteMovement() code to restart // script attachments can outrace this thread. lock (m_originRegionIDAccessLock) m_originRegionID = cAgent.RegionID; }
private void CopyFrom(AgentData cAgent) { m_callbackURI = cAgent.CallbackURI; // m_log.DebugFormat( // "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()", // Name, m_scene.RegionInfo.RegionName, m_callbackURI); m_pos = cAgent.Position; m_velocity = cAgent.Velocity; CameraPosition = cAgent.Center; CameraAtAxis = cAgent.AtAxis; CameraLeftAxis = cAgent.LeftAxis; CameraUpAxis = cAgent.UpAxis; ParentUUID = cAgent.ParentPart; PrevSitOffset = cAgent.SitOffset; // When we get to the point of re-computing neighbors everytime this // changes, then start using the agent's drawdistance rather than the // region's draw distance. DrawDistance = cAgent.Far; //DrawDistance = Scene.DefaultDrawDistance; if (cAgent.ChildrenCapSeeds != null && cAgent.ChildrenCapSeeds.Count > 0) { if (Scene.CapsModule != null) { Scene.CapsModule.SetChildrenSeed(UUID, cAgent.ChildrenCapSeeds); } KnownRegions = cAgent.ChildrenCapSeeds; } if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) ControllingClient.SetChildAgentThrottle(cAgent.Throttles); m_headrotation = cAgent.HeadRotation; Rotation = cAgent.BodyRotation; m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) GodLevel = cAgent.GodLevel; SetAlwaysRun = cAgent.AlwaysRun; Appearance = new AvatarAppearance(cAgent.Appearance); /* bool isFlying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); if (PhysicsActor != null) { RemoveFromPhysicalScene(); AddToPhysicalScene(isFlying); } */ try { lock (scriptedcontrols) { if (cAgent.Controllers != null) { scriptedcontrols.Clear(); foreach (ControllerData c in cAgent.Controllers) { ScriptControllers sc = new ScriptControllers(); sc.objectID = c.ObjectID; sc.itemID = c.ItemID; sc.ignoreControls = (ScriptControlled)c.IgnoreControls; sc.eventControls = (ScriptControlled)c.EventControls; scriptedcontrols[sc.itemID] = sc; } } } } catch { } Animator.ResetAnimations(); Overrides.CopyAOPairsFrom(cAgent.MovementAnimationOverRides); // FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object? if (cAgent.DefaultAnim != null) Animator.Animations.SetDefaultAnimation(cAgent.DefaultAnim.AnimID, cAgent.DefaultAnim.SequenceNum, UUID.Zero); if (cAgent.AnimState != null) Animator.Animations.SetImplicitDefaultAnimation(cAgent.AnimState.AnimID, cAgent.AnimState.SequenceNum, UUID.Zero); if (cAgent.Anims != null) Animator.Animations.FromArray(cAgent.Anims); if (cAgent.MotionState != 0) Animator.currentControlState = (ScenePresenceAnimator.motionControlStates) cAgent.MotionState; if (Scene.AttachmentsModule != null) Scene.AttachmentsModule.CopyAttachments(cAgent, this); lock (m_originRegionIDAccessLock) m_originRegionID = cAgent.RegionID; }
private void CopyFrom(AgentData cAgent) { m_callbackURI = cAgent.CallbackURI; // m_log.DebugFormat( // "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()", // Name, m_scene.RegionInfo.RegionName, m_callbackURI); m_pos = cAgent.Position; m_velocity = cAgent.Velocity; CameraPosition = cAgent.Center; CameraAtAxis = cAgent.AtAxis; CameraLeftAxis = cAgent.LeftAxis; CameraUpAxis = cAgent.UpAxis; ParentUUID = cAgent.ParentPart; PrevSitOffset = cAgent.SitOffset; // When we get to the point of re-computing neighbors everytime this // changes, then start using the agent's drawdistance rather than the // region's draw distance. DrawDistance = cAgent.Far; // DrawDistance = Scene.DefaultDrawDistance; if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) ControllingClient.SetChildAgentThrottle(cAgent.Throttles); m_headrotation = cAgent.HeadRotation; Rotation = cAgent.BodyRotation; m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) GodLevel = cAgent.GodLevel; SetAlwaysRun = cAgent.AlwaysRun; Appearance = new AvatarAppearance(cAgent.Appearance); if (PhysicsActor != null) { bool isFlying = Flying; RemoveFromPhysicalScene(); AddToPhysicalScene(isFlying); } try { lock (scriptedcontrols) { if (cAgent.Controllers != null) { scriptedcontrols.Clear(); foreach (ControllerData c in cAgent.Controllers) { ScriptControllers sc = new ScriptControllers(); sc.objectID = c.ObjectID; sc.itemID = c.ItemID; sc.ignoreControls = (ScriptControlled)c.IgnoreControls; sc.eventControls = (ScriptControlled)c.EventControls; scriptedcontrols[sc.itemID] = sc; } } } } catch { } // FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object? if (cAgent.Anims != null) Animator.Animations.FromArray(cAgent.Anims); if (cAgent.DefaultAnim != null) Animator.Animations.SetDefaultAnimation(cAgent.DefaultAnim.AnimID, cAgent.DefaultAnim.SequenceNum, UUID.Zero); if (cAgent.AnimState != null) Animator.Animations.SetImplicitDefaultAnimation(cAgent.AnimState.AnimID, cAgent.AnimState.SequenceNum, UUID.Zero); if (Scene.AttachmentsModule != null) { // If the JobEngine is running we can schedule this job now and continue rather than waiting for all // attachments to copy, which might take a long time in the Hypergrid case as the entire inventory // graph is inspected for each attachments and assets possibly fetched. // // We don't need to worry about a race condition as the job to later start the scripts is also // JobEngine scheduled and so will always occur after this task. // XXX: This will not be true if JobEngine ever gets more than one thread. WorkManager.RunJob( "CopyAttachments", o => Scene.AttachmentsModule.CopyAttachments(cAgent, this), null, string.Format("Copy attachments for {0} entering {1}", Name, Scene.Name), true); } // This must occur after attachments are copied or scheduled to be copied, as it releases the CompleteMovement() calling thread // originating from the client completing a teleport. Otherwise, CompleteMovement() code to restart // script attachments can outrace this thread. lock (m_originRegionIDAccessLock) m_originRegionID = cAgent.RegionID; }
public void Deserialize (ControllerData[] controllerData) { lock (scriptedcontrols) { scriptedcontrols.Clear (); foreach (ControllerData c in controllerData) { ScriptControllers sc = new ScriptControllers (); sc.itemID = c.ItemID; sc.ignoreControls = (ScriptControlled)c.IgnoreControls; sc.eventControls = (ScriptControlled)c.EventControls; scriptedcontrols[sc.itemID] = sc; } } }
public void RegisterScriptController (ScriptControllers SC) { lock (scriptedcontrols) { scriptedcontrols[SC.itemID] = SC; } m_sp.ControllingClient.SendTakeControls ((int)SC.eventControls, true, true); }
public void RegisterControlEventsToScript (int controls, int accept, int pass_on, ISceneChildEntity part, UUID Script_item_UUID) { ScriptControllers obj = new ScriptControllers (); obj.ignoreControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = ScriptControlled.CONTROL_ZERO; obj.itemID = Script_item_UUID; obj.part = part; if (pass_on == 0 && accept == 0) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; } if (pass_on == 0 && accept == 1) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; obj.eventControls = (ScriptControlled)controls; } if (pass_on == 1 && accept == 1) { IgnoredControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = (ScriptControlled)controls; obj.ignoreControls = ScriptControlled.CONTROL_ZERO; } lock (scriptedcontrols) { if (pass_on == 1 && accept == 0) { IgnoredControls &= ~(ScriptControlled)controls; if (scriptedcontrols.ContainsKey (Script_item_UUID)) scriptedcontrols.Remove (Script_item_UUID); } else { scriptedcontrols[Script_item_UUID] = obj; } } m_sp.ControllingClient.SendTakeControls (controls, pass_on == 1 ? true : false, true); }
private void CopyFrom(AgentData cAgent) { m_originRegionID = cAgent.RegionID; m_callbackURI = cAgent.CallbackURI; m_pos = cAgent.Position; m_velocity = cAgent.Velocity; CameraPosition = cAgent.Center; CameraAtAxis = cAgent.AtAxis; CameraLeftAxis = cAgent.LeftAxis; m_CameraUpAxis = cAgent.UpAxis; // When we get to the point of re-computing neighbors everytime this // changes, then start using the agent's drawdistance rather than the // region's draw distance. // DrawDistance = cAgent.Far; DrawDistance = Scene.DefaultDrawDistance; if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) ControllingClient.SetChildAgentThrottle(cAgent.Throttles); m_headrotation = cAgent.HeadRotation; Rotation = cAgent.BodyRotation; m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) GodLevel = cAgent.GodLevel; SetAlwaysRun = cAgent.AlwaysRun; Appearance = new AvatarAppearance(cAgent.Appearance); if (PhysicsActor != null) { bool isFlying = Flying; RemoveFromPhysicalScene(); AddToPhysicalScene(isFlying); } try { lock (scriptedcontrols) { if (cAgent.Controllers != null) { scriptedcontrols.Clear(); foreach (ControllerData c in cAgent.Controllers) { ScriptControllers sc = new ScriptControllers(); sc.itemID = c.ItemID; sc.ignoreControls = (ScriptControlled)c.IgnoreControls; sc.eventControls = (ScriptControlled)c.EventControls; scriptedcontrols[sc.itemID] = sc; } } } } catch { } // FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object? if (cAgent.Anims != null) Animator.Animations.FromArray(cAgent.Anims); if (cAgent.AttachmentObjects != null && cAgent.AttachmentObjects.Count > 0) { m_attachments = new List<SceneObjectGroup>(); int i = 0; foreach (ISceneObject so in cAgent.AttachmentObjects) { ((SceneObjectGroup)so).LocalId = 0; ((SceneObjectGroup)so).RootPart.ClearUpdateSchedule(); so.SetState(cAgent.AttachmentObjectStates[i++], m_scene); m_scene.IncomingCreateObject(so); } } }
public void CopyFrom(AgentData cAgent) { m_originRegionID = cAgent.RegionID; m_callbackURI = cAgent.CallbackURI; m_pos = cAgent.Position; m_velocity = cAgent.Velocity; m_CameraCenter = cAgent.Center; m_CameraAtAxis = cAgent.AtAxis; m_CameraLeftAxis = cAgent.LeftAxis; m_CameraUpAxis = cAgent.UpAxis; // When we get to the point of re-computing neighbors everytime this // changes, then start using the agent's drawdistance rather than the // region's draw distance. // m_DrawDistance = cAgent.Far; m_DrawDistance = Scene.DefaultDrawDistance; if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) ControllingClient.SetChildAgentThrottle(cAgent.Throttles); m_headrotation = cAgent.HeadRotation; m_bodyRot = cAgent.BodyRotation; m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) m_godLevel = cAgent.GodLevel; m_setAlwaysRun = cAgent.AlwaysRun; m_appearance = new AvatarAppearance(cAgent.Appearance); if (m_physicsActor != null) { bool isFlying = m_physicsActor.Flying; RemoveFromPhysicalScene(); AddToPhysicalScene(isFlying); } /* uint i = 0; try { if (cAgent.Wearables == null) cAgent.Wearables = new UUID[0]; AvatarWearable[] wears = new AvatarWearable[cAgent.Wearables.Length / 2]; for (uint n = 0; n < cAgent.Wearables.Length; n += 2) { UUID itemId = cAgent.Wearables[n]; UUID assetId = cAgent.Wearables[n + 1]; wears[i++] = new AvatarWearable(itemId, assetId); } // m_appearance.Wearables = wears; Primitive.TextureEntry textures = null; if (cAgent.AgentTextures != null && cAgent.AgentTextures.Length > 1) textures = new Primitive.TextureEntry(cAgent.AgentTextures, 0, cAgent.AgentTextures.Length); byte[] visuals = null; if ((cAgent.VisualParams != null) && (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT)) visuals = (byte[])cAgent.VisualParams.Clone(); m_appearance = new AvatarAppearance(cAgent.AgentID,wears,textures,visuals); } catch (Exception e) { m_log.Warn("[SCENE PRESENCE]: exception in CopyFrom " + e.Message); } // Attachments try { if (cAgent.Attachments != null) { m_appearance.ClearAttachments(); foreach (AvatarAttachment att in cAgent.Attachments) { m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID); } } } catch { } */ try { lock (scriptedcontrols) { if (cAgent.Controllers != null) { scriptedcontrols.Clear(); foreach (ControllerData c in cAgent.Controllers) { ScriptControllers sc = new ScriptControllers(); sc.itemID = c.ItemID; sc.ignoreControls = (ScriptControlled)c.IgnoreControls; sc.eventControls = (ScriptControlled)c.EventControls; scriptedcontrols[sc.itemID] = sc; } } } } catch { } // Animations try { Animator.ResetAnimations(); Animator.Animations.FromArray(cAgent.Anims); } catch { } //cAgent.GroupID = ?? //Groups??? }
private void CopyFrom(AgentData cAgent) { m_originRegionID = cAgent.RegionID; m_callbackURI = cAgent.CallbackURI; // m_log.DebugFormat( // "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()", // Name, m_scene.RegionInfo.RegionName, m_callbackURI); m_pos = cAgent.Position; m_velocity = cAgent.Velocity; CameraPosition = cAgent.Center; CameraAtAxis = cAgent.AtAxis; CameraLeftAxis = cAgent.LeftAxis; CameraUpAxis = cAgent.UpAxis; // When we get to the point of re-computing neighbors everytime this // changes, then start using the agent's drawdistance rather than the // region's draw distance. // DrawDistance = cAgent.Far; DrawDistance = Scene.DefaultDrawDistance; if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) ControllingClient.SetChildAgentThrottle(cAgent.Throttles); m_headrotation = cAgent.HeadRotation; Rotation = cAgent.BodyRotation; m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) GodLevel = cAgent.GodLevel; SetAlwaysRun = cAgent.AlwaysRun; Appearance = new AvatarAppearance(cAgent.Appearance); if (PhysicsActor != null) { bool isFlying = Flying; RemoveFromPhysicalScene(); AddToPhysicalScene(isFlying); } try { lock (scriptedcontrols) { if (cAgent.Controllers != null) { scriptedcontrols.Clear(); foreach (ControllerData c in cAgent.Controllers) { ScriptControllers sc = new ScriptControllers(); sc.itemID = c.ItemID; sc.ignoreControls = (ScriptControlled)c.IgnoreControls; sc.eventControls = (ScriptControlled)c.EventControls; scriptedcontrols[sc.itemID] = sc; } } } } catch { } // FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object? if (cAgent.Anims != null) Animator.Animations.FromArray(cAgent.Anims); if (Scene.AttachmentsModule != null) Scene.AttachmentsModule.CopyAttachments(cAgent, this); }
public void UpdateScriptToNewObject(UUID olditemID, TaskInventoryItem newItem, SceneObjectPart newPart) { try { Aurora.DataManager.DataManager.RequestPlugin<IScriptDataConnector>().DeleteStateSave(olditemID); if (newPart.ParentGroup.Scene != null) { ScriptData SD = ScriptProtection.GetScript(olditemID); if (SD == null) return; SD.presence = SD.World.GetScenePresence(SD.part.OwnerID); ScriptControllers SC = new ScriptControllers(); if (SD.presence != null) { SC = SD.presence.GetScriptControler(SD.ItemID); if ((newItem.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0) { SD.presence.UnRegisterControlEventsToScript(SD.part.LocalId, SD.ItemID); } } object[] Plugins = GetSerializationData(SD.ItemID, SD.part.UUID); RemoveScript(SD.part.UUID, SD.ItemID); MaintenanceThread.SetEventSchSetIgnoreNew(SD, true); ScriptProtection.RemoveScript(SD); SD.part = newPart; SD.ItemID = newItem.ItemID; //Find the asset ID SD.InventoryItem = newItem; //Try to see if this was rezzed from someone's inventory SD.UserInventoryItemID = SD.part.FromUserInventoryItemID; CreateFromData(SD.part.UUID, SD.ItemID, SD.part.UUID, Plugins); SD.World = newPart.ParentGroup.Scene; SD.SetApis(); MaintenanceThread.SetEventSchSetIgnoreNew(SD, false); if (SD.presence != null && (newItem.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0) { SC.itemID = newItem.ItemID; SC.part = SD.part; SD.presence.RegisterScriptController(SC); } ScriptProtection.AddNewScript(SD); ScriptDataSQLSerializer.SaveState(SD, this); } } catch { } }
public void RegisterControlEventsToScript(int controls, int accept, int pass_on, uint Obj_localID, UUID Script_item_UUID) { SceneObjectPart p = m_scene.GetSceneObjectPart(Obj_localID); if (p == null) return; ControllingClient.SendTakeControls(controls, false, false); ControllingClient.SendTakeControls(controls, true, false); ScriptControllers obj = new ScriptControllers(); obj.ignoreControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = ScriptControlled.CONTROL_ZERO; obj.objectID = p.ParentGroup.UUID; obj.itemID = Script_item_UUID; if (pass_on == 0 && accept == 0) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; } if (pass_on == 0 && accept == 1) { IgnoredControls |= (ScriptControlled)controls; obj.ignoreControls = (ScriptControlled)controls; obj.eventControls = (ScriptControlled)controls; } if (pass_on == 1 && accept == 1) { IgnoredControls = ScriptControlled.CONTROL_ZERO; obj.eventControls = (ScriptControlled)controls; obj.ignoreControls = ScriptControlled.CONTROL_ZERO; } lock (scriptedcontrols) { if (pass_on == 1 && accept == 0) { IgnoredControls &= ~(ScriptControlled)controls; if (scriptedcontrols.ContainsKey(Script_item_UUID)) scriptedcontrols.Remove(Script_item_UUID); } else { scriptedcontrols[Script_item_UUID] = obj; } } ControllingClient.SendTakeControls(controls, pass_on == 1 ? true : false, true); }
public void CopyFrom(AgentData cAgent) { // DEBUG ON m_log.ErrorFormat("[SCENEPRESENCE] CALLING COPYFROM"); // DEBUG OFF m_originRegionID = cAgent.RegionID; m_callbackURI = cAgent.CallbackURI; m_pos = cAgent.Position; m_velocity = cAgent.Velocity; m_CameraCenter = cAgent.Center; //m_avHeight = cAgent.Size.Z; m_CameraAtAxis = cAgent.AtAxis; m_CameraLeftAxis = cAgent.LeftAxis; m_CameraUpAxis = cAgent.UpAxis; m_DrawDistance = cAgent.Far; if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) ControllingClient.SetChildAgentThrottle(cAgent.Throttles); m_headrotation = cAgent.HeadRotation; m_bodyRot = cAgent.BodyRotation; m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) m_godLevel = cAgent.GodLevel; m_setAlwaysRun = cAgent.AlwaysRun; m_appearance = new AvatarAppearance(cAgent.Appearance); /* uint i = 0; try { if (cAgent.Wearables == null) cAgent.Wearables = new UUID[0]; AvatarWearable[] wears = new AvatarWearable[cAgent.Wearables.Length / 2]; for (uint n = 0; n < cAgent.Wearables.Length; n += 2) { UUID itemId = cAgent.Wearables[n]; UUID assetId = cAgent.Wearables[n + 1]; wears[i++] = new AvatarWearable(itemId, assetId); } // m_appearance.Wearables = wears; Primitive.TextureEntry textures = null; if (cAgent.AgentTextures != null && cAgent.AgentTextures.Length > 1) textures = new Primitive.TextureEntry(cAgent.AgentTextures, 0, cAgent.AgentTextures.Length); byte[] visuals = null; if ((cAgent.VisualParams != null) && (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT)) visuals = (byte[])cAgent.VisualParams.Clone(); m_appearance = new AvatarAppearance(cAgent.AgentID,wears,textures,visuals); } catch (Exception e) { m_log.Warn("[SCENE PRESENCE]: exception in CopyFrom " + e.Message); } // Attachments try { if (cAgent.Attachments != null) { m_appearance.ClearAttachments(); foreach (AvatarAttachment att in cAgent.Attachments) { m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID); } } } catch { } */ try { lock (scriptedcontrols) { if (cAgent.Controllers != null) { scriptedcontrols.Clear(); foreach (ControllerData c in cAgent.Controllers) { ScriptControllers sc = new ScriptControllers(); sc.itemID = c.ItemID; sc.ignoreControls = (ScriptControlled)c.IgnoreControls; sc.eventControls = (ScriptControlled)c.EventControls; scriptedcontrols[sc.itemID] = sc; } } } } catch { } // Animations try { Animator.ResetAnimations(); Animator.Animations.FromArray(cAgent.Anims); } catch { } //cAgent.GroupID = ?? //Groups??? }