public void SendDragPosition(List <DrawQueueItem> queue, Vector3 center, Action <LogChallengeEventResponse> response) { if (_currentChallengeId == null) { _currentChallengeId = GameSparksManager.Instance.GetCurrentChallengeId(); } List <GSData> _pos = new List <GSData>(); Dictionary <string, object> _d = new Dictionary <string, object>(); foreach (DrawQueueItem _p in queue) { _d.Add("item", _p.ToJson()); GSData _data = new GSData(_d); _pos.Add(_data); _d.Clear(); } GSRequestData data = new GSRequestData(); data.AddObjectList("positions", _pos); data.AddNumber("center_x", center.x); data.AddNumber("center_y", center.y); data.AddNumber("center_z", center.z); new LogChallengeEventRequest() .SetChallengeInstanceId(_currentChallengeId) .SetEventKey("WordDrag") .SetEventAttribute("data", data) .Send(response); }
/** Converts a serializable object into GameSparks compatible GSData. */ public static GSRequestData ObjectToGSData(object obj) { GSRequestData gsData = new GSRequestData(); gsData.AddString("type", obj.GetType().ToString()); foreach (var field in obj.GetType().GetFields()) { if (!field.IsNotSerialized && field.GetValue(obj) != null) { if (field.FieldType == typeof(string)) { gsData.AddString(field.Name, field.GetValue(obj).ToString()); } else if (field.FieldType == typeof(bool)) { gsData.AddBoolean(field.Name, bool.Parse(field.GetValue(obj).ToString())); } else if (field.FieldType == typeof(int)) { gsData.AddNumber(field.Name, (int)Convert.ToInt32(field.GetValue(obj))); } else if (field.FieldType == typeof(float) || field.GetValue(obj).GetType() == typeof(double)) { gsData.AddNumber(field.Name, Double.Parse(field.GetValue(obj).ToString())); } else if (field.FieldType == typeof(List <string>) || field.GetValue(obj).GetType() == typeof(string[])) { gsData.AddStringList(field.Name, (field.FieldType == typeof(List <string>)) ? field.GetValue(obj) as List <string> : new List <string>(field.GetValue(obj) as string[])); } else if (field.FieldType == typeof(List <int>) || field.GetValue(obj).GetType() == typeof(int[])) { gsData.AddNumberList(field.Name, (field.FieldType == typeof(List <int>)) ? field.GetValue(obj) as List <int> : new List <int>(field.GetValue(obj) as int[])); } else if (field.FieldType == typeof(List <float>) || field.GetValue(obj).GetType() == typeof(float[])) { gsData.AddNumberList(field.Name, (field.FieldType == typeof(List <float>)) ? field.GetValue(obj) as List <float> : new List <float>(field.GetValue(obj) as float[])); } else if (field.FieldType == typeof(DateTime)) { gsData.AddDate(field.Name, (DateTime)field.GetValue(obj)); } else if (field.FieldType.IsClass && !field.FieldType.IsGenericType) { gsData.AddObject(field.Name, ObjectToGSData(field.GetValue(obj))); } else if (field.FieldType.IsGenericType && field.FieldType.GetGenericTypeDefinition() == typeof(List <>) || field.FieldType.IsArray) { List <GSData> gsDataList = new List <GSData>(); foreach (var elem in field.GetValue(obj) as IList) { gsDataList.Add(ObjectToGSData(elem)); } gsData.AddObjectList(field.Name, gsDataList); } } } Debug.LogWarning(gsData.JSON); return(gsData); }