Hi,

Can someone tell me what am I doing wrong, please?

I have a Region Module which works OK,
but when I try to set color to the prims, which are created in this module, nothing changes - prims don't change color.

I attached my source file, I set colors in DoHelloWorld method.
BTW can someone explain to me where is first prim, it isn't in my Scene.

robert_d
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Reflection;

using log4net;
using Nini.Config;
using OpenMetaverse;
//using OpenMetaverseTypes; //this is private library of OpenMetaverse

using OpenSim.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;


namespace HelloWorldModule
{
  public class HelloWorld : IRegionModule
  {
    private static readonly ILog m_log =
      LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    // A Scene is OpenSim's representation of the contents of a region
    //List<Scene> m_scenes = new List<Scene>();
    Scene myScene;

    Dictionary<Scene, List<SceneObjectGroup>> scene_prims = new 
Dictionary<Scene,
      List<SceneObjectGroup>>();

    int counter = 0;
    bool positive = true;




    #region IRegionModule interface

    public void Initialise(Scene scene, IConfigSource config)
    {// OpenSim sends us two parameters: a Scene object and a configuration 
object.
      // The Scene object is our code's main link to OpenSim, it's how we get 
      // to access and modify things in the world and beyond.

      m_log.Info("[Hello World Module] Initializing...    
<-------------------------------------");
      m_log.Info(" ");
      m_log.Info(" ");

      //m_scenes.Add(scene);
      myScene = scene;
    }




    public void PostInitialise()
    {// You should look at PostInitialise as the Main method of our region 
modules.

      // Subscribe to an OpenSim event called OnFrame.
      // OnFrame is triggered every time there is a render frame in opensim, 
      // which is about 20 times per second.
      //m_scenes[0].EventManager.OnFrame += new 
EventManager.OnFrameDelegate(OnTick);
      //myScene.EventManager.OnFrame += new 
EventManager.OnFrameDelegate(OnTick);

      //foreach (Scene s in m_scenes) //DoHelloWorld() will be run in every 
region
      //  DoHelloWorld(s);
      //DoHelloWorld(myScene);


      //List<ScenePresence> Avatars = myScene.GetAvatars();

      //foreach (ScenePresence sp in Avatars)
      //  //sp.ControllingClient.OnChatFromClient += new 
ChatMessage(Handler_OnChatFromClient);
      //  sp.ControllingClient.OnChatFromClient += Handler_OnChatFromClient;

      List<EntityBase> entities = myScene.GetEntities();
      foreach (EntityBase entity in entities)
      {
        if (entity is SceneObjectGroup)
        {
          m_log.Info("Color is: " + ((SceneObjectGroup)entity).RootPart.Color);
        }
      }

      myScene.EventManager.OnChatFromClient += Handler_OnChatFromClient;
    }

    public void Close()
    {
    }

    public string Name
    {
      get { return "Hello World Module"; }
    }

    // This is shared module. If you want to use module in only one region use
    // not shared (singleton) module.
    //public bool IsSharedModule
    //{
    //  get { return true; }
    //}
    public bool IsSharedModule
    {
      get { return false; }
    }

    #endregion




    void DoHelloWorld(Scene scene)
    {
      // We're going to write HELLO with prims

      List<SceneObjectGroup> prims1 = new List<SceneObjectGroup>();
      List<SceneObjectGroup> prims2 = new List<SceneObjectGroup>();

      Color color1 = Color.FromArgb(255, 255, 0, 0);
      //Color color2 = Color.FromArgb(128, 0, 255, 0);
      Color color2 = Color.FromName("Black");
      Color color3 = Color.FromArgb(0, 0, 0, 255);

      m_log.Info(" ");
      m_log.Info("[Hello World Module] I am going to build prims ...");
      //m_log.Info("Press enter key");
      //Console.ReadLine();

      // First prim: |
      SceneObjectPart sop = new SceneObjectPart();
      sop.UUID = new UUID();
      sop.CreatorID = UUID.Zero;
      sop.Shape = PrimitiveBaseShape.CreateBox();
      //sop.GroupPosition = pos;
      sop.Material = (byte)Material.Metal;
      sop.Color = color1;
      sop.Scale = new Vector3(0.3f, 0.3f, 2f);
      //SceneObjectGroup sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      //sog.RootPart.Scale = new Vector3(0.3f, 0.3f, 2f);
      SceneObjectGroup sog = new SceneObjectGroup();
      Vector3 pos = new Vector3(120, 128, 30);
      sog.AbsolutePosition = pos;
      sog.SetRootPart(sop);
      prims1.Add(sog);


      // A scene object group is conceptually an object in the scene.  
      // The object is constituted of SceneObjectParts (child prims), 
      // one of which is considered the root part. 


      // Second prim: -
      pos = new Vector3(120.5f, 128f, 30f);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(1, 0.3f, 0.3f);
      sog.RootPart.Material = (byte)Material.Metal;
      //sog.RootPart.Material = 1;
      sog.RootPart.Color = color2;
      m_log.Info("Color2 is: " + sog.RootPart.Color.ToString());
      prims1.Add(sog);


      // Third prim: |
      pos = new Vector3(121, 128, 30);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(0.3f, 0.3f, 2);
      sog.RootPart.Material = (byte)Material.Metal;
      sog.RootPart.Material = 2;
      sog.RootPart.Color = color3;
      m_log.Info("Color3 is: " + sog.RootPart.Color.ToString());
      prims1.Add(sog);

      // Fourth prim: |
      pos = new Vector3(122, 128, 30);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(0.3f, 0.3f, 2);
      prims2.Add(sog);

      // Fifth prim: - (up)
      pos = new Vector3(122.5f, 128, 31);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(1, 0.3f, 0.3f);
      prims2.Add(sog);

      // Sixth prim: - (middle)
      pos = new Vector3(122.5f, 128, 30);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(1, 0.3f, 0.3f);
      prims2.Add(sog);

      // Seventh prim: - (low)
      pos = new Vector3(122.5f, 128, 29);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(1, 0.3f, 0.3f);
      prims2.Add(sog);

      // Eighth prim: | 
      pos = new Vector3(124, 128, 30);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(0.3f, 0.3f, 2);
      prims1.Add(sog);

      // Ninth prim: _
      pos = new Vector3(124.5f, 128, 29);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(1, 0.3f, 0.3f);
      prims1.Add(sog);

      // Tenth prim: | 
      pos = new Vector3(126, 128, 30);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(0.3f, 0.3f, 2);
      prims2.Add(sog);

      // Eleventh prim: _
      pos = new Vector3(126.5f, 128, 29);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(1, 0.3f, 0.3f);
      prims2.Add(sog);

      // Twelveth prim: O
      pos = new Vector3(129, 128, 30);
      sog = new SceneObjectGroup(UUID.Zero, pos, 
PrimitiveBaseShape.CreateBox());
      sog.RootPart.Scale = new Vector3(2, 0.3f, 2);
      prims1.Add(sog);

      // Add prim1 to the managed objects. Only prims from prims1 list will be 
moved 
      // in OnTick event handler
      scene_prims.Add(scene, prims1);

      // Now place all prims visibly on the scene
      foreach (SceneObjectGroup sogr in prims1)
      {
        scene.AddNewSceneObject(sogr, false);
      }
      foreach (SceneObjectGroup sogr in prims2)
      {
        scene.AddNewSceneObject(sogr, false);
      }

    }//DoHelloWorld()


    ////////////////////////////// Event Handlers 
////////////////////////////////////




    void Handler_OnChatFromClient(object sender, OSChatMessage e)
    {
      //m_log.Info("Inside Handler_OnChatFromClient()");

      switch (e.Message.ToLower())
      {
        case "build":
          //DoHelloWorld(myScene);
          break;
        case "start":
          //myScene.EventManager.OnFrame += new 
EventManager.OnFrameDelegate(OnTick);
          myScene.EventManager.OnFrame += OnTick;
          break;
        case "stop":
          myScene.EventManager.OnFrame -= OnTick;
          break;
      }


    }




    void OnTick()
    {
      if (counter++ % 25 != 0)
        return;

      // Uncomment if you want to see this on your console
      //m_log.Debug("[HELLOWORLD] Tick!");

      foreach (KeyValuePair<Scene, List<SceneObjectGroup>> kvp in scene_prims)
      {
        foreach (SceneObjectGroup sog in kvp.Value)
        {
          if (positive)
            sog.AbsolutePosition += new Vector3(5, 5, 0);
          else
            sog.AbsolutePosition += new Vector3(-5, -5, 0);

          // Tell OpenSim to schedule the prims for an update, 
          // so that we can see them move.
          sog.ScheduleGroupForTerseUpdate();
        }
      }
      positive = !positive;
    }//OnTick()

  }//class HelloWorld
}
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev

Reply via email to