Files
opensim/OpenSim/Region/Examples/SimpleApp/MyWorld.cs
MW 8e3b2392d1 Start of trying to make Region/Scene more modular.
Added preliminary IRegionModule interface.
Also have a work in progress way of Modules registering optional API methods (kind of like Apache optional functions). But there must be a cleaner/nicer way in c# of doing these than the current way.
Added three work in progress modules: ChatModule (simple handles in world chat, but by moving this to a module, we could support other types of chat modules, ie like a irc - opensim bridge module. ) , AvatarProfilesModule and XferModule. 
Moved most of the code from  Scene.ModifyTerrain() into the BasicTerrain library, as the start of trying to make that more modular. 
Stopped Child agents showing up as part of the "show users" command.
2007-08-28 14:21:17 +00:00

86 lines
2.6 KiB
C#

using System.Collections.Generic;
using libsecondlife;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Types;
using OpenSim.Region.Environment.Scenes;
using OpenSim.Region.Terrain;
using OpenSim.Region.Environment;
using OpenSim.Framework.Communications.Caches;
using Avatar=OpenSim.Region.Environment.Scenes.ScenePresence;
namespace SimpleApp
{
public class MyWorld : Scene
{
private List<ScenePresence> m_avatars;
public MyWorld( RegionInfo regionInfo, AgentCircuitManager authen, CommunicationsManager commsMan, AssetCache assetCach, StorageManager storeMan, BaseHttpServer httpServer, ModuleLoader moduleLoader)
: base( regionInfo, authen, commsMan, assetCach, storeMan, httpServer, moduleLoader)
{
m_avatars = new List<Avatar>();
}
public override void LoadWorldMap()
{
float[] map = new float[65536];
for (int i = 0; i < 65536; i++)
{
int x = i % 256;
int y = i / 256;
map[i] = 25f;
}
this.Terrain.GetHeights1D(map);
this.CreateTerrainTexture();
}
public override void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient)
{
foreach (EntityBase ent in Entities.Values)
{
if (ent is SceneObjectGroup)
{
SceneObjectGroup obj = ent as SceneObjectGroup;
if( obj.HasChildPrim( localID ) )
{
obj.ObjectGrabHandler(localID, offsetPos, remoteClient);
return;
}
}
}
base.ProcessObjectGrab(localID, offsetPos, remoteClient);
}
#region IWorld Members
override public void AddNewClient(IClientAPI client, bool child)
{
SubscribeToClientEvents(client);
ScenePresence avatar = CreateAndAddScenePresence(client);
avatar.AbsolutePosition = new LLVector3(128, 128, 26);
LLVector3 pos = new LLVector3(128, 128, 128);
client.OnCompleteMovementToRegion += delegate()
{
client.SendChatMessage("Welcome to My World.", 1, pos, "System", LLUUID.Zero );
};
client.SendRegionHandshake(m_regInfo);
}
#endregion
}
}