mirror of
https://github.com/opensim/opensim.git
synced 2026-08-04 16:22:50 +08:00
remove some xengine code; remove OSSLPrim, whatever that was
This commit is contained in:
@@ -36,36 +36,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
public partial class ScriptBaseClass : MarshalByRefObject, IScript
|
||||
{
|
||||
private Dictionary<string, MethodInfo> inits = new Dictionary<string, MethodInfo>();
|
||||
|
||||
public ScriptBaseClass()
|
||||
{
|
||||
m_Executor = new Executor(this);
|
||||
|
||||
MethodInfo[] myArrayMethodInfo = GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance);
|
||||
|
||||
foreach (MethodInfo mi in myArrayMethodInfo)
|
||||
foreach (MethodInfo mi in myArrayMethodInfo.AsSpan())
|
||||
{
|
||||
if (mi.Name.Length > 7 && mi.Name.Substring(0, 7) == "ApiType")
|
||||
var name = mi.Name.AsSpan();
|
||||
if (name.StartsWith("ApiType"))
|
||||
{
|
||||
string type = mi.Name.Substring(7);
|
||||
string type = new string(name[7..]);
|
||||
inits[type] = mi;
|
||||
}
|
||||
}
|
||||
|
||||
// m_sponser = new ScriptSponsor();
|
||||
}
|
||||
|
||||
private Executor m_Executor = null;
|
||||
|
||||
public ulong GetStateEventFlags(string state)
|
||||
{
|
||||
return (ulong)m_Executor.GetStateEventFlags(state);
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
public void ExecuteEvent(string state, string FunctionName, object[] args)
|
||||
{
|
||||
m_Executor.ExecuteEvent(state, FunctionName, args);
|
||||
}
|
||||
|
||||
public string[] GetApis()
|
||||
@@ -75,130 +57,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
return apis;
|
||||
}
|
||||
|
||||
private Dictionary<string, object> m_InitialValues =
|
||||
new Dictionary<string, object>();
|
||||
private Dictionary<string, FieldInfo> m_Fields =
|
||||
new Dictionary<string, FieldInfo>();
|
||||
|
||||
public void InitApi(string api, IScriptApi data)
|
||||
{
|
||||
if (!inits.ContainsKey(api))
|
||||
return;
|
||||
|
||||
//ILease lease = (ILease)RemotingServices.GetLifetimeService(data as MarshalByRefObject);
|
||||
//RemotingServices.GetLifetimeService(data as MarshalByRefObject);
|
||||
// lease.Register(m_sponser);
|
||||
|
||||
MethodInfo mi = inits[api];
|
||||
|
||||
Object[] args = new Object[1];
|
||||
args[0] = data;
|
||||
|
||||
mi.Invoke(this, args);
|
||||
|
||||
m_InitialValues = GetVars();
|
||||
}
|
||||
|
||||
public virtual void StateChange(string newState)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
// m_sponser.Close();
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetVars()
|
||||
{
|
||||
Dictionary<string, object> vars = new Dictionary<string, object>();
|
||||
|
||||
if (m_Fields == null)
|
||||
return vars;
|
||||
|
||||
m_Fields.Clear();
|
||||
|
||||
Type t = GetType();
|
||||
|
||||
FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic |
|
||||
BindingFlags.Public |
|
||||
BindingFlags.Instance |
|
||||
BindingFlags.DeclaredOnly);
|
||||
|
||||
foreach (FieldInfo field in fields)
|
||||
{
|
||||
m_Fields[field.Name] = field;
|
||||
|
||||
if (field.FieldType == typeof(LSL_Types.list)) // ref type, copy
|
||||
{
|
||||
LSL_Types.list v = (LSL_Types.list)field.GetValue(this);
|
||||
Object[] data = new Object[v.Data.Length];
|
||||
Array.Copy(v.Data, 0, data, 0, v.Data.Length);
|
||||
LSL_Types.list c = new LSL_Types.list();
|
||||
c.Data = data;
|
||||
vars[field.Name] = c;
|
||||
}
|
||||
else if (field.FieldType == typeof(LSL_Types.LSLInteger) ||
|
||||
field.FieldType == typeof(LSL_Types.LSLString) ||
|
||||
field.FieldType == typeof(LSL_Types.LSLFloat) ||
|
||||
field.FieldType == typeof(Int32) ||
|
||||
field.FieldType == typeof(Double) ||
|
||||
field.FieldType == typeof(Single) ||
|
||||
field.FieldType == typeof(String) ||
|
||||
field.FieldType == typeof(Byte) ||
|
||||
field.FieldType == typeof(short) ||
|
||||
field.FieldType == typeof(LSL_Types.Vector3) ||
|
||||
field.FieldType == typeof(LSL_Types.Quaternion))
|
||||
{
|
||||
vars[field.Name] = field.GetValue(this);
|
||||
}
|
||||
}
|
||||
|
||||
return vars;
|
||||
}
|
||||
|
||||
public void SetVars(Dictionary<string, object> vars)
|
||||
{
|
||||
foreach (KeyValuePair<string, object> var in vars)
|
||||
{
|
||||
if (m_Fields.ContainsKey(var.Key))
|
||||
{
|
||||
if (m_Fields[var.Key].FieldType == typeof(LSL_Types.list))
|
||||
{
|
||||
LSL_Types.list v = (LSL_Types.list)m_Fields[var.Key].GetValue(this);
|
||||
Object[] data = ((LSL_Types.list)var.Value).Data;
|
||||
v.Data = new Object[data.Length];
|
||||
Array.Copy(data, 0, v.Data, 0, data.Length);
|
||||
m_Fields[var.Key].SetValue(this, v);
|
||||
}
|
||||
else if (m_Fields[var.Key].FieldType == typeof(LSL_Types.LSLInteger) ||
|
||||
m_Fields[var.Key].FieldType == typeof(LSL_Types.LSLString) ||
|
||||
m_Fields[var.Key].FieldType == typeof(LSL_Types.LSLFloat) ||
|
||||
m_Fields[var.Key].FieldType == typeof(Int32) ||
|
||||
m_Fields[var.Key].FieldType == typeof(Double) ||
|
||||
m_Fields[var.Key].FieldType == typeof(Single) ||
|
||||
m_Fields[var.Key].FieldType == typeof(String) ||
|
||||
m_Fields[var.Key].FieldType == typeof(Byte) ||
|
||||
m_Fields[var.Key].FieldType == typeof(short) ||
|
||||
m_Fields[var.Key].FieldType == typeof(LSL_Types.Vector3) ||
|
||||
m_Fields[var.Key].FieldType == typeof(LSL_Types.Quaternion)
|
||||
)
|
||||
{
|
||||
m_Fields[var.Key].SetValue(this, var.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetVars()
|
||||
{
|
||||
SetVars(m_InitialValues);
|
||||
}
|
||||
|
||||
public void NoOp()
|
||||
{
|
||||
// Does what is says on the packet. Nowt, nada, nothing.
|
||||
// Required for insertion after a jump label to do what it says on the packet!
|
||||
// With a bit of luck the compiler may even optimize it out.
|
||||
if (inits.TryGetValue(api, out MethodInfo mi))
|
||||
mi?.Invoke(this, new object[]{ data });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user