From b2a7c1468e73294cd906574a29b8876bfd3e43e7 Mon Sep 17 00:00:00 2001
From: Adam Frisby
Date: Sat, 18 Apr 2009 05:43:40 +0000
Subject: * Adds IObject.Shape to MRM * Implements Sculpty modification support
to MRM * Example: IObject.Shape.SculptMap = new UUID("0000-0000-0000....");
---
.../Scripting/Minimodule/Interfaces/IObject.cs | 16 +----
.../Scripting/Minimodule/Interfaces/IScheduler.cs | 46 ++++--------
.../Scripting/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
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs
index dc2e3fa..ef1e896 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 46b5041..f850a94 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 0000000..ed24680
--- /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 22a1126..f29522f 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)
@@ -569,5 +571,72 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
}
#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
}
}
--
cgit v1.1