using libsecondlife; using libsecondlife.Packets; namespace OpenSim.Framework.Types { public enum ProfileShape : byte { Circle = 0, Square = 1, IsometricTriangle = 2, EquilateralTriangle = 3, RightTriangle = 4, HalfCircle = 5 } public enum HollowShape : byte { Same = 0, // Fill in... } public class PrimitiveBaseShape { private static byte[] m_defaultTextureEntry; public byte PCode; public ushort PathBegin; public ushort PathEnd; public byte PathScaleX; public byte PathScaleY; public byte PathShearX; public byte PathShearY; public sbyte PathSkew; public ushort ProfileBegin; public ushort ProfileEnd; public LLVector3 Scale; public byte PathCurve; public byte ProfileCurve; public ushort ProfileHollow; public sbyte PathRadiusOffset; public byte PathRevolutions; public sbyte PathTaperX; public sbyte PathTaperY; public sbyte PathTwist; public sbyte PathTwistBegin; public byte[] TextureEntry; // a LL textureEntry in byte[] format public byte[] ExtraParams; public ProfileShape ProfileShape { get { return (ProfileShape)(ProfileCurve & 0xf); } set { byte oldValueMasked = (byte)(ProfileCurve & 0xf0); ProfileCurve = (byte)(oldValueMasked | (byte)value); } } public HollowShape HoleShape { get { return (HollowShape)(ProfileHollow & 0xf0); } set { byte oldValueMasked = (byte)(ProfileHollow & 0xf0); ProfileHollow = (byte)(oldValueMasked | (byte)value); } } public LLVector3 PrimScale { get { return this.Scale; } } static PrimitiveBaseShape() { m_defaultTextureEntry = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-9999-000000000005")).ToBytes(); } public PrimitiveBaseShape() { ExtraParams = new byte[1]; TextureEntry = m_defaultTextureEntry; } //void returns need to change of course public virtual void GetMesh() { } public PrimitiveBaseShape Copy() { return (PrimitiveBaseShape)this.MemberwiseClone(); } } public class GenericShape : PrimitiveBaseShape { public GenericShape() : base() { } } public class BoxShape : PrimitiveBaseShape { public BoxShape() : base() { PathCurve = 16; ProfileShape = ProfileShape.Square; PCode = 9; PathScaleX = 100; PathScaleY = 100; } public void SetSide( float side ) { Scale = new LLVector3( side, side, side ); } public static BoxShape Default { get { BoxShape boxShape = new BoxShape(); boxShape.SetSide( 0.5f ); return boxShape; } } } }