* Adds IObject.Shape to MRM

* Implements Sculpty modification support to MRM
* Example: IObject.Shape.SculptMap = new UUID("0000-0000-0000....");
0.6.5-rc1
Adam Frisby 2009-04-18 05:43:40 +00:00
parent c41d2a1e3d
commit b2a7c1468e
4 changed files with 140 additions and 53 deletions

View File

@ -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,

View File

@ -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.
/// </summary>
bool WhenRegionOccupied { get; set; }
bool IfOccupied { get; set; }
/// <summary>
/// Fire this only when simulator performance
/// is reasonable. (eg sysload <= 1.0)
/// </summary>
bool IfHealthy { get; set; }
/// <summary>
/// Fire this event only when the region is visible
/// to a child agent, or there is a full agent
/// in this region.
/// </summary>
bool WhenRegionVisible { get; set; }
bool IfVisible { get; set; }
/// <summary>
/// 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.
/// </summary>
/// <remarks>
/// Default: true
/// </remarks>
bool Schedule { get; set; }
}
}

View File

@ -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; }
}
}

View File

@ -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
}
}