* The world can not contain ScriptFactories that creates unique instances of scripts for entities.
* Created Scripts folder to house trusted Scripts * The test script now lives in Scripts/FollowRandomAvatar.cs0.1-prestable
parent
7169acc47e
commit
f12ceff692
|
@ -10,6 +10,7 @@ using OpenSim.Framework.Inventory;
|
||||||
using libsecondlife;
|
using libsecondlife;
|
||||||
using OpenSim.RegionServer.world.scripting;
|
using OpenSim.RegionServer.world.scripting;
|
||||||
using Avatar=libsecondlife.Avatar;
|
using Avatar=libsecondlife.Avatar;
|
||||||
|
using OpenSim.RegionServer.world.scripting.Scripts;
|
||||||
|
|
||||||
namespace OpenSim.CAPS
|
namespace OpenSim.CAPS
|
||||||
{
|
{
|
||||||
|
@ -139,35 +140,6 @@ namespace OpenSim.CAPS
|
||||||
return responseString;
|
return responseString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class TestScript : Script
|
|
||||||
{
|
|
||||||
public TestScript()
|
|
||||||
: base(LLUUID.Random())
|
|
||||||
{
|
|
||||||
OnFrame += MyOnFrame;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MyOnFrame(IScriptContext context)
|
|
||||||
{
|
|
||||||
LLVector3 pos = context.Entity.Pos;
|
|
||||||
|
|
||||||
IScriptReadonlyEntity avatar;
|
|
||||||
|
|
||||||
if( context.TryGetRandomAvatar( out avatar ) )
|
|
||||||
{
|
|
||||||
LLVector3 avatarPos = avatar.Pos;
|
|
||||||
|
|
||||||
float x = pos.X + ((float)avatarPos.X.CompareTo(pos.X))/2;
|
|
||||||
float y = pos.Y + ((float)avatarPos.Y.CompareTo(pos.Y))/2;
|
|
||||||
|
|
||||||
LLVector3 newPos = new LLVector3( x, y, pos.Z );
|
|
||||||
|
|
||||||
context.Entity.Pos = newPos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string AddTestScript(string request, string path)
|
private string AddTestScript(string request, string path)
|
||||||
{
|
{
|
||||||
int index = path.LastIndexOf('/');
|
int index = path.LastIndexOf('/');
|
||||||
|
@ -179,7 +151,7 @@ namespace OpenSim.CAPS
|
||||||
if( LLUUID.TryParse( lluidStr, out id ) )
|
if( LLUUID.TryParse( lluidStr, out id ) )
|
||||||
{
|
{
|
||||||
// This is just here for concept purposes... Remove!
|
// This is just here for concept purposes... Remove!
|
||||||
m_world.AddScript( m_world.Entities[id], new TestScript());
|
m_world.AddScript( m_world.Entities[id], new FollowRandomAvatar());
|
||||||
return String.Format("Added new script to object [{0}]", id);
|
return String.Format("Added new script to object [{0}]", id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -196,6 +196,12 @@
|
||||||
<Compile Include="world\scripting\Script.cs">
|
<Compile Include="world\scripting\Script.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="world\scripting\ScriptFactory.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="world\scripting\Scripts\FollowRandomAvatar.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
|
|
@ -39,6 +39,8 @@
|
||||||
<include name="world/scripting/IScriptEntity.cs" />
|
<include name="world/scripting/IScriptEntity.cs" />
|
||||||
<include name="world/scripting/IScriptHandler.cs" />
|
<include name="world/scripting/IScriptHandler.cs" />
|
||||||
<include name="world/scripting/Script.cs" />
|
<include name="world/scripting/Script.cs" />
|
||||||
|
<include name="world/scripting/ScriptFactory.cs" />
|
||||||
|
<include name="world/scripting/Scripts/FollowRandomAvatar.cs" />
|
||||||
</sources>
|
</sources>
|
||||||
<references basedir="${project::get-base-directory()}">
|
<references basedir="${project::get-base-directory()}">
|
||||||
<lib>
|
<lib>
|
||||||
|
|
|
@ -13,6 +13,7 @@ using OpenSim.Framework.Inventory;
|
||||||
using OpenSim.Assets;
|
using OpenSim.Assets;
|
||||||
using OpenSim.world.scripting;
|
using OpenSim.world.scripting;
|
||||||
using OpenSim.RegionServer.world.scripting;
|
using OpenSim.RegionServer.world.scripting;
|
||||||
|
using OpenSim.RegionServer.world.scripting.Scripts;
|
||||||
|
|
||||||
namespace OpenSim.world
|
namespace OpenSim.world
|
||||||
{
|
{
|
||||||
|
@ -32,20 +33,20 @@ namespace OpenSim.world
|
||||||
private int storageCount;
|
private int storageCount;
|
||||||
private Dictionary<uint, SimClient> m_clientThreads;
|
private Dictionary<uint, SimClient> m_clientThreads;
|
||||||
private Dictionary<LLUUID, ScriptHandler> m_scriptHandlers;
|
private Dictionary<LLUUID, ScriptHandler> m_scriptHandlers;
|
||||||
private Dictionary<string, Script> m_scripts;
|
private Dictionary<string, ScriptFactory> m_scripts;
|
||||||
private ulong m_regionHandle;
|
private ulong m_regionHandle;
|
||||||
private string m_regionName;
|
private string m_regionName;
|
||||||
private InventoryCache _inventoryCache;
|
private InventoryCache _inventoryCache;
|
||||||
private AssetCache _assetCache;
|
private AssetCache _assetCache;
|
||||||
|
|
||||||
public World(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, string regionName)
|
public World(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, string regionName)
|
||||||
{
|
{
|
||||||
m_clientThreads = clientThreads;
|
m_clientThreads = clientThreads;
|
||||||
m_regionHandle = regionHandle;
|
m_regionHandle = regionHandle;
|
||||||
m_regionName = regionName;
|
m_regionName = regionName;
|
||||||
|
|
||||||
m_scriptHandlers = new Dictionary<LLUUID, ScriptHandler>();
|
m_scriptHandlers = new Dictionary<LLUUID, ScriptHandler>();
|
||||||
m_scripts = new Dictionary<string, Script>();
|
m_scripts = new Dictionary<string, ScriptFactory>();
|
||||||
|
|
||||||
OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance");
|
OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance");
|
||||||
Entities = new Dictionary<libsecondlife.LLUUID, Entity>();
|
Entities = new Dictionary<libsecondlife.LLUUID, Entity>();
|
||||||
|
@ -75,11 +76,17 @@ namespace OpenSim.world
|
||||||
scriptend = scriptData.LastIndexOf("</Script>");
|
scriptend = scriptData.LastIndexOf("</Script>");
|
||||||
substring = scriptData.Substring(scriptstart + 8, scriptend - scriptstart - 8);
|
substring = scriptData.Substring(scriptstart + 8, scriptend - scriptstart - 8);
|
||||||
substring = substring.Trim();
|
substring = substring.Trim();
|
||||||
Console.WriteLine("searching for script to add: " + substring);
|
Console.WriteLine("searching for script to add: " + substring);
|
||||||
if (this.m_scripts.ContainsKey(substring))
|
|
||||||
|
ScriptFactory scriptFactory;
|
||||||
|
|
||||||
|
if (this.m_scripts.TryGetValue(substring, out scriptFactory ))
|
||||||
{
|
{
|
||||||
Console.WriteLine("added script");
|
Console.WriteLine("added script");
|
||||||
this.AddScript(entity, this.m_scripts[substring]);
|
|
||||||
|
|
||||||
|
|
||||||
|
this.AddScript(entity, scriptFactory());
|
||||||
}
|
}
|
||||||
/*string delimStr = " ";
|
/*string delimStr = " ";
|
||||||
char[] delimiter = delimStr.ToCharArray();
|
char[] delimiter = delimStr.ToCharArray();
|
||||||
|
@ -357,7 +364,7 @@ namespace OpenSim.world
|
||||||
prim.PhysActor = this.phyScene.AddPrim(pVec, pSize);
|
prim.PhysActor = this.phyScene.AddPrim(pVec, pSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.Entities.Add(prim.uuid, prim);
|
this.Entities.Add(prim.uuid, prim);
|
||||||
this._primCount++;
|
this._primCount++;
|
||||||
}
|
}
|
||||||
|
@ -557,31 +564,13 @@ namespace OpenSim.world
|
||||||
|
|
||||||
public void SetDefaultScripts()
|
public void SetDefaultScripts()
|
||||||
{
|
{
|
||||||
this.m_scripts.Add("Test", new TestScript1());
|
this.m_scripts.Add("FollowRandomAvatar", delegate()
|
||||||
|
{
|
||||||
|
return new FollowRandomAvatar();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TestScript1 : Script
|
|
||||||
{
|
|
||||||
int toggle = 0;
|
|
||||||
|
|
||||||
public TestScript1()
|
|
||||||
: base(LLUUID.Random())
|
|
||||||
{
|
|
||||||
OnFrame += MyOnFrame;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MyOnFrame(IScriptContext context)
|
|
||||||
{
|
|
||||||
toggle = 2 - toggle;
|
|
||||||
|
|
||||||
LLVector3 pos = context.GetPos();
|
|
||||||
|
|
||||||
pos.X += (toggle - 1);
|
|
||||||
|
|
||||||
context.MoveTo(pos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace OpenSim.RegionServer.world.scripting
|
||||||
|
{
|
||||||
|
public delegate Script ScriptFactory();
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
|
||||||
|
namespace OpenSim.RegionServer.world.scripting.Scripts
|
||||||
|
{
|
||||||
|
public class FollowRandomAvatar : Script
|
||||||
|
{
|
||||||
|
public FollowRandomAvatar()
|
||||||
|
: base(LLUUID.Random())
|
||||||
|
{
|
||||||
|
OnFrame += MyOnFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MyOnFrame(IScriptContext context)
|
||||||
|
{
|
||||||
|
LLVector3 pos = context.Entity.Pos;
|
||||||
|
|
||||||
|
IScriptReadonlyEntity avatar;
|
||||||
|
|
||||||
|
if (context.TryGetRandomAvatar(out avatar))
|
||||||
|
{
|
||||||
|
LLVector3 avatarPos = avatar.Pos;
|
||||||
|
|
||||||
|
float x = pos.X + ((float)avatarPos.X.CompareTo(pos.X)) / 2;
|
||||||
|
float y = pos.Y + ((float)avatarPos.Y.CompareTo(pos.Y)) / 2;
|
||||||
|
|
||||||
|
LLVector3 newPos = new LLVector3(x, y, pos.Z);
|
||||||
|
|
||||||
|
context.Entity.Pos = newPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue