public void TestPartSerialzationDeserialization() { SceneObjectPart rootPart = new SceneObjectPart(UUID.Zero, new OpenSim.Framework.PrimitiveBaseShape(), new Vector3(1, 2, 3), Quaternion.Identity, Vector3.Zero, false); rootPart.Name = "RootPart"; SceneObjectPart part = Util.RandomSOP("ChildPart", 2); var pgrp1 = new SceneObjectGroup(rootPart); pgrp1.AddPart(part); part.InventorySerial = 1; part.Rezzed = DateTime.Now; part.TextColor = System.Drawing.Color.FromArgb(1,2,3,4); byte[] bytes = serEngine.SceneObjectSerializer.SerializePartToBytes(part, OpenSim.Region.Framework.Scenes.Serialization.SerializationFlags.None); SceneObjectPart rootPart2 = new SceneObjectPart(UUID.Zero, new OpenSim.Framework.PrimitiveBaseShape(), new Vector3(1, 2, 3), Quaternion.Identity, Vector3.Zero, false); rootPart2.Name = "RootPart2"; SceneObjectPart deserPart = serEngine.SceneObjectSerializer.DeserializePartFromBytes(bytes); var pgrp2 = new SceneObjectGroup(rootPart2); pgrp2.AddPart(deserPart); deserPart.Rezzed = part.Rezzed; CompareObjects comp = new CompareObjects(); comp.CompareStaticFields = false; comp.CompareStaticProperties = false; comp.ElementsToIgnore = PrimCompareIgnoreList; Assert.IsTrue(comp.Compare(part, deserPart), comp.DifferencesString); }
public void PlaybackState(SceneObjectPart part) { if (part != null) { part.Undoing = true; if (part.ParentID == 0) { if (Position != Vector3.Zero) part.ParentGroup.AbsolutePosition = Position; part.RotationOffset = Rotation; if (Scale != Vector3.Zero) part.Resize(Scale); part.ParentGroup.ScheduleGroupForTerseUpdate(); } else { if (Position != Vector3.Zero) part.OffsetPosition = Position; part.UpdateRotation(Rotation); if (Scale != Vector3.Zero) part.Resize(Scale); part.ScheduleTerseUpdate(); } part.Undoing = false; } }
public void Initialize(IScriptModulePlugin ScriptEngine, SceneObjectPart host, uint localID, UUID itemID, ScriptProtectionModule module) { m_itemID = itemID; m_ScriptEngine = ScriptEngine; m_host = host; ScriptProtection = module; }
/// <summary> /// Add the part to the queue of parts for which we need to send an update to the client /// </summary> /// <param name="part"></param> public void QueuePartForUpdate(SceneObjectPart part) { lock (m_partsUpdateQueue) { m_partsUpdateQueue.Enqueue(part); } }
public void TestDeRezSceneObject() { TestHelper.InMethod(); // log4net.Config.XmlConfigurator.Configure(); UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); TestScene scene = SceneSetupHelpers.SetupScene(); IConfigSource configSource = new IniConfigSource(); IConfig config = configSource.AddConfig("Startup"); config.Set("serverside_object_permissions", true); SceneSetupHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() }); TestClient client = SceneSetupHelpers.AddRootAgent(scene, userId); // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; sogd.Enabled = false; SceneObjectPart part = new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero); part.Name = "obj1"; scene.AddNewSceneObject(new SceneObjectGroup(part), false); List<uint> localIds = new List<uint>(); localIds.Add(part.LocalId); scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero); sogd.InventoryDeQueueAndDelete(); SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); Assert.That(retrievedPart, Is.Null); }
/// <summary> /// Constructor. /// </summary> /// <param name="part"></param> /// <param name="change">bit field with what is changed</param> /// public UndoState(SceneObjectPart part, ObjectChangeType change) { data = new ObjectChangeData(); data.change = change; creationtime = DateTime.UtcNow; if (part.ParentGroup.RootPart == part) { if ((change & ObjectChangeType.Position) != 0) data.position = part.ParentGroup.AbsolutePosition; if ((change & ObjectChangeType.Rotation) != 0) data.rotation = part.RotationOffset; if ((change & ObjectChangeType.Scale) != 0) data.scale = part.Shape.Scale; } else { if ((change & ObjectChangeType.Position) != 0) data.position = part.OffsetPosition; if ((change & ObjectChangeType.Rotation) != 0) data.rotation = part.RotationOffset; if ((change & ObjectChangeType.Scale) != 0) data.scale = part.Shape.Scale; } }
public SOPObjectMaterial(int m_face, SceneObjectPart m_parent) { this.m_face = m_face; this.m_parent = m_parent; CurrentCount++; TotalCount++; }
private void CreatePointEntity(Scene scene, UUID uuid, Vector3 groupPos) { SceneObjectPart y = new SceneObjectPart(); //Initialize part y.Name = "Very Small Point"; y.RegionHandle = scene.RegionInfo.RegionHandle; y.CreationDate = (Int32) (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; y.OwnerID = UUID.Zero; y.CreatorID = UUID.Zero; y.LastOwnerID = UUID.Zero; y.UUID = uuid; y.Shape = PrimitiveBaseShape.CreateBox(); y.Scale = new Vector3(0.01f,0.01f,0.01f); y.LastOwnerID = UUID.Zero; y.GroupPosition = groupPos; y.OffsetPosition = new Vector3(0, 0, 0); y.RotationOffset = new Quaternion(0,0,0,0); y.Velocity = new Vector3(0, 0, 0); y.RotationalVelocity = new Vector3(0, 0, 0); y.AngularVelocity = new Vector3(0, 0, 0); y.Acceleration = new Vector3(0, 0, 0); y.Flags = 0; y.TrimPermissions(); //Initialize group and add part as root part SceneObjectGroup x = new SceneObjectGroup(y); x.SetScene(scene); x.RegionHandle = scene.RegionInfo.RegionHandle; x.SetScene(scene); m_Entity = x; }
public bool Compare(SceneObjectPart part) { if (part != null) { if (part.ParentID == 0) { if (Position == part.ParentGroup.AbsolutePosition && Rotation == part.RotationOffset && Scale == part.Shape.Scale) return true; else return false; } else { if (Position == part.OffsetPosition && Rotation == part.RotationOffset && Scale == part.Shape.Scale) { return ParentRotation == part.ParentGroup.RootPart.RotationOffset; } else return false; } } return false; }
public void Enqueue(SceneObjectPart part) { lock (m_syncObject) { if (m_ids.Add(part.UUID)) m_queue.Enqueue(part); } }
public void Initialize(ScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID, ScriptProtectionModule module) { m_itemID = itemID; m_ScriptEngine = ScriptEngine; m_host = host; ScriptProtection = module; AssetConnector = Aurora.DataManager.DataManager.RequestPlugin<IAssetConnector>(); }
protected SceneObjectGroup CreateSO1(Scene scene, UUID ownerId) { string part1Name = "part1"; UUID part1Id = UUID.Parse("10000000-0000-0000-0000-000000000000"); SceneObjectPart part1 = new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) { Name = part1Name, UUID = part1Id }; return new SceneObjectGroup(part1); }
public void Enqueue(SceneObjectPart part) { lock (m_syncObject) { if (!m_ids.ContainsKey(part.UUID)) { m_ids.Add(part.UUID, true); m_queue.Enqueue(part); } } }
public void Initialize(ScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID, ScriptProtectionModule module) { m_ScriptEngine = ScriptEngine; m_host = host; m_localID = localID; m_itemID = itemID; ScriptProtection = module; m_comms = World.RequestModuleInterface<IScriptModuleComms>(); }
/// <summary> /// Add the part to the queue of parts for which we need to send an update to the client /// </summary> /// <param name="part"></param> public void QueuePartForUpdate(SceneObjectPart part, PrimUpdateFlags UpdateFlags) { lock (m_partsUpdateQueue) { PrimUpdate update = new PrimUpdate(); update.Part = part; update.UpdateFlags = UpdateFlags; m_partsUpdateQueue.Enqueue(update); } }
public void Enqueue(SceneObjectPart part) { lock (m_syncObject) { if (!m_ids.Contains(part.LocalId)) { m_ids.Add(part.LocalId); m_queue.Enqueue(part); } } }
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item) { m_ScriptEngine = ScriptEngine; m_host = host; if (m_ScriptEngine.Config.GetBoolean("AllowLightShareFunctions", false)) m_LSFunctionsEnabled = true; m_comms = m_ScriptEngine.World.RequestModuleInterface<IScriptModuleComms>(); if (m_comms == null) m_LSFunctionsEnabled = false; }
public void PlaybackState(SceneObjectPart part) { if (part != null) { part.Undoing = true; bool ChangedScale = false; bool ChangedRot = false; bool ChangedPos = false; if (part.UUID == part.ParentGroup.UUID) { if (Position != Vector3.Zero) { ChangedPos = true; part.ParentGroup.AbsolutePosition = Position; } ChangedRot = true; part.RotationOffset = Rotation; if (Scale != Vector3.Zero) { ChangedScale = true; part.Scale = Scale; } foreach (SceneObjectPart child in part.ParentGroup.ChildrenList) { if(child.UUID != part.UUID) child.Undo(); //No updates here, child undo will do it on their own } } else { if (Position != Vector3.Zero) { ChangedPos = true; part.FixOffsetPosition(Position,false); } ChangedRot = true; part.UpdateRotation(Rotation); if (Scale != Vector3.Zero) { ChangedScale = true; part.Resize(Scale); } } part.Undoing = false; part.ScheduleUpdate((ChangedScale ? PrimUpdateFlags.Shape : PrimUpdateFlags.None) | (ChangedPos ? PrimUpdateFlags.Position : PrimUpdateFlags.None) | (ChangedRot ? PrimUpdateFlags.Rotation : PrimUpdateFlags.None)); } }
/// <summary> /// Add a scene object item to the given part. /// </summary> /// <param name="scene"></param> /// <param name="sop"></param> /// <param name="itemName"></param> /// <param name="id"></param> public static TaskInventoryItem AddSceneObject(Scene scene, SceneObjectPart sop, string itemName, UUID id) { SceneObjectGroup taskSceneObject = SceneHelpers.CreateSceneObject(1, UUID.Zero); AssetBase taskSceneObjectAsset = AssetHelpers.CreateAsset(0x10, taskSceneObject); scene.AssetService.Store(taskSceneObjectAsset); TaskInventoryItem taskSceneObjectItem = new TaskInventoryItem { Name = itemName, AssetID = taskSceneObjectAsset.FullID, ItemID = id, Type = (int)AssetType.Object, InvType = (int)InventoryType.Object }; sop.Inventory.AddInventoryItem(taskSceneObjectItem, true); return taskSceneObjectItem; }
/// <summary> /// Add the part to the queue of parts for which we need to send an update to the client /// </summary> /// <param name="part"></param> public void QueuePartForUpdate(SceneObjectPart part, PrimUpdateFlags UpdateFlags) { lock (m_partsUpdateQueue) { PrimUpdate update = new PrimUpdate(); update.Part = part; update.UpdateFlags = UpdateFlags; m_partsUpdateQueue.Enqueue(update); //Make it check when the user comes around to it again if (m_objectsInView.Contains(part.UUID)) m_objectsInView.Remove(part.UUID); } }
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) { m_ScriptEngine = ScriptEngine; m_host = host; m_localID = localID; m_itemID = itemID; if (m_ScriptEngine.Config.GetBoolean("AllowMODFunctions", false)) m_MODFunctionsEnabled = true; m_comms = m_ScriptEngine.World.RequestModuleInterface<IScriptModuleComms>(); if (m_comms == null) m_MODFunctionsEnabled = false; }
public void Initialize( IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, WaitHandle coopSleepHandle) { m_ScriptEngine = scriptEngine; m_host = host; m_item = item; if (m_ScriptEngine.Config.GetBoolean("AllowMODFunctions", false)) m_MODFunctionsEnabled = true; m_comms = m_ScriptEngine.World.RequestModuleInterface<IScriptModuleComms>(); if (m_comms == null) m_MODFunctionsEnabled = false; }
//internal IWindLightSettingsModule m_lightShareModule; public void Initialize(IScriptModulePlugin ScriptEngine, SceneObjectPart host, uint localID, UUID itemID, ScriptProtectionModule module) { m_ScriptEngine = ScriptEngine; m_host = host; m_localID = localID; m_itemID = itemID; ScriptProtection = module; if (m_ScriptEngine.Config.GetBoolean("AllowLightShareFunctions", false)) m_LSFunctionsEnabled = true; m_comms = World.RequestModuleInterface<IScriptModuleComms>(); if (m_comms == null) m_LSFunctionsEnabled = false; }
public void Initialize(IScriptModulePlugin ScriptEngine, SceneObjectPart host, uint localID, UUID itemID, ScriptProtectionModule module) { m_ScriptEngine = ScriptEngine; m_host = host; m_localID = localID; m_itemID = itemID; if (m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) m_OSFunctionsEnabled = true; m_ScriptDelayFactor = m_ScriptEngine.Config.GetFloat("ScriptDelayFactor", 1.0f); m_ScriptDistanceFactor = m_ScriptEngine.Config.GetFloat("ScriptDistanceLimitFactor", 1.0f); ScriptProtection = module; }
public void TestDuplicateObject() { TestHelpers.InMethod(); // TestHelpers.EnableLogging(); Scene scene = new SceneHelpers().SetupScene(); UUID ownerId = new UUID("00000000-0000-0000-0000-000000000010"); string part1Name = "part1"; UUID part1Id = new UUID("00000000-0000-0000-0000-000000000001"); string part2Name = "part2"; UUID part2Id = new UUID("00000000-0000-0000-0000-000000000002"); SceneObjectPart part1 = new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) { Name = part1Name, UUID = part1Id }; SceneObjectGroup so = new SceneObjectGroup(part1); SceneObjectPart part2 = new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) { Name = part2Name, UUID = part2Id }; so.AddPart(part2); scene.AddNewSceneObject(so, false); SceneObjectGroup dupeSo = scene.SceneGraph.DuplicateObject( part1.LocalId, new Vector3(10, 0, 0), 0, ownerId, UUID.Zero, Quaternion.Identity); Assert.That(dupeSo.Parts.Length, Is.EqualTo(2)); SceneObjectPart dupePart1 = dupeSo.GetLinkNumPart(1); SceneObjectPart dupePart2 = dupeSo.GetLinkNumPart(2); Assert.That(dupePart1.LocalId, Is.Not.EqualTo(part1.LocalId)); Assert.That(dupePart2.LocalId, Is.Not.EqualTo(part2.LocalId)); Assert.That(dupePart1.Flags, Is.EqualTo(part1.Flags)); Assert.That(dupePart2.Flags, Is.EqualTo(part2.Flags)); /* Assert.That(part1.PhysActor, Is.Not.Null); Assert.That(part2.PhysActor, Is.Not.Null); Assert.That(dupePart1.PhysActor, Is.Not.Null); Assert.That(dupePart2.PhysActor, Is.Not.Null); */ // TestHelpers.DisableLogging(); }
/// <summary> /// Add a notecard item to the given part. /// </summary> /// <param name="scene"></param> /// <param name="part"></param> /// <param name="itemName"></param> /// <param name="itemID"></param> /// <param name="assetID"></param> /// <returns>The item that was added</returns> public static TaskInventoryItem AddNotecard(Scene scene, SceneObjectPart part, string itemName, UUID itemID, UUID assetID) { AssetNotecard nc = new AssetNotecard(); nc.BodyText = "Hello World!"; nc.Encode(); AssetBase ncAsset = AssetHelpers.CreateAsset(assetID, AssetType.Notecard, nc.AssetData, UUID.Zero); scene.AssetService.Store(ncAsset); TaskInventoryItem ncItem = new TaskInventoryItem { Name = itemName, AssetID = assetID, ItemID = itemID, Type = (int)AssetType.Notecard, InvType = (int)InventoryType.Notecard }; part.Inventory.AddInventoryItem(ncItem, true); return ncItem; }
public UndoState(SceneObjectPart part) { if (part != null) { if (part.UUID == part.ParentGroup.UUID) { Position = part.ParentGroup.AbsolutePosition; Rotation = part.RotationOffset; Scale = part.Shape.Scale; } else { Position = part.OffsetPosition; Rotation = part.RotationOffset; Scale = part.Shape.Scale; } } }
/// <summary> /// Add a notecard item to the given part. /// </summary> /// <param name="scene"></param> /// <param name="part"></param> /// <returns>The item that was added</returns> public static TaskInventoryItem AddNotecard(Scene scene, SceneObjectPart part) { AssetNotecard nc = new AssetNotecard(); nc.BodyText = "Hello World!"; nc.Encode(); UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000"); UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000"); AssetBase ncAsset = AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero); scene.AssetService.Store(ncAsset); TaskInventoryItem ncItem = new TaskInventoryItem { Name = "ncItem", AssetID = ncAssetUuid, ItemID = ncItemUuid, Type = (int)AssetType.Notecard, InvType = (int)InventoryType.Notecard }; part.Inventory.AddInventoryItem(ncItem, true); return ncItem; }
public void TestDelinkPersistence() { TestHelpers.InMethod(); //log4net.Config.XmlConfigurator.Configure(); TestScene scene = new SceneHelpers().SetupScene(); string rootPartName = "rootpart"; UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001"); string linkPartName = "linkpart"; UUID linkPartUuid = new UUID("00000000-0000-0000-0001-000000000000"); SceneObjectPart rootPart = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) { Name = rootPartName, UUID = rootPartUuid }; SceneObjectPart linkPart = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) { Name = linkPartName, UUID = linkPartUuid }; SceneObjectGroup linkGroup = new SceneObjectGroup(linkPart); scene.AddNewSceneObject(linkGroup, true); SceneObjectGroup sog = new SceneObjectGroup(rootPart); scene.AddNewSceneObject(sog, true); Assert.IsFalse(sog.GroupContainsForeignPrims); sog.LinkToGroup(linkGroup); Assert.IsTrue(sog.GroupContainsForeignPrims); scene.Backup(true); Assert.AreEqual(1, scene.SimulationDataService.LoadObjects(scene.RegionInfo.RegionID).Count); // These changes should occur immediately without waiting for a backup pass SceneObjectGroup groupToDelete = sog.DelinkFromGroup(linkPart, false); Assert.IsFalse(groupToDelete.GroupContainsForeignPrims); scene.DeleteSceneObject(groupToDelete, false); List<SceneObjectGroup> storedObjects = scene.SimulationDataService.LoadObjects(scene.RegionInfo.RegionID); Assert.AreEqual(1, storedObjects.Count); Assert.AreEqual(1, storedObjects[0].Parts.Length); Assert.IsTrue(storedObjects[0].ContainsPart(rootPartUuid)); }