From b8619386eb31a2bf3f460e464d0237f6bee5f56f Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Sat, 11 Apr 2009 10:21:04 +0000 Subject: * Minor MRM Cleanup * Interfaces now live in Interfaces subdirectory. * Namespace does not yet reflect this change. * Final namespace for MRMs will probably sit somewhere around OpenSim.Extend.MRM[?] --- .../Scripting/Minimodule/Interfaces/IObject.cs | 223 +++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs (limited to 'OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs') diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs new file mode 100644 index 0000000..e17b716 --- /dev/null +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs @@ -0,0 +1,223 @@ +/* + * 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.Drawing; +using OpenMetaverse; +using OpenSim.Region.OptionalModules.Scripting.Minimodule.Object; + +namespace OpenSim.Region.OptionalModules.Scripting.Minimodule +{ + public class TouchEventArgs : EventArgs + { + public IAvatar Avatar; + + public Vector3 TouchBiNormal; + public Vector3 TouchNormal; + public Vector3 TouchPosition; + + public Vector2 TouchUV; + public Vector2 TouchST; + + public int TouchMaterialIndex; + } + + public delegate void OnTouchDelegate(IObject sender, TouchEventArgs e); + + public interface IObject : IEntity + { + #region Events + + event OnTouchDelegate OnTouch; + + #endregion + + /// + /// Returns whether or not this object is still in the world. + /// Eg, if you store an IObject reference, however the object + /// is deleted before you use it, it will throw a NullReference + /// exception. 'Exists' allows you to check the object is still + /// in play before utilizing it. + /// + /// + /// IObject deleteMe = World.Objects[0]; + /// + /// if (deleteMe.Exists) { + /// deleteMe.Say("Hello, I still exist!"); + /// } + /// + /// World.Objects.Remove(deleteMe); + /// + /// if (!deleteMe.Exists) { + /// Host.Console.Info("I was deleted"); + /// } + /// + /// + /// Objects should be near-guarunteed to exist for any event which + /// passes them as an argument. Storing an object for a longer period + /// of time however will limit their reliability. + /// + /// It is a good practice to use Try/Catch blocks handling for + /// NullReferenceException, when accessing remote objects. + /// + bool Exists { get; } + + /// + /// The local region-unique ID for this object. + /// + uint LocalID { get; } + + /// + /// The description assigned to this object. + /// + String Description { get; set; } + + /// + /// Returns the root object of a linkset. If this object is the root, it will return itself. + /// + IObject Root { get; } + + /// + /// Returns a collection of objects which are linked to the current object. Does not include the root object. + /// + IObject[] Children { get; } + + /// + /// Returns a list of materials attached to this object. Each may contain unique texture + /// and other visual information. For primitive based objects, this correlates with + /// Object Faces. For mesh based objects, this correlates with Materials. + /// + IObjectMaterial[] Materials { get; } + + /// + /// The bounding box of the object. Primitive and Mesh objects alike are scaled to fit within these bounds. + /// + Vector3 Scale { get; set; } + + /// + /// The rotation of the object relative to the Scene + /// + Quaternion WorldRotation { get; set; } + + /// + /// The rotation of the object relative to a parent object + /// If root, works the same as WorldRotation + /// + Quaternion OffsetRotation { get; set; } + + /// + /// The position of the object relative to a parent object + /// If root, works the same as WorldPosition + /// + Vector3 OffsetPosition { get; set; } + + Vector3 SitTarget { get; set; } + String SitTargetText { get; set; } + + String TouchText { get; set; } + + /// + /// Text to be associated with this object, in the + /// Second Life(r) viewer, this is shown above the + /// object. + /// + String Text { get; set; } + + bool IsRotationLockedX { get; set; } // SetStatus(!ROTATE_X) + bool IsRotationLockedY { get; set; } // SetStatus(!ROTATE_Y) + bool IsRotationLockedZ { get; set; } // SetStatus(!ROTATE_Z) + bool IsSandboxed { get; set; } // SetStatus(SANDBOX) + bool IsImmotile { get; set; } // SetStatus(BLOCK_GRAB) + bool IsAlwaysReturned { get; set; } // SetStatus(!DIE_AT_EDGE) + bool IsTemporary { get; set; } // TEMP_ON_REZ + + bool IsFlexible { get; set; } + + PrimType PrimShape { get; set; } + // TODO: + // PrimHole + // Repeats, Offsets, Cut/Dimple/ProfileCut + // Hollow, Twist, HoleSize, + // Taper[A+B], Shear[A+B], Revolutions, + // RadiusOffset, Skew + + PhysicsMaterial PhysicsMaterial { get; set; } + + IObjectPhysics Physics { get; } + + + /// + /// Causes the object to speak to its surroundings, + /// equivilent to LSL/OSSL llSay + /// + /// The message to send to the user + void Say(string msg); + + } + + public enum PhysicsMaterial + { + Default, + Glass, + Metal, + Plastic, + Wood, + Rubber, + Stone, + 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, + Planar + } + + public interface IObjectMaterial + { + Color Color { get; set; } + UUID Texture { get; set; } + TextureMapping Mapping { get; set; } // SetPrimParms(PRIM_TEXGEN) + bool Bright { get; set; } // SetPrimParms(FULLBRIGHT) + double Bloom { get; set; } // SetPrimParms(GLOW) + bool Shiny { get; set; } // SetPrimParms(SHINY) + bool BumpMap { get; set; } // SetPrimParms(BUMPMAP) [DEPRECIATE IN FAVOUR OF UUID?] + } +} -- cgit v1.1