From 0c1a6c85cc678effc882dd5897d3357416807ba9 Mon Sep 17 00:00:00 2001
From: Adam Frisby
Date: Thu, 28 Jun 2007 08:09:05 +0000
Subject: * Brand spankin' new scripting engine. * Use "script load
somefile.cs" for C# scripting. Will commit additional languages shortly.
Scripts should implement the IScript interfaces to work correctly. * Someone
port this over to NameSpaceChanges (built in Sugilite since sugilite is
working)
---
OpenSim/OpenSim.Region/OpenSim.Region.csproj | 25 ++--
OpenSim/OpenSim.Region/Scenes/Entity.cs | 3 +-
OpenSim/OpenSim.Region/Scenes/Scene.cs | 22 +---
OpenSim/OpenSim.Region/Scenes/SceneBase.cs | 1 -
.../Scenes/scripting/CSharpScriptEngine.cs | 77 +++++++++++++
.../Scenes/scripting/IScriptContext.cs | 40 -------
.../Scenes/scripting/IScriptEntity.cs | 46 --------
.../Scenes/scripting/IScriptHandler.cs | 126 ---------------------
OpenSim/OpenSim.Region/Scenes/scripting/Script.cs | 71 +++++-------
.../Scenes/scripting/ScriptFactory.cs | 35 ------
.../OpenSim.Region/Scenes/scripting/ScriptInfo.cs | 31 +++++
.../Scenes/scripting/ScriptManager.cs | 66 +++++++++++
.../Scenes/scripting/Scripts/FollowRandomAvatar.cs | 64 -----------
13 files changed, 217 insertions(+), 390 deletions(-)
create mode 100644 OpenSim/OpenSim.Region/Scenes/scripting/CSharpScriptEngine.cs
delete mode 100644 OpenSim/OpenSim.Region/Scenes/scripting/IScriptContext.cs
delete mode 100644 OpenSim/OpenSim.Region/Scenes/scripting/IScriptEntity.cs
delete mode 100644 OpenSim/OpenSim.Region/Scenes/scripting/IScriptHandler.cs
delete mode 100644 OpenSim/OpenSim.Region/Scenes/scripting/ScriptFactory.cs
create mode 100644 OpenSim/OpenSim.Region/Scenes/scripting/ScriptInfo.cs
create mode 100644 OpenSim/OpenSim.Region/Scenes/scripting/ScriptManager.cs
delete mode 100644 OpenSim/OpenSim.Region/Scenes/scripting/Scripts/FollowRandomAvatar.cs
(limited to 'OpenSim/OpenSim.Region')
diff --git a/OpenSim/OpenSim.Region/OpenSim.Region.csproj b/OpenSim/OpenSim.Region/OpenSim.Region.csproj
index 0868c68..0d9e9b0 100644
--- a/OpenSim/OpenSim.Region/OpenSim.Region.csproj
+++ b/OpenSim/OpenSim.Region/OpenSim.Region.csproj
@@ -190,24 +190,13 @@
Code
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
+
+
+
+
+
+
+
diff --git a/OpenSim/OpenSim.Region/Scenes/Entity.cs b/OpenSim/OpenSim.Region/Scenes/Entity.cs
index f8754f5..77f8854 100644
--- a/OpenSim/OpenSim.Region/Scenes/Entity.cs
+++ b/OpenSim/OpenSim.Region/Scenes/Entity.cs
@@ -31,11 +31,10 @@ using System.Text;
using Axiom.MathLib;
using OpenSim.Physics.Manager;
using libsecondlife;
-using OpenSim.Region.Scripting;
namespace OpenSim.Region.Scenes
{
- public abstract class Entity : IScriptReadonlyEntity
+ public abstract class Entity
{
public libsecondlife.LLUUID uuid;
public Quaternion rotation;
diff --git a/OpenSim/OpenSim.Region/Scenes/Scene.cs b/OpenSim/OpenSim.Region/Scenes/Scene.cs
index bf2244e..f7d90fa 100644
--- a/OpenSim/OpenSim.Region/Scenes/Scene.cs
+++ b/OpenSim/OpenSim.Region/Scenes/Scene.cs
@@ -39,12 +39,12 @@ using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
using OpenSim.Framework.Inventory;
using OpenSim.Framework;
-using OpenSim.Region.Scripting;
using OpenSim.Terrain;
using OpenGrid.Framework.Communications;
using OpenSim.Caches;
using OpenSim.Region;
using OpenSim.Servers;
+using OpenSim.Scripting;
namespace OpenSim.Region.Scenes
{
@@ -60,8 +60,6 @@ namespace OpenSim.Region.Scenes
private Random Rand = new Random();
private uint _primCount = 702000;
private int storageCount;
- private Dictionary m_scriptHandlers;
- private Dictionary m_scripts;
private Mutex updateLock;
protected AuthenticateSessionsBase authenticateHandler;
@@ -74,6 +72,7 @@ namespace OpenSim.Region.Scenes
public ParcelManager parcelManager;
public EstateManager estateManager;
public EventManager eventManager;
+ public ScriptManager scriptManager;
#region Properties
///
@@ -117,12 +116,9 @@ namespace OpenSim.Region.Scenes
parcelManager = new ParcelManager(this, this.m_regInfo);
estateManager = new EstateManager(this, this.m_regInfo);
-
+ scriptManager = new ScriptManager(this);
eventManager = new EventManager();
- m_scriptHandlers = new Dictionary();
- m_scripts = new Dictionary();
-
OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs - creating new entitities instance");
Entities = new Dictionary();
Avatars = new Dictionary();
@@ -195,19 +191,9 @@ namespace OpenSim.Region.Scenes
Entities[UUID].update();
}
- // New
+ // General purpose event manager
eventManager.TriggerOnFrame();
- // TODO: Obsolete - Phase out
- foreach (ScriptHandler scriptHandler in m_scriptHandlers.Values)
- {
- scriptHandler.OnFrame();
- }
- foreach (IScriptEngine scripteng in this.scriptEngines.Values)
- {
- scripteng.OnFrame();
- }
-
//backup world data
this.storageCount++;
if (storageCount > 1200) //set to how often you want to backup
diff --git a/OpenSim/OpenSim.Region/Scenes/SceneBase.cs b/OpenSim/OpenSim.Region/Scenes/SceneBase.cs
index 4dbd374..5275fcf 100644
--- a/OpenSim/OpenSim.Region/Scenes/SceneBase.cs
+++ b/OpenSim/OpenSim.Region/Scenes/SceneBase.cs
@@ -37,7 +37,6 @@ using OpenSim.Physics.Manager;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
using OpenSim.Framework.Inventory;
-using OpenSim.Region.Scripting;
using OpenSim.Terrain;
using OpenSim.Caches;
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/CSharpScriptEngine.cs b/OpenSim/OpenSim.Region/Scenes/scripting/CSharpScriptEngine.cs
new file mode 100644
index 0000000..d5622b8
--- /dev/null
+++ b/OpenSim/OpenSim.Region/Scenes/scripting/CSharpScriptEngine.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+// Compilation stuff
+using System.CodeDom;
+using System.CodeDom.Compiler;
+using Microsoft.CSharp;
+
+namespace OpenSim.Scripting
+{
+ public class CSharpScriptEngine : IScriptCompiler
+ {
+ public string fileExt()
+ {
+ return ".cs";
+ }
+
+ private Dictionary LoadDotNetScript(ICodeCompiler compiler, string filename)
+ {
+ CompilerParameters compilerParams = new CompilerParameters();
+ CompilerResults compilerResults;
+ compilerParams.GenerateExecutable = false;
+ compilerParams.GenerateInMemory = true;
+ compilerParams.IncludeDebugInformation = false;
+ compilerParams.ReferencedAssemblies.Add("OpenSim.Region.dll");
+ compilerParams.ReferencedAssemblies.Add("OpenSim.Framework.dll");
+ compilerParams.ReferencedAssemblies.Add("libsecondlife.dll");
+ compilerParams.ReferencedAssemblies.Add("System.dll");
+
+ compilerResults = compiler.CompileAssemblyFromFile(compilerParams, filename);
+
+ if (compilerResults.Errors.Count > 0)
+ {
+ OpenSim.Framework.Console.MainLog.Instance.Error("Compile errors");
+ foreach (CompilerError error in compilerResults.Errors)
+ {
+ OpenSim.Framework.Console.MainLog.Instance.Error(error.Line.ToString() + ": " + error.ErrorText.ToString());
+ }
+ }
+ else
+ {
+ Dictionary scripts = new Dictionary();
+
+ foreach (Type pluginType in compilerResults.CompiledAssembly.GetExportedTypes())
+ {
+ Type testInterface = pluginType.GetInterface("IScript", true);
+
+ if (testInterface != null)
+ {
+ IScript script = (IScript)compilerResults.CompiledAssembly.CreateInstance(pluginType.ToString());
+
+ string scriptName = "C#/" + script.getName();
+ Console.WriteLine("Script: " + scriptName + " loaded.");
+
+ if (!scripts.ContainsKey(scriptName))
+ {
+ scripts.Add(scriptName, script);
+ }
+ else
+ {
+ scripts[scriptName] = script;
+ }
+ }
+ }
+ return scripts;
+ }
+ return null;
+ }
+
+ public Dictionary compile(string filename)
+ {
+ CSharpCodeProvider csharpProvider = new CSharpCodeProvider();
+ return LoadDotNetScript(csharpProvider.CreateCompiler(), filename);
+ }
+ }
+}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/IScriptContext.cs b/OpenSim/OpenSim.Region/Scenes/scripting/IScriptContext.cs
deleted file mode 100644
index daa1b92..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/IScriptContext.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-* Copyright (c) Contributors, http://www.openmetaverse.org/
-* See CONTRIBUTORS.TXT for a full list of copyright holders.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* * Neither the name of the OpenSim Project nor the
-* names of its contributors may be used to endorse or promote products
-* derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*/
-using System;
-using System.Collections.Generic;
-using System.Text;
-using libsecondlife;
-
-namespace OpenSim.Region.Scripting
-{
- public interface IScriptContext
- {
- IScriptEntity Entity { get; }
- bool TryGetRandomAvatar(out IScriptReadonlyEntity avatar);
- }
-}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/IScriptEntity.cs b/OpenSim/OpenSim.Region/Scenes/scripting/IScriptEntity.cs
deleted file mode 100644
index 44b886f..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/IScriptEntity.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-* Copyright (c) Contributors, http://www.openmetaverse.org/
-* See CONTRIBUTORS.TXT for a full list of copyright holders.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* * Neither the name of the OpenSim Project nor the
-* names of its contributors may be used to endorse or promote products
-* derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*/
-using System;
-using System.Collections.Generic;
-using System.Text;
-using libsecondlife;
-
-namespace OpenSim.Region.Scripting
-{
- public interface IScriptReadonlyEntity
- {
- LLVector3 Pos { get; }
- string Name { get; }
- }
-
- public interface IScriptEntity
- {
- LLVector3 Pos { get; set; }
- string Name { get; }
- }
-}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/IScriptHandler.cs b/OpenSim/OpenSim.Region/Scenes/scripting/IScriptHandler.cs
deleted file mode 100644
index 797998d..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/IScriptHandler.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-* Copyright (c) Contributors, http://www.openmetaverse.org/
-* See CONTRIBUTORS.TXT for a full list of copyright holders.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* * Neither the name of the OpenSim Project nor the
-* names of its contributors may be used to endorse or promote products
-* derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*/
-using System;
-using System.Collections.Generic;
-using System.Text;
-using libsecondlife;
-using OpenSim.Physics.Manager;
-using OpenSim.Region;
-using OpenSim.Region.Scenes;
-using Avatar=OpenSim.Region.Scenes.ScenePresence;
-using Primitive = OpenSim.Region.Scenes.Primitive;
-
-namespace OpenSim.Region.Scripting
-{
- public delegate void ScriptEventHandler(IScriptContext context);
-
- public class ScriptHandler : IScriptContext, IScriptEntity, IScriptReadonlyEntity
- {
- private Scene m_world;
- private Script m_script;
- private Entity m_entity;
-
- public LLUUID ScriptId
- {
- get
- {
- return m_script.ScriptId;
- }
- }
-
- public void OnFrame()
- {
- m_script.OnFrame(this);
- }
-
- public ScriptHandler(Script script, Entity entity, Scene world)
- {
- m_script = script;
- m_entity = entity;
- m_world = world;
- }
-
- #region IScriptContext Members
-
- IScriptEntity IScriptContext.Entity
- {
- get
- {
- return this;
- }
- }
-
- bool IScriptContext.TryGetRandomAvatar(out IScriptReadonlyEntity avatar)
- {
- foreach (Entity entity in m_world.Entities.Values )
- {
- if( entity is Avatar )
- {
- avatar = entity;
- return true;
- }
- }
-
- avatar = null;
- return false;
- }
-
- #endregion
-
- #region IScriptEntity and IScriptReadonlyEntity Members
-
- public string Name
- {
- get
- {
- return m_entity.Name;
- }
- }
-
- public LLVector3 Pos
- {
- get
- {
- return m_entity.Pos;
- }
-
- set
- {
- if (m_entity is Primitive)
- {
- Primitive prim = m_entity as Primitive;
- // Of course, we really should have asked the physEngine if this is possible, and if not, returned false.
- // prim.UpdatePosition( value );
- }
- }
- }
-
- #endregion
- }
-
-}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/Script.cs b/OpenSim/OpenSim.Region/Scenes/scripting/Script.cs
index 1d01f3c..57390bc 100644
--- a/OpenSim/OpenSim.Region/Scenes/scripting/Script.cs
+++ b/OpenSim/OpenSim.Region/Scenes/scripting/Script.cs
@@ -1,53 +1,44 @@
-/*
-* Copyright (c) Contributors, http://www.openmetaverse.org/
-* See CONTRIBUTORS.TXT for a full list of copyright holders.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* * Neither the name of the OpenSim Project nor the
-* names of its contributors may be used to endorse or promote products
-* derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*/
using System;
using System.Collections.Generic;
using System.Text;
-using libsecondlife;
-namespace OpenSim.Region.Scripting
+using OpenSim.Framework.Console;
+using OpenSim.Framework;
+using OpenSim.Region;
+using OpenSim.Region.Scenes;
+
+namespace OpenSim.Scripting
{
- public class Script
+ public interface IScript
+ {
+ void Initialise(ScriptInfo scriptInfo);
+ string getName();
+ }
+
+ public class TestScript : IScript
{
- private LLUUID m_scriptId;
- public virtual LLUUID ScriptId
+ ScriptInfo script;
+
+ public string getName()
+ {
+ return "TestScript 0.1";
+ }
+
+ public void Initialise(ScriptInfo scriptInfo)
+ {
+ script = scriptInfo;
+ script.events.OnFrame += new OpenSim.Region.Scenes.EventManager.OnFrameDelegate(events_OnFrame);
+ script.events.OnNewPresence += new EventManager.OnNewPresenceDelegate(events_OnNewPresence);
+ }
+
+ void events_OnNewPresence(ScenePresence presence)
{
- get
- {
- return m_scriptId;
- }
+ script.logger.Verbose("Hello " + presence.firstname.ToString() + "!");
}
- public Script( LLUUID scriptId )
+ void events_OnFrame()
{
- m_scriptId = scriptId;
+ //script.logger.Verbose("Hello World!");
}
-
- public ScriptEventHandler OnFrame;
}
}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/ScriptFactory.cs b/OpenSim/OpenSim.Region/Scenes/scripting/ScriptFactory.cs
deleted file mode 100644
index 32ef046..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/ScriptFactory.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) Contributors, http://www.openmetaverse.org/
-* See CONTRIBUTORS.TXT for a full list of copyright holders.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* * Neither the name of the OpenSim Project nor the
-* names of its contributors may be used to endorse or promote products
-* derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*/
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace OpenSim.Region.Scripting
-{
- public delegate Script ScriptFactory();
-}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/ScriptInfo.cs b/OpenSim/OpenSim.Region/Scenes/scripting/ScriptInfo.cs
new file mode 100644
index 0000000..a9fede5
--- /dev/null
+++ b/OpenSim/OpenSim.Region/Scenes/scripting/ScriptInfo.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using OpenSim.Region.Scenes;
+using OpenSim.Framework.Console;
+
+namespace OpenSim.Scripting
+{
+ ///
+ /// Class which provides access to the world
+ ///
+ public class ScriptInfo
+ {
+ // Reference to world.eventsManager provided for convenience
+ public EventManager events;
+
+ // The main world
+ public Scene world;
+
+ // The console
+ public LogBase logger;
+
+ public ScriptInfo(Scene scene)
+ {
+ world = scene;
+ events = world.eventManager;
+ logger = OpenSim.Framework.Console.MainLog.Instance;
+ }
+ }
+}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/ScriptManager.cs b/OpenSim/OpenSim.Region/Scenes/scripting/ScriptManager.cs
new file mode 100644
index 0000000..ff5c115
--- /dev/null
+++ b/OpenSim/OpenSim.Region/Scenes/scripting/ScriptManager.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Scripting
+{
+ public class ScriptManager
+ {
+ List scripts = new List();
+ OpenSim.Region.Scenes.Scene scene;
+ Dictionary compilers = new Dictionary();
+
+ private void LoadFromCompiler(Dictionary compiledscripts)
+ {
+ foreach (KeyValuePair script in compiledscripts)
+ {
+ ScriptInfo scriptInfo = new ScriptInfo(scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script.
+ OpenSim.Framework.Console.MainLog.Instance.Verbose("Loading " + script.Key);
+ script.Value.Initialise(scriptInfo);
+ scripts.Add(script.Value);
+ }
+ OpenSim.Framework.Console.MainLog.Instance.Verbose("Finished loading " + compiledscripts.Count.ToString() + " script(s)");
+ }
+
+ public ScriptManager(OpenSim.Region.Scenes.Scene world)
+ {
+ scene = world;
+
+ // Defualt Engines
+ CSharpScriptEngine csharpCompiler = new CSharpScriptEngine();
+ compilers.Add(csharpCompiler.fileExt(),csharpCompiler);
+ }
+
+ public void Compile(string filename)
+ {
+ foreach (KeyValuePair compiler in compilers)
+ {
+ if (filename.EndsWith(compiler.Key))
+ {
+ LoadFromCompiler(compiler.Value.compile(filename));
+ break;
+ }
+ }
+ }
+
+ public void RunScriptCmd(string[] args)
+ {
+ switch (args[0])
+ {
+ case "load":
+ Compile(args[1]);
+ break;
+
+ default:
+ OpenSim.Framework.Console.MainLog.Instance.Error("Unknown script command");
+ break;
+ }
+ }
+ }
+
+ interface IScriptCompiler
+ {
+ Dictionary compile(string filename);
+ string fileExt();
+ }
+}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/Scripts/FollowRandomAvatar.cs b/OpenSim/OpenSim.Region/Scenes/scripting/Scripts/FollowRandomAvatar.cs
deleted file mode 100644
index 21f07a8..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/Scripts/FollowRandomAvatar.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-* Copyright (c) Contributors, http://www.openmetaverse.org/
-* See CONTRIBUTORS.TXT for a full list of copyright holders.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* * Neither the name of the OpenSim Project nor the
-* names of its contributors may be used to endorse or promote products
-* derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*/
-using System;
-using System.Collections.Generic;
-using System.Text;
-using libsecondlife;
-
-namespace OpenSim.Region.Scripting
-{
- 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;
- }
- }
- }
-
-
-}
--
cgit v1.1