From fd6edf81d98f296e17ba910068121390ee5823df Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 1 Nov 2022 01:23:04 +0000 Subject: [PATCH] remove some xengine code; remove OSSLPrim, whatever that was --- .../Region/ScriptEngine/Interfaces/IScript.cs | 3 +- .../Shared/Api/Implementation/ApiManager.cs | 10 +- .../Shared/Api/Runtime/Executor.cs | 309 -------------- .../Shared/Api/Runtime/LSL_Stub.cs | 6 +- .../Shared/Api/Runtime/LS_Stub.cs | 6 +- .../Shared/Api/Runtime/MOD_Stub.cs | 6 +- .../Shared/Api/Runtime/OSSL_Stub.cs | 378 +++++++++--------- .../Shared/Api/Runtime/ScriptBase.cs | 150 +------ .../Region/ScriptEngine/Shared/LSL_Types.cs | 6 +- 9 files changed, 209 insertions(+), 665 deletions(-) delete mode 100644 OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs index bdbd72e676..639ef0b9c8 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs @@ -35,7 +35,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase { string[] GetApis(); void InitApi(string name, IScriptApi data); - +/* ulong GetStateEventFlags(string state); void ExecuteEvent(string state, string FunctionName, object[] args); Dictionary GetVars(); @@ -43,5 +43,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase void ResetVars(); void Close(); +*/ } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/ApiManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/ApiManager.cs index 684138f79c..acfab200fd 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/ApiManager.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/ApiManager.cs @@ -48,17 +48,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api Type[] types = a.GetExportedTypes(); - foreach (Type t in types) + foreach (Type t in types.AsSpan()) { - string name = t.ToString(); + var name = t.ToString().AsSpan(); int idx = name.LastIndexOf('.'); if (idx != -1) - name = name.Substring(idx+1); + name = name[(idx+1)..]; if (name.EndsWith("_Api")) { - name = name.Substring(0, name.Length - 4); - m_Apis[name] = t; + string sname = new string(name[..^4]); + m_Apis[sname] = t; } } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs deleted file mode 100644 index f26af383df..0000000000 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.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 OpenSimulator 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.Diagnostics; //for [DebuggerNonUserCode] -using System.Reflection; -using OpenSim.Region.ScriptEngine.Shared; -using OpenSim.Region.ScriptEngine.Shared.ScriptBase; -using log4net; - -namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase -{ - public class Executor - { - // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - // this is not the right place for this - // for now it must match similar enums duplicated on scritp engines - public enum ScriptEventCode : int - { - None = -1, - - attach = 0, - state_exit = 1, - timer = 2, - touch = 3, - collision = 4, - collision_end = 5, - collision_start = 6, - control = 7, - dataserver = 8, - email = 9, - http_response = 10, - land_collision = 11, - land_collision_end = 12, - land_collision_start = 13, - at_target = 14, - listen = 15, - money = 16, - moving_end = 17, - moving_start = 18, - not_at_rot_target = 19, - not_at_target = 20, - touch_start = 21, - object_rez = 22, - remote_data = 23, - at_rot_target = 24, - transaction_result = 25, - // - // - run_time_permissions = 28, - touch_end = 29, - state_entry = 30, - // - // - changed = 33, - link_message = 34, - no_sensor = 35, - on_rez = 36, - sensor = 37, - http_request = 38, - - path_update = 40, - - // marks highest numbered event - Size = 41 - } - - // this is not the right place for this - // for now it must match similar enums duplicated on scritp engines - [Flags] - public enum scriptEvents : ulong - { - None = 0, - attach = 1, - state_exit = 1UL << 1, - timer = 1UL << 2, - touch = 1UL << 3, - collision = 1UL << 4, - collision_end = 1UL << 5, - collision_start = 1UL << 6, - control = 1UL << 7, - dataserver = 1UL << 8, - email = 1UL << 9, - http_response = 1UL << 10, - land_collision = 1UL << 11, - land_collision_end = 1UL << 12, - land_collision_start = 1UL << 13, - at_target = 1UL << 14, - listen = 1UL << 15, - money = 1UL << 16, - moving_end = 1UL << 17, - moving_start = 1UL << 18, - not_at_rot_target = 1UL << 19, - not_at_target = 1UL << 20, - touch_start = 1UL << 21, - object_rez = 1UL << 22, - remote_data = 1UL << 23, - at_rot_target = 1UL << 24, - transaction_result = 1UL << 25, - // - // - run_time_permissions = 1UL << 28, - touch_end = 1UL << 29, - state_entry = 1UL << 30, - // - // - changed = 1UL << 33, - link_message = 1UL << 34, - no_sensor = 1UL << 35, - on_rez = 1UL << 36, - sensor = 1UL << 37, - http_request = 1UL << 38, - - path_update = 1UL << 40, - - anytouch = touch | touch_end | touch_start, - anyTarget = at_target | not_at_target | at_rot_target | not_at_rot_target - } - - // this is not the right place for this - // for now it must match similar enums duplicated on scritp engines - protected static readonly Dictionary m_eventFlagsMap = new Dictionary() - { - {"attach", scriptEvents.attach}, - {"at_rot_target", scriptEvents.at_rot_target}, - {"at_target", scriptEvents.at_target}, - {"collision", scriptEvents.collision}, - {"collision_end", scriptEvents.collision_end}, - {"collision_start", scriptEvents.collision_start}, - {"control", scriptEvents.control}, - {"dataserver", scriptEvents.dataserver}, - {"email", scriptEvents.email}, - {"http_response", scriptEvents.http_response}, - {"land_collision", scriptEvents.land_collision}, - {"land_collision_end", scriptEvents.land_collision_end}, - {"land_collision_start", scriptEvents.land_collision_start}, - {"listen", scriptEvents.listen}, - {"money", scriptEvents.money}, - {"moving_end", scriptEvents.moving_end}, - {"moving_start", scriptEvents.moving_start}, - {"not_at_rot_target", scriptEvents.not_at_rot_target}, - {"not_at_target", scriptEvents.not_at_target}, - {"remote_data", scriptEvents.remote_data}, - {"run_time_permissions", scriptEvents.run_time_permissions}, - {"state_entry", scriptEvents.state_entry}, - {"state_exit", scriptEvents.state_exit}, - {"timer", scriptEvents.timer}, - {"touch", scriptEvents.touch}, - {"touch_end", scriptEvents.touch_end}, - {"touch_start", scriptEvents.touch_start}, - {"transaction_result", scriptEvents.transaction_result}, - {"object_rez", scriptEvents.object_rez}, - {"changed", scriptEvents.changed}, - {"link_message", scriptEvents.link_message}, - {"no_sensor", scriptEvents.no_sensor}, - {"on_rez", scriptEvents.on_rez}, - {"sensor", scriptEvents.sensor}, - {"http_request", scriptEvents.http_request}, - {"path_update", scriptEvents.path_update}, - }; - - - /// - /// Contains the script to execute functions in. - /// - protected IScript m_Script; - - - // Cache functions by keeping a reference to them in a dictionary - private Dictionary Events = new Dictionary(); - private Dictionary m_stateEvents = new Dictionary(); - - public Executor(IScript script) - { - m_Script = script; - } - - public scriptEvents GetStateEventFlags(string state) - { - //m_log.Debug("Get event flags for " + state); - - // Check to see if we've already computed the flags for this state - scriptEvents eventFlags = scriptEvents.None; - if (m_stateEvents.ContainsKey(state)) - { - m_stateEvents.TryGetValue(state, out eventFlags); - return eventFlags; - } - - Type type=m_Script.GetType(); - - // Fill in the events for this state, cache the results in the map - foreach (KeyValuePair kvp in m_eventFlagsMap) - { - string evname = state + "_event_" + kvp.Key; - //m_log.Debug("Trying event "+evname); - try - { - MethodInfo mi = type.GetMethod(evname); - if (mi != null) - { - //m_log.Debug("Found handler for " + kvp.Key); - eventFlags |= kvp.Value; - } - } - catch(Exception) - { - //m_log.Debug("Exeption in GetMethod:\n"+e.ToString()); - } - } - - // Save the flags we just computed and return the result - if (eventFlags != 0) - m_stateEvents.Add(state, eventFlags); - - //m_log.Debug("Returning {0:x}", eventFlags); - return (eventFlags); - } - - [DebuggerNonUserCode] - public void ExecuteEvent(string state, string FunctionName, object[] args) - { - // IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory. - // Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead! - - string EventName = state + "_event_" + FunctionName; - -//#if DEBUG - //m_log.Debug("ScriptEngine: Script event function name: " + EventName); -//#endif - - if (Events.ContainsKey(EventName) == false) - { - // Not found, create - Type type = m_Script.GetType(); - try - { - MethodInfo mi = type.GetMethod(EventName); - Events.Add(EventName, mi); - } - catch - { - // m_log.Error("Event "+EventName+" not found."); - // Event name not found, cache it as not found - Events.Add(EventName, null); - } - } - - // Get event - MethodInfo ev = null; - Events.TryGetValue(EventName, out ev); - - if (ev == null) // No event by that name! - { - //m_log.Debug("ScriptEngine Can not find any event named: \String.Empty + EventName + "\String.Empty); - return; - } - -//cfk 2-7-08 dont need this right now and the default Linux build has DEBUG defined -#if DEBUG - //m_log.Debug("ScriptEngine: Executing function name: " + EventName); -#endif - // Found - try - { - ev.Invoke(m_Script, args); - } - catch (TargetInvocationException tie) - { - // Grab the inner exception and rethrow it, unless the inner - // exception is an EventAbortException as this indicates event - // invocation termination due to a state change. - // DO NOT THROW JUST THE INNER EXCEPTION! - // FriendlyErrors depends on getting the whole exception! - // - if (!(tie.InnerException is EventAbortException)) - { - throw; - } - } - } - } -} diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index 3b650605b0..7c7c5539bc 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs @@ -52,10 +52,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public void ApiTypeLSL(IScriptApi api) { - if (!(api is ILSL_Api)) - return; - - m_LSL_Functions = (ILSL_Api)api; + if (api is ILSL_Api p) + m_LSL_Functions = p; } public void state(string newState) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LS_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LS_Stub.cs index 4d35a828cf..cc7a285ff4 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LS_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LS_Stub.cs @@ -51,10 +51,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public void ApiTypeLS(IScriptApi api) { - if (!(api is ILS_Api)) - return; - - m_LS_Functions = (ILS_Api)api; + if (api is ILS_Api p) + m_LS_Functions = p; } public LSL_List lsGetWindlightScene(LSL_List rules) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs index 0df8e794d0..703924d348 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs @@ -55,10 +55,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public void ApiTypeMOD(IScriptApi api) { - if (!(api is IMOD_Api)) - return; - - m_MOD_Functions = (IMOD_Api)api; + if (api is IMOD_Api p) + m_MOD_Functions = p; } public void modInvokeN(string fname, params object[] parms) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index b64f839697..b92ae4bdbf 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs @@ -54,12 +54,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public void ApiTypeOSSL(IScriptApi api) { - if (!(api is IOSSL_Api)) + if (api is not IOSSL_Api p) return; - m_OSSL_Functions = (IOSSL_Api)api; - - Prim = new OSSLPrim(this); + m_OSSL_Functions = p; + //Prim = new OSSLPrim(this); } public void osSetRegionWaterHeight(double height) @@ -774,193 +773,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase return m_OSSL_Functions.osAgentSaveAppearance(agentId, notecard, includeHuds); } - public OSSLPrim Prim; - - [Serializable] - public class OSSLPrim - { - internal ScriptBaseClass OSSL; - public OSSLPrim(ScriptBaseClass bc) - { - OSSL = bc; - Position = new OSSLPrim_Position(this); - Rotation = new OSSLPrim_Rotation(this); - } - - public OSSLPrim_Position Position; - public OSSLPrim_Rotation Rotation; - private TextStruct _text; - public TextStruct Text - { - get { return _text; } - set - { - _text = value; - OSSL.llSetText(_text.Text, _text.color, _text.alpha); - } - } - - [Serializable] - public struct TextStruct - { - public string Text; - public LSL_Types.Vector3 color; - public double alpha; - } - } - - [Serializable] - public class OSSLPrim_Position - { - private OSSLPrim prim; - private LSL_Types.Vector3 Position; - public OSSLPrim_Position(OSSLPrim _prim) - { - prim = _prim; - } - private void Load() - { - Position = prim.OSSL.llGetPos(); - } - private void Save() - { - /* Remove temporarily until we have a handle to the region size - if (Position.x > ((int)Constants.RegionSize - 1)) - Position.x = ((int)Constants.RegionSize - 1); - if (Position.y > ((int)Constants.RegionSize - 1)) - Position.y = ((int)Constants.RegionSize - 1); - */ - if (Position.x < 0) - Position.x = 0; - if (Position.y < 0) - Position.y = 0; - if (Position.z < 0) - Position.z = 0; - if (Position.z > Constants.RegionHeight) - Position.z = Constants.RegionHeight; - prim.OSSL.llSetPos(Position); - } - - public double x - { - get - { - Load(); - return Position.x; - } - set - { - Load(); - Position.x = value; - Save(); - } - } - public double y - { - get - { - Load(); - return Position.y; - } - set - { - Load(); - Position.y = value; - Save(); - } - } - public double z - { - get - { - Load(); - return Position.z; - } - set - { - Load(); - Position.z = value; - Save(); - } - } - } - - [Serializable] - public class OSSLPrim_Rotation - { - private OSSLPrim prim; - private LSL_Types.Quaternion Rotation; - public OSSLPrim_Rotation(OSSLPrim _prim) - { - prim = _prim; - } - private void Load() - { - Rotation = prim.OSSL.llGetRot(); - } - private void Save() - { - prim.OSSL.llSetRot(Rotation); - } - - public double x - { - get - { - Load(); - return Rotation.x; - } - set - { - Load(); - Rotation.x = value; - Save(); - } - } - public double y - { - get - { - Load(); - return Rotation.y; - } - set - { - Load(); - Rotation.y = value; - Save(); - } - } - public double z - { - get - { - Load(); - return Rotation.z; - } - set - { - Load(); - Rotation.z = value; - Save(); - } - } - public double s - { - get - { - Load(); - return Rotation.s; - } - set - { - Load(); - Rotation.s = value; - Save(); - } - } - } - public string osGetGender(LSL_Key rawAvatarId) { return m_OSSL_Functions.osGetGender(rawAvatarId); @@ -1569,5 +1381,189 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase { m_OSSL_Functions.osListSortInPlace(src, stride, ascending); } + + /* + public OSSLPrim Prim; + + [Serializable] + public class OSSLPrim + { + internal ScriptBaseClass OSSL; + public OSSLPrim(ScriptBaseClass bc) + { + OSSL = bc; + Position = new OSSLPrim_Position(this); + Rotation = new OSSLPrim_Rotation(this); + } + + public OSSLPrim_Position Position; + public OSSLPrim_Rotation Rotation; + private TextStruct _text; + public TextStruct Text + { + get { return _text; } + set + { + _text = value; + OSSL.llSetText(_text.Text, _text.color, _text.alpha); + } + } + + [Serializable] + public struct TextStruct + { + public string Text; + public LSL_Types.Vector3 color; + public double alpha; + } + } + + [Serializable] + public class OSSLPrim_Position + { + private OSSLPrim prim; + private LSL_Types.Vector3 Position; + public OSSLPrim_Position(OSSLPrim _prim) + { + prim = _prim; + } + private void Load() + { + Position = prim.OSSL.llGetPos(); + } + private void Save() + { + if (Position.x < 0) + Position.x = 0; + if (Position.y < 0) + Position.y = 0; + if (Position.z < 0) + Position.z = 0; + if (Position.z > Constants.RegionHeight) + Position.z = Constants.RegionHeight; + prim.OSSL.llSetPos(Position); + } + + public double x + { + get + { + Load(); + return Position.x; + } + set + { + Load(); + Position.x = value; + Save(); + } + } + public double y + { + get + { + Load(); + return Position.y; + } + set + { + Load(); + Position.y = value; + Save(); + } + } + public double z + { + get + { + Load(); + return Position.z; + } + set + { + Load(); + Position.z = value; + Save(); + } + } + } + + [Serializable] + public class OSSLPrim_Rotation + { + private OSSLPrim prim; + private LSL_Types.Quaternion Rotation; + public OSSLPrim_Rotation(OSSLPrim _prim) + { + prim = _prim; + } + private void Load() + { + Rotation = prim.OSSL.llGetRot(); + } + private void Save() + { + prim.OSSL.llSetRot(Rotation); + } + + public double x + { + get + { + Load(); + return Rotation.x; + } + set + { + Load(); + Rotation.x = value; + Save(); + } + } + public double y + { + get + { + Load(); + return Rotation.y; + } + set + { + Load(); + Rotation.y = value; + Save(); + } + } + public double z + { + get + { + Load(); + return Rotation.z; + } + set + { + Load(); + Rotation.z = value; + Save(); + } + } + public double s + { + get + { + Load(); + return Rotation.s; + } + set + { + Load(); + Rotation.s = value; + Save(); + } + } + } + */ + } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs index 561b675a1f..36fabcb306 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs @@ -36,36 +36,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public partial class ScriptBaseClass : MarshalByRefObject, IScript { private Dictionary inits = new Dictionary(); - 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 m_InitialValues = - new Dictionary(); - private Dictionary m_Fields = - new Dictionary(); - 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 GetVars() - { - Dictionary vars = new Dictionary(); - - 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 vars) - { - foreach (KeyValuePair 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 }); } } } diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 2b9566867f..49e5603e08 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs @@ -59,9 +59,9 @@ namespace OpenSim.Region.ScriptEngine.Shared public Vector3(Vector3 vector) { - x = (float)vector.x; - y = (float)vector.y; - z = (float)vector.z; + x = vector.x; + y = vector.y; + z = vector.z; } public Vector3(OMV_Vector3 vector)