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