aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMW2007-04-11 12:13:21 +0000
committerMW2007-04-11 12:13:21 +0000
commit5ad6d5a939fb7bf0fdfdc6925d4afed306e08641 (patch)
tree8bcf302b69297a27ab254d087f73fe88fecab464
parentChanged so that a bin\ScriptEngines\ directory will be searched for scripting... (diff)
downloadopensim-SC_OLD-5ad6d5a939fb7bf0fdfdc6925d4afed306e08641.zip
opensim-SC_OLD-5ad6d5a939fb7bf0fdfdc6925d4afed306e08641.tar.gz
opensim-SC_OLD-5ad6d5a939fb7bf0fdfdc6925d4afed306e08641.tar.bz2
opensim-SC_OLD-5ad6d5a939fb7bf0fdfdc6925d4afed306e08641.tar.xz
First basic test script now works in the jvm scripting engine.
For it to work you need to have a java sdk installed and the javac.exe somewhere in the environment Path variable. Then To test, copy the text from bin/script1.text into a note card and then add that note to a prim.
-rw-r--r--OpenSim.Framework/IScriptAPI.cs13
-rw-r--r--OpenSim.Framework/IScriptEngine.cs14
-rw-r--r--OpenSim.Framework/OSVector3.cs18
-rw-r--r--OpenSim.RegionServer/world/World.cs10
-rw-r--r--OpenSim.RegionServer/world/WorldScripting.cs122
-rw-r--r--OpenSim.Scripting.EmbeddedJVM/Interpreter.cs3
-rw-r--r--OpenSim.Scripting.EmbeddedJVM/InterpreterLogic.cs4
-rw-r--r--OpenSim.Scripting.EmbeddedJVM/InterpreterMethods.cs3
-rw-r--r--OpenSim.Scripting.EmbeddedJVM/OpenSimJVM.cs7
-rw-r--r--OpenSim.sln48
-rw-r--r--bin/OpenSimAPI.java36
11 files changed, 219 insertions, 59 deletions
diff --git a/OpenSim.Framework/IScriptAPI.cs b/OpenSim.Framework/IScriptAPI.cs
new file mode 100644
index 0000000..2f58198
--- /dev/null
+++ b/OpenSim.Framework/IScriptAPI.cs
@@ -0,0 +1,13 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Framework.Interfaces
6{
7 public interface IScriptAPI
8 {
9 OSVector3 GetEntityPosition(uint localID);
10 void SetEntityPosition(uint localID, float x, float y, float z);
11 uint GetRandomAvatarID();
12 }
13}
diff --git a/OpenSim.Framework/IScriptEngine.cs b/OpenSim.Framework/IScriptEngine.cs
new file mode 100644
index 0000000..ed8974c
--- /dev/null
+++ b/OpenSim.Framework/IScriptEngine.cs
@@ -0,0 +1,14 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Framework.Interfaces
6{
7 public interface IScriptEngine
8 {
9 bool Init(IScriptAPI api);
10 string GetName();
11 void LoadScript(string script, string scriptName, uint entityID);
12 void OnFrame();
13 }
14}
diff --git a/OpenSim.Framework/OSVector3.cs b/OpenSim.Framework/OSVector3.cs
new file mode 100644
index 0000000..b5d1223
--- /dev/null
+++ b/OpenSim.Framework/OSVector3.cs
@@ -0,0 +1,18 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Framework
6{
7 public class OSVector3
8 {
9 public float X;
10 public float Y;
11 public float Z;
12
13 public OSVector3()
14 {
15
16 }
17 }
18}
diff --git a/OpenSim.RegionServer/world/World.cs b/OpenSim.RegionServer/world/World.cs
index 74325b0..a973c6c 100644
--- a/OpenSim.RegionServer/world/World.cs
+++ b/OpenSim.RegionServer/world/World.cs
@@ -87,22 +87,22 @@ namespace OpenSim.world
87 //Console.WriteLine("searching for script to add: " + substring); 87 //Console.WriteLine("searching for script to add: " + substring);
88 88
89 ScriptFactory scriptFactory; 89 ScriptFactory scriptFactory;
90 Console.WriteLine("script string is " + substring); 90 //Console.WriteLine("script string is " + substring);
91 if(substring.StartsWith("<ScriptEngine:")) 91 if(substring.StartsWith("<ScriptEngine:"))
92 { 92 {
93 string substring1 = ""; 93 string substring1 = "";
94 string script = ""; 94 string script = "";
95 Console.WriteLine("searching for script engine"); 95 // Console.WriteLine("searching for script engine");
96 substring1 = substring.Remove(0, 14); 96 substring1 = substring.Remove(0, 14);
97 int dev = substring1.IndexOf(','); 97 int dev = substring1.IndexOf(',');
98 string sEngine = substring1.Substring(0, dev); 98 string sEngine = substring1.Substring(0, dev);
99 substring1 = substring1.Remove(0, dev+1); 99 substring1 = substring1.Remove(0, dev+1);
100 int end = substring1.IndexOf('>'); 100 int end = substring1.IndexOf('>');
101 string sName = substring1.Substring(0, end); 101 string sName = substring1.Substring(0, end);
102 Console.WriteLine(" script info : " + sEngine + " , " + sName); 102 //Console.WriteLine(" script info : " + sEngine + " , " + sName);
103 int startscript = substring.IndexOf('>'); 103 int startscript = substring.IndexOf('>');
104 script = substring.Remove(0, startscript + 1); 104 script = substring.Remove(0, startscript + 1);
105 Console.WriteLine("script data is " + script); 105 // Console.WriteLine("script data is " + script);
106 if (this.scriptEngines.ContainsKey(sEngine)) 106 if (this.scriptEngines.ContainsKey(sEngine))
107 { 107 {
108 this.scriptEngines[sEngine].LoadScript(script, sName, entity.localid); 108 this.scriptEngines[sEngine].LoadScript(script, sName, entity.localid);
@@ -172,7 +172,7 @@ namespace OpenSim.world
172 } 172 }
173 foreach (IScriptEngine scripteng in this.scriptEngines.Values) 173 foreach (IScriptEngine scripteng in this.scriptEngines.Values)
174 { 174 {
175 //scripteng.OnFrame(); 175 scripteng.OnFrame();
176 } 176 }
177 //backup world data 177 //backup world data
178 this.storageCount++; 178 this.storageCount++;
diff --git a/OpenSim.RegionServer/world/WorldScripting.cs b/OpenSim.RegionServer/world/WorldScripting.cs
new file mode 100644
index 0000000..83838b4
--- /dev/null
+++ b/OpenSim.RegionServer/world/WorldScripting.cs
@@ -0,0 +1,122 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5using System.Reflection;
6using OpenSim.Framework;
7using OpenSim.Framework.Interfaces;
8using libsecondlife;
9
10namespace OpenSim.world
11{
12 public partial class World
13 {
14 private Dictionary<string, IScriptEngine> scriptEngines = new Dictionary<string, IScriptEngine>();
15
16 private void LoadScriptEngines()
17 {
18 this.LoadScriptPlugins();
19 }
20
21 public void LoadScriptPlugins()
22 {
23 string path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "ScriptEngines");
24 string[] pluginFiles = Directory.GetFiles(path, "*.dll");
25
26
27 for (int i = 0; i < pluginFiles.Length; i++)
28 {
29 this.AddPlugin(pluginFiles[i]);
30 }
31 }
32
33 private void AddPlugin(string FileName)
34 {
35 Assembly pluginAssembly = Assembly.LoadFrom(FileName);
36
37 foreach (Type pluginType in pluginAssembly.GetTypes())
38 {
39 if (pluginType.IsPublic)
40 {
41 if (!pluginType.IsAbstract)
42 {
43 Type typeInterface = pluginType.GetInterface("IScriptEngine", true);
44
45 if (typeInterface != null)
46 {
47 IScriptEngine plug = (IScriptEngine)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
48 plug.Init(this);
49 this.scriptEngines.Add(plug.GetName(), plug);
50
51 }
52
53 typeInterface = null;
54 }
55 }
56 }
57
58 pluginAssembly = null;
59 }
60
61 public void LoadScript(string scriptType, string scriptName, string script, Entity ent)
62 {
63 if(this.scriptEngines.ContainsKey(scriptType))
64 {
65 this.scriptEngines[scriptType].LoadScript(script, scriptName, ent.localid);
66 }
67 }
68
69 #region IScriptAPI Methods
70
71 public OSVector3 GetEntityPosition(uint localID)
72 {
73 OSVector3 res = new OSVector3();
74 // Console.WriteLine("script- getting entity " + localID + " position");
75 foreach (Entity entity in this.Entities.Values)
76 {
77 if (entity.localid == localID)
78 {
79 res.X = entity.Pos.X;
80 res.Y = entity.Pos.Y;
81 res.Z = entity.Pos.Z;
82 }
83 }
84 return res;
85 }
86
87 public void SetEntityPosition(uint localID, float x , float y, float z)
88 {
89 foreach (Entity entity in this.Entities.Values)
90 {
91 if (entity.localid == localID && entity is Primitive)
92 {
93 LLVector3 pos = entity.Pos;
94 pos.X = x;
95 Primitive prim = entity as Primitive;
96 // Of course, we really should have asked the physEngine if this is possible, and if not, returned false.
97 prim.UpdatePosition(pos);
98 // Console.WriteLine("script- setting entity " + localID + " positon");
99 }
100 }
101
102 }
103
104 public uint GetRandomAvatarID()
105 {
106 //Console.WriteLine("script- getting random avatar id");
107 uint res = 0;
108 foreach (Entity entity in this.Entities.Values)
109 {
110 if (entity is Avatar)
111 {
112 res = entity.localid;
113 }
114 }
115 return res;
116 }
117
118 #endregion
119
120
121 }
122}
diff --git a/OpenSim.Scripting.EmbeddedJVM/Interpreter.cs b/OpenSim.Scripting.EmbeddedJVM/Interpreter.cs
index aeeee0a..b94248c 100644
--- a/OpenSim.Scripting.EmbeddedJVM/Interpreter.cs
+++ b/OpenSim.Scripting.EmbeddedJVM/Interpreter.cs
@@ -49,6 +49,7 @@ namespace OpenSim.Scripting.EmbeddedJVM
49 else 49 else
50 { 50 {
51 // Console.WriteLine("No parent function so ending program"); 51 // Console.WriteLine("No parent function so ending program");
52 this._mThread.stack.StackFrames.Pop();
52 run = false; 53 run = false;
53 } 54 }
54 handled = true; 55 handled = true;
@@ -71,6 +72,7 @@ namespace OpenSim.Scripting.EmbeddedJVM
71 else 72 else
72 { 73 {
73 // Console.WriteLine("No parent function so ending program"); 74 // Console.WriteLine("No parent function so ending program");
75 this._mThread.stack.StackFrames.Pop();
74 run = false; 76 run = false;
75 } 77 }
76 handled = true; 78 handled = true;
@@ -88,6 +90,7 @@ namespace OpenSim.Scripting.EmbeddedJVM
88 else 90 else
89 { 91 {
90 // Console.WriteLine("No parent function so ending program"); 92 // Console.WriteLine("No parent function so ending program");
93 this._mThread.stack.StackFrames.Pop();
91 run = false; 94 run = false;
92 } 95 }
93 handled = true; 96 handled = true;
diff --git a/OpenSim.Scripting.EmbeddedJVM/InterpreterLogic.cs b/OpenSim.Scripting.EmbeddedJVM/InterpreterLogic.cs
index 673970a..8c895af 100644
--- a/OpenSim.Scripting.EmbeddedJVM/InterpreterLogic.cs
+++ b/OpenSim.Scripting.EmbeddedJVM/InterpreterLogic.cs
@@ -274,11 +274,11 @@ namespace OpenSim.Scripting.EmbeddedJVM
274 if (flcom1 is Float && flcom2 is Float) 274 if (flcom1 is Float && flcom2 is Float)
275 { 275 {
276 Int compres = new Int(); 276 Int compres = new Int();
277 if (((Float)flcom1).mValue > ((Float)flcom2).mValue) 277 if (((Float)flcom1).mValue < ((Float)flcom2).mValue)
278 { 278 {
279 compres.mValue = -1; 279 compres.mValue = -1;
280 } 280 }
281 else if (((Float)flcom1).mValue < ((Float)flcom2).mValue) 281 else if (((Float)flcom1).mValue > ((Float)flcom2).mValue)
282 { 282 {
283 compres.mValue = 1; 283 compres.mValue = 1;
284 } 284 }
diff --git a/OpenSim.Scripting.EmbeddedJVM/InterpreterMethods.cs b/OpenSim.Scripting.EmbeddedJVM/InterpreterMethods.cs
index e025293..dc3402e 100644
--- a/OpenSim.Scripting.EmbeddedJVM/InterpreterMethods.cs
+++ b/OpenSim.Scripting.EmbeddedJVM/InterpreterMethods.cs
@@ -71,11 +71,12 @@ namespace OpenSim.Scripting.EmbeddedJVM
71 BaseType bs1 = this._mThread.currentFrame.OpStack.Pop(); 71 BaseType bs1 = this._mThread.currentFrame.OpStack.Pop();
72 if (bs1 is Int) 72 if (bs1 is Int)
73 { 73 {
74 Console.WriteLine("get entity pos for " + ((Int)bs1).mValue); 74 //Console.WriteLine("get entity pos for " + ((Int)bs1).mValue);
75 //should get the position of the entity from the IScriptAPI 75 //should get the position of the entity from the IScriptAPI
76 OSVector3 vec3 = Thread.OpenSimScriptAPI.GetEntityPosition((uint)((Int)bs1).mValue); 76 OSVector3 vec3 = Thread.OpenSimScriptAPI.GetEntityPosition((uint)((Int)bs1).mValue);
77 Float pos = new Float(); 77 Float pos = new Float();
78 pos.mValue = vec3.X; 78 pos.mValue = vec3.X;
79 // Console.WriteLine("returned x value " + vec3.X.ToString());
79 this._mThread.currentFrame.OpStack.Push(pos); 80 this._mThread.currentFrame.OpStack.Push(pos);
80 } 81 }
81 this._mThread.PC += 2; 82 this._mThread.PC += 2;
diff --git a/OpenSim.Scripting.EmbeddedJVM/OpenSimJVM.cs b/OpenSim.Scripting.EmbeddedJVM/OpenSimJVM.cs
index 77a92e5..b47bb50 100644
--- a/OpenSim.Scripting.EmbeddedJVM/OpenSimJVM.cs
+++ b/OpenSim.Scripting.EmbeddedJVM/OpenSimJVM.cs
@@ -66,10 +66,11 @@ namespace OpenSim.Scripting.EmbeddedJVM
66 tw.Close(); 66 tw.Close();
67 67
68 //now compile 68 //now compile
69 System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@"C:\Program Files\Java\jdk1.6.0_01\bin\javac.exe", "*.java"); 69 System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("javac.exe", "*.java");
70 psi.RedirectStandardOutput = true; 70 // psi.RedirectStandardOutput = true;
71 psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 71 psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
72 psi.UseShellExecute = false; 72 psi.UseShellExecute = false;
73
73 System.Diagnostics.Process javacomp; 74 System.Diagnostics.Process javacomp;
74 javacomp = System.Diagnostics.Process.Start(psi); 75 javacomp = System.Diagnostics.Process.Start(psi);
75 javacomp.WaitForExit(); 76 javacomp.WaitForExit();
@@ -91,7 +92,7 @@ namespace OpenSim.Scripting.EmbeddedJVM
91 //now delete the created files 92 //now delete the created files
92 System.IO.File.Delete(scriptName + ".java"); 93 System.IO.File.Delete(scriptName + ".java");
93 System.IO.File.Delete(scriptName + ".class"); 94 System.IO.File.Delete(scriptName + ".class");
94 this.OnFrame(); 95 //this.OnFrame();
95 } 96 }
96 catch (Exception e) 97 catch (Exception e)
97 { 98 {
diff --git a/OpenSim.sln b/OpenSim.sln
index 2fac201..555bd96 100644
--- a/OpenSim.sln
+++ b/OpenSim.sln
@@ -1,21 +1,5 @@
1Microsoft Visual Studio Solution File, Format Version 9.00 1Microsoft Visual Studio Solution File, Format Version 9.00
2# Visual C# Express 2005 2# Visual C# Express 2005
3Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Terrain.BasicTerrain", "OpenSim.Terrain.BasicTerrain\OpenSim.Terrain.BasicTerrain.csproj", "{2270B8FE-0000-0000-0000-000000000000}"
4EndProject
5Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.RegionServer", "OpenSim.RegionServer\OpenSim.RegionServer.csproj", "{632E1BFD-0000-0000-0000-000000000000}"
6EndProject
7Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.OdePlugin", "OpenSim.Physics\OdePlugin\OpenSim.Physics.OdePlugin.csproj", "{63A05FE9-0000-0000-0000-000000000000}"
8EndProject
9Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework.Console", "OpenSim.Framework.Console\OpenSim.Framework.Console.csproj", "{A7CD0630-0000-0000-0000-000000000000}"
10EndProject
11Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Storage.LocalStorageBerkeleyDB", "OpenSim.Storage.LocalStorageBerkeleyDB\OpenSim.Storage.LocalStorageBerkeleyDB.csproj", "{EE9E5D96-0000-0000-0000-000000000000}"
12EndProject
13Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim", "OpenSim\OpenSim.csproj", "{438A9556-0000-0000-0000-000000000000}"
14EndProject
15Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.GenericConfig.Xml", "OpenSim.GenericConfig\Xml\OpenSim.GenericConfig.Xml.csproj", "{E88EF749-0000-0000-0000-000000000000}"
16EndProject
17Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.Manager", "OpenSim.Physics\Manager\OpenSim.Physics.Manager.csproj", "{8BE16150-0000-0000-0000-000000000000}"
18EndProject
19Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Scripting.EmbeddedJVM", "OpenSim.Scripting.EmbeddedJVM\OpenSim.Scripting.EmbeddedJVM.csproj", "{97A82740-0000-0000-0000-000000000000}" 3Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Scripting.EmbeddedJVM", "OpenSim.Scripting.EmbeddedJVM\OpenSim.Scripting.EmbeddedJVM.csproj", "{97A82740-0000-0000-0000-000000000000}"
20EndProject 4EndProject
21Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenGridServices.UserServer", "OpenGridServices.UserServer\OpenGridServices.UserServer.csproj", "{66591469-0000-0000-0000-000000000000}" 5Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenGridServices.UserServer", "OpenGridServices.UserServer\OpenGridServices.UserServer.csproj", "{66591469-0000-0000-0000-000000000000}"
@@ -48,38 +32,6 @@ Global
48 Release|Any CPU = Release|Any CPU 32 Release|Any CPU = Release|Any CPU
49 EndGlobalSection 33 EndGlobalSection
50 GlobalSection(ProjectConfigurationPlatforms) = postSolution 34 GlobalSection(ProjectConfigurationPlatforms) = postSolution
51 {2270B8FE-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
52 {2270B8FE-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
53 {2270B8FE-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
54 {2270B8FE-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
55 {632E1BFD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
56 {632E1BFD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
57 {632E1BFD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
58 {632E1BFD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
59 {63A05FE9-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
60 {63A05FE9-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
61 {63A05FE9-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
62 {63A05FE9-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
63 {A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
64 {A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
65 {A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
66 {A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
67 {EE9E5D96-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
68 {EE9E5D96-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
69 {EE9E5D96-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
70 {EE9E5D96-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
71 {438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
72 {438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
73 {438A9556-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
74 {438A9556-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
75 {E88EF749-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
76 {E88EF749-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
77 {E88EF749-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
78 {E88EF749-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
79 {8BE16150-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
80 {8BE16150-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
81 {8BE16150-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
82 {8BE16150-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
83 {97A82740-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 35 {97A82740-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
84 {97A82740-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU 36 {97A82740-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
85 {97A82740-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU 37 {97A82740-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
diff --git a/bin/OpenSimAPI.java b/bin/OpenSimAPI.java
new file mode 100644
index 0000000..472b947
--- /dev/null
+++ b/bin/OpenSimAPI.java
@@ -0,0 +1,36 @@
1
2
3public class OpenSimAPI {
4
5 public static int GetEntityID()
6 {
7 return 0;
8 }
9
10 public static int GetRandomAvatarID()
11 {
12 return 0;
13 }
14
15 public static float GetEntityPositionX(int id)
16 {
17 return 0.0f;
18 }
19
20 public static float GetEntityPositionY(int id)
21 {
22 return 0.0f;
23 }
24
25 public static float GetEntityPositionZ(int id)
26 {
27 return 0.0f;
28 }
29
30 public static void SetEntityPosition(int id, float x, float y, float z)
31 {
32
33 }
34
35
36} \ No newline at end of file