public Dictionary <string, object> GetVars() { Dictionary <string, object> vars = new Dictionary <string, object>(); Type t = GetType(); FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); foreach (FieldInfo field in fields) { if (field.FieldType == typeof(LSL_Types.List)) // ref type, copy { LSL_Types.List v = (LSL_Types.List)field.GetValue(this); if (((object)v) == null) { continue; //Broken... :/ } 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 { 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(int) || field.FieldType == typeof(double) || field.FieldType == typeof(float) || 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); } } fields = null; t = null; return(vars); }
/// <summary> /// Note: this is just used for reset /// </summary> /// <param name="vars"></param> public void SetVars(Dictionary <string, object> vars) { if (!m_useStateSaves) { return; } Type t = GetType(); FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); foreach (FieldInfo field in fields) { if (vars.ContainsKey(field.Name)) { object newVal = vars[field.Name]; if (field.FieldType == typeof(LSL_Types.List)) { LSL_Types.List v = (LSL_Types.List)field.GetValue(this); object[] data = ((LSL_Types.List)(newVal)).Data; v.Data = new object[data.Length]; Array.Copy(data, 0, v.Data, 0, data.Length); field.SetValue(this, v); } else if (field.FieldType == typeof(LSL_Types.LSLInteger) || field.FieldType == typeof(LSL_Types.LSLString) || field.FieldType == typeof(LSL_Types.LSLFloat) || field.FieldType == typeof(int) || field.FieldType == typeof(double) || field.FieldType == typeof(float) || field.FieldType == typeof(string) || field.FieldType == typeof(byte) || field.FieldType == typeof(short) || field.FieldType == typeof(LSL_Types.Vector3) || field.FieldType == typeof(LSL_Types.Quaternion) ) { field.SetValue(this, newVal); } } } fields = null; t = null; }
public string ListToString(object o) { string tmp = ""; string cur = ""; LSL_Types.List v = (LSL_Types.List)o; foreach (object ob in v.Data) { if (ob is LSL_Types.LSLInteger) { cur = "i" + ob; } else if (ob is LSL_Types.LSLFloat) { cur = "f" + ob; } else if (ob is LSL_Types.Vector3) { cur = "v" + ob; } else if (ob is LSL_Types.Quaternion) { cur = "q" + ob; } else if (ob is LSL_Types.LSLString) { cur = "\"" + EscapeString(ob.ToString()) + "\""; } else if (o.GetType() == typeof(LSL_Types.List)) { cur = "{" + ListToString(ob) + "}"; } if (tmp == "") { tmp = cur; } else { tmp += ", " + cur; } } return(tmp); }
public void SetStoreVars(Dictionary <string, object> vars) { if (!m_useStateSaves) { return; } m_lastStateSaveValues = vars; m_stateSaveRequired = false; //If something is setting the vars, we don't need to do a state save, as this came from a state save Type t = GetType(); FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); foreach (FieldInfo field in fields) { if (vars.ContainsKey(field.Name)) { object var = vars[field.Name]; if (field.FieldType == typeof(LSL_Types.List)) { string val = var.ToString(); int end; LSL_Types.List v = ParseValueToList(val, 0, out end); field.SetValue(this, v); } else if (field.FieldType == typeof(LSL_Types.LSLInteger)) { int val = int.Parse(var.ToString()); field.SetValue(this, new LSL_Types.LSLInteger(val)); } else if (field.FieldType == typeof(LSL_Types.LSLString)) { string val = var.ToString(); field.SetValue(this, new LSL_Types.LSLString(val)); } else if (field.FieldType == typeof(LSL_Types.LSLFloat)) { float val = float.Parse(var.ToString()); field.SetValue(this, new LSL_Types.LSLFloat(val)); } else if (field.FieldType == typeof(int)) { int val = int.Parse(var.ToString()); field.SetValue(this, val); } else if (field.FieldType == typeof(double)) { double val = double.Parse(var.ToString()); field.SetValue(this, val); } else if (field.FieldType == typeof(float)) { float val = float.Parse(var.ToString()); field.SetValue(this, val); } else if (field.FieldType == typeof(string)) { string val = var.ToString(); field.SetValue(this, val); } else if (field.FieldType == typeof(byte)) { byte val = byte.Parse(var.ToString()); field.SetValue(this, val); } else if (field.FieldType == typeof(short)) { short val = short.Parse(var.ToString()); field.SetValue(this, val); } else if (field.FieldType == typeof(LSL_Types.Quaternion)) { LSL_Types.Quaternion val = new LSL_Types.Quaternion(var.ToString()); field.SetValue(this, val); } else if (field.FieldType == typeof(LSL_Types.Vector3)) { LSL_Types.Vector3 val = new LSL_Types.Vector3(var.ToString()); field.SetValue(this, val); } } } fields = null; t = null; }
public LSL_Types.List ParseValueToList(string inval, int start, out int end) { LSL_Types.List v = new LSL_Types.List(); end = -1; char c; string tr = ",}"; char[] charany = tr.ToCharArray(); string param = ""; int totlen = inval.Length; int len; DateTime time_limit = DateTime.Now.AddSeconds(5.0); while (true) { try { if (inval.Length == 0) { v.Add(new LSL_Types.LSLString("")); } else { c = inval[start++]; switch (c) { case 'i': end = inval.IndexOfAny(charany, start); if (end > 0) { len = end - start; } else { len = totlen - start; } param = inval.Substring(start, len); v.Add(new LSL_Types.LSLInteger(param)); break; case 'f': end = inval.IndexOfAny(charany, start); if (end > 0) { len = end - start; } else { len = totlen - start; } param = inval.Substring(start, len); v.Add(new LSL_Types.LSLFloat(param)); break; case 'v': end = inval.IndexOf('>', start); if (end > 0) { len = end - start; } else { len = totlen - start; } param = inval.Substring(start, len); v.Add(new LSL_Types.Vector3(param)); end++; break; case 'q': end = inval.IndexOf('>', start); if (end > 0) { len = end - start; } else { len = totlen - start; } param = inval.Substring(start, len); v.Add(new LSL_Types.Quaternion(param)); end++; break; case '"': end = inval.IndexOf('"', start); while (inval[end - 1] == '\\') { int slashes = 2; while (end - slashes > 0 && inval[end - slashes] == '\\') { slashes++; } if ((slashes - 1) % 2 == 0) { end = inval.IndexOf('"', end + 1); } else { break; } } if (end > 0) { len = end - start; } else { len = totlen - start; } param = UnEscapeString(inval.Substring(start, len)); v.Add(new LSL_Types.LSLString(param)); end++; break; case '{': v.Add(ParseValueToList(inval, start, out end)); end++; break; default: break; } } start = end; if (start == -1 || start >= totlen || (inval[start] == '}')) { break; } else { while ((inval[start] == ',' || inval[start] == ' ') && DateTime.Now.CompareTo(time_limit) < 0) { start++; } } if (DateTime.Now.CompareTo(time_limit) > 0) { break; } } catch { } } return(v); }
public Dictionary <string, object> GetStoreVars() { Dictionary <string, object> vars = new Dictionary <string, object>(); if (!m_useStateSaves) { return(vars); } Type t = GetType(); FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); foreach (FieldInfo field in fields) { if (field.FieldType == typeof(LSL_Types.List)) // ref type, copy { string tmp = ""; string cur = ""; LSL_Types.List v = (LSL_Types.List)field.GetValue(this); foreach (object o in v.Data) { if (o is LSL_Types.LSLInteger) { cur = "i" + o; } else if (o is LSL_Types.LSLFloat) { cur = "f" + o; } else if (o is LSL_Types.Vector3) { cur = "v" + o; } else if (o is LSL_Types.Quaternion) { cur = "q" + o; } else if (o is LSL_Types.LSLString) { cur = "\"" + EscapeString(o.ToString()) + "\""; } else if (o.GetType() == typeof(LSL_Types.List)) { cur = "{" + ListToString(o) + "}"; } if (tmp == "") { tmp = cur; } else { tmp += ", " + cur; } } vars[field.Name] = tmp; } else if (field.FieldType == typeof(LSL_Types.LSLInteger) || field.FieldType == typeof(LSL_Types.LSLString) || field.FieldType == typeof(LSL_Types.LSLFloat) || field.FieldType == typeof(int) || field.FieldType == typeof(double) || field.FieldType == typeof(float) || 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).ToString(); } } fields = null; t = null; return(vars); }