All pastes #796355 Raw Edit

Untitled

public text v1 · immutable
#796355 ·published 2007-11-25 00:23 UTC
rendered paste body
/*
* Copyright (c) DeepThink Pty Ltd, http://www.deepthink.com.au
*/

using Nini.Config;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes;
using libsecondlife;

namespace OpenSim.Region.Environment.Modules
{
    public class DTLCreatures : IRegionModule
    {
        private Scene m_scene;
        private LogBase m_log;

        public DTLCreatures()
        {
        }

        public void Initialise(Scene scene, IConfigSource config)
        {
            m_scene = scene;
            m_log = MainLog.Instance;
        }

        public void PostInitialise()
        {
            // Insert some critters into our scene.
            m_log.Verbose("DTLCREATURES", "Inserting critters");

            m_scene.AddEntity(new DTLCritter(m_scene, m_scene.RegionInfo.RegionHandle, m_scene.RegionInfo.MasterAvatarAssignedUUID, m_scene.PrimIDAllocate(), new LLVector3(128, 128, 128)));
        }

        public void Close()
        {
        }

        public string Name
        {
            get { return "DTLCreatures"; }
        }

        public bool IsSharedModule
        {
            get { return false; }
        }

        /// <summary>
        /// DeepThinkLabs Critter
        /// 
        /// A very simple automaton which can be inserted into the scene.
        /// </summary>
        private class DTLCritter : SceneObjectGroup
        {
            /// <summary>
            /// A subprimitive on the critter.
            /// </summary>
            private class DTLCritterPart : SceneObjectPart
            {
                public DTLCritterPart(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID,
                                 LLVector3 groupPosition, LLVector3 offsetPosition, LLQuaternion rotationDirection) :
                    base(regionHandle, parent, ownerID, localID, new BoxShape(0.5f), groupPosition, rotationDirection, offsetPosition)
                {
                    this.SetText("CritterPart", new Axiom.Math.Vector3(1.0f, 0.0f, 0.0f), 1.0);
                }

                /// <summary>
                /// Used to make sub-parts move around a little
                /// </summary>
                public override void UpdateMovement()
                {
                    this.UpdateOffSet(new libsecondlife.LLVector3(0, 0, (float)System.Math.Sin(Util.UnixTimeSinceEpoch() / 15)));

                    base.UpdateMovement();
                }
            }

            public DTLCritter(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos)
                : base(scene, regionHandle, ownerID, localID, pos, new BoxShape(1))
            {
                AddPart(new DTLCritterPart(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, LLVector3.Zero, LLQuaternion.Identity));
                UpdateParentIDs();
            }

            /// <summary>
            /// Move the critter itself here
            /// </summary>
            public override void UpdateMovement()
            {
                UpdateGroupPosition(new LLVector3(128, 128, 80));

                base.UpdateMovement();
            }
        }
    }
}