From b2a7c1468e73294cd906574a29b8876bfd3e43e7 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Sat, 18 Apr 2009 05:43:40 +0000 Subject: [PATCH] * Adds IObject.Shape to MRM * Implements Sculpty modification support to MRM * Example: IObject.Shape.SculptMap = new UUID("0000-0000-0000...."); --- .../Minimodule/Interfaces/IObject.cs | 16 +--- .../Minimodule/Interfaces/IScheduler.cs | 46 ++++------ .../Minimodule/Object/IObjectShape.cs | 48 +++++++++++ .../Scripting/Minimodule/SOPObject.cs | 83 +++++++++++++++++-- 4 files changed, 140 insertions(+), 53 deletions(-) create mode 100644 OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectShape.cs diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs index dc2e3fa290..ef1e896a08 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs @@ -157,7 +157,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule bool IsFlexible { get; set; } - PrimType PrimShape { get; set; } + IObjectShape Shape { get; } + // TODO: // PrimHole // Repeats, Offsets, Cut/Dimple/ProfileCut @@ -191,19 +192,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule Flesh } - public enum PrimType - { - NotPrimitive = 255, - Box = 0, - Cylinder = 1, - Prism = 2, - Sphere = 3, - Torus = 4, - Tube = 5, - Ring = 6, - Sculpt = 7 - } - public enum TextureMapping { Default, diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IScheduler.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IScheduler.cs index 46b50412e5..f850a94add 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IScheduler.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IScheduler.cs @@ -1,31 +1,4 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; +using System; namespace OpenSim.Region.OptionalModules.Scripting.Minimodule { @@ -50,21 +23,30 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule /// Fire this scheduler only when the region has /// a user in it. /// - bool WhenRegionOccupied { get; set; } + bool IfOccupied { get; set; } + + /// + /// Fire this only when simulator performance + /// is reasonable. (eg sysload <= 1.0) + /// + bool IfHealthy { get; set; } /// /// Fire this event only when the region is visible /// to a child agent, or there is a full agent /// in this region. /// - bool WhenRegionVisible { get; set; } + bool IfVisible { get; set; } /// /// Determines whether this runs in the master scheduler thread, or a new thread /// is spawned to handle your request. Running in scheduler may mean that your - /// code does not execute perfectly on time, however will result in a lower - /// processor cost to running your code. + /// code does not execute perfectly on time, however will result in better + /// region performance. /// + /// + /// Default: true + /// bool Schedule { get; set; } } } diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectShape.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectShape.cs new file mode 100644 index 0000000000..ed246804ea --- /dev/null +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectShape.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OpenMetaverse; + +namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Object +{ + public enum SculptType + { + Default = 1, + Sphere = 1, + Torus = 2, + Plane = 3, + Cylinder = 4 + } + + public enum HoleShape + { + Default = 0x00, + Circle = 0x10, + Square = 0x20, + Triangle = 0x30 + } + + public enum PrimType + { + NotPrimitive = 255, + Box = 0, + Cylinder = 1, + Prism = 2, + Sphere = 3, + Torus = 4, + Tube = 5, + Ring = 6, + Sculpt = 7 + } + + public interface IObjectShape + { + UUID SculptMap { get; set; } + SculptType SculptType { get; set; } + + HoleShape HoleType { get; set; } + Double HoleSize { get; set; } + PrimType PrimType { get; set; } + + } +} \ No newline at end of file diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs index 22a1126321..f29522fd41 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs @@ -28,14 +28,17 @@ using System; using System.Collections.Generic; using OpenMetaverse; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Region.Framework.Scenes; using OpenSim.Region.OptionalModules.Scripting.Minimodule.Object; using OpenSim.Region.Physics.Manager; +using PrimType=OpenSim.Region.OptionalModules.Scripting.Minimodule.Object.PrimType; +using SculptType=OpenSim.Region.OptionalModules.Scripting.Minimodule.Object.SculptType; namespace OpenSim.Region.OptionalModules.Scripting.Minimodule { - class SOPObject : MarshalByRefObject, IObject, IObjectPhysics + class SOPObject : MarshalByRefObject, IObject, IObjectPhysics, IObjectShape { private readonly Scene m_rootScene; private readonly uint m_localID; @@ -282,12 +285,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule set { throw new System.NotImplementedException(); } } - public PrimType PrimShape - { - get { return (PrimType) getScriptPrimType(GetSOP().Shape); } - set { throw new System.NotImplementedException(); } - } - public PhysicsMaterial PhysicsMaterial { get { throw new System.NotImplementedException(); } @@ -299,6 +296,11 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule get { return this; } } + public IObjectShape Shape + { + get { return this; } + } + #region Public Functions public void Say(string msg) @@ -568,6 +570,73 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule GetSOP().PhysActor.SetMomentum(new PhysicsVector(momentum.X, momentum.Y, momentum.Z)); } + #endregion + + #region Implementation of IObjectShape + + private UUID m_sculptMap = UUID.Zero; + + public UUID SculptMap + { + get { return m_sculptMap; } + set + { + m_sculptMap = value; + SetPrimitiveSculpted(SculptMap, (byte) SculptType); + } + } + + private SculptType m_sculptType = Object.SculptType.Default; + + public SculptType SculptType + { + get { return m_sculptType; } + set + { + m_sculptType = value; + SetPrimitiveSculpted(SculptMap, (byte) SculptType); + } + } + + public HoleShape HoleType + { + get { throw new System.NotImplementedException(); } + set { throw new System.NotImplementedException(); } + } + + public double HoleSize + { + get { throw new System.NotImplementedException(); } + set { throw new System.NotImplementedException(); } + } + + public PrimType PrimType + { + get { return (PrimType)getScriptPrimType(GetSOP().Shape); } + set { throw new System.NotImplementedException(); } + } + + private void SetPrimitiveSculpted(UUID map, byte type) + { + ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); + + SceneObjectPart part = GetSOP(); + + UUID sculptId = map; + + shapeBlock.ObjectLocalID = part.LocalId; + shapeBlock.PathScaleX = 100; + shapeBlock.PathScaleY = 150; + + // retain pathcurve + shapeBlock.PathCurve = part.Shape.PathCurve; + + part.Shape.SetSculptData((byte)type, sculptId); + part.Shape.SculptEntry = true; + part.UpdateShape(shapeBlock); + } + + #endregion } }