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);
    }
        //Starts the game session
        public void StartNewRTSession(RTSessionInfo _info)
        {
            //if the settings arent null
            if (gameSparksRTUnity == null)
            {
                Debug.Log("GSM| Creating New RT Session Instance...");
                sessionInfo       = _info;                                              //player/session information
                gameSparksRTUnity = this.gameObject.AddComponent <GameSparksRTUnity>(); //add the RT script to the manager
                GSRequestData mockedResponse = new GSRequestData();                     //create a new request
                mockedResponse.AddNumber("port", (double)_info.GetPortID());            //gets the port id
                mockedResponse.AddString("host", _info.GetHostURL());                   //gets host server
                mockedResponse.AddString("accessToken", _info.GetAccessToken());        // construct a dataset from the game-details
                FindMatchResponse response = new FindMatchResponse(mockedResponse);     //create a mock response for match

                //configures the game
                gameSparksRTUnity.Configure(response,
                                            (peerId) => { OnPlayerConnectedToGame(peerId); },
                                            (peerId) => { OnPlayerDisconnected(peerId); },
                                            (ready) => { OnRTReady(ready); },
                                            (packet) => { OnPacketReceived(packet); });
                gameSparksRTUnity.Connect(); // when the config is set, connect the game
            }
            else
            {
                Debug.LogError("Session Already Started");
            }
        }
    public void SendFoundWord(string word, float time, Action <LogChallengeEventResponse> response)
    {
        if (_currentChallengeId == null)
        {
            _currentChallengeId = GameSparksManager.Instance.GetCurrentChallengeId();
        }

        GSRequestData data = new GSRequestData();

        data.AddString("word", word);
        data.AddNumber("time", time);

        new LogChallengeEventRequest()
        .SetChallengeInstanceId(_currentChallengeId)
        .SetEventKey("WordFound")
        .SetEventAttribute("data", data)
        .Send(response);
    }
    public void SendPoints(int points, string source = null, JSONObject pointsJsonData = null)
    {
        int    offlinePoints     = PreferencesFactory.GetInt(Constants.KeyOfflinePoints, 0);
        string _pointsDataString = PreferencesFactory.GetString(Constants.KeyOfflinePointsData, null);

        if (pointsJsonData != null && source != null)
        {
            pointsJsonData.Add("source", source);
        }

        JSONArray _pointsData = new JSONArray();

        if (!string.IsNullOrEmpty(_pointsDataString))
        {
            try
            {
                _pointsData = JSONArray.Parse(_pointsDataString);
            } catch (Exception e) {}
        }

        if (pointsJsonData != null)     // add new record
        {
            _pointsData.Add(pointsJsonData);
        }

        if (Reachability.Instance.IsReachable() == false || IsUserLoggedIn() == false)
        {
            PreferencesFactory.SetInt(Constants.KeyOfflinePoints, points + offlinePoints);
            PreferencesFactory.SetString(Constants.KeyOfflinePointsData, _pointsData.ToString());

            return;
        }

        if (points + offlinePoints <= 0)
        {
            return;
        }

        int levelNumber = -1;

        try
        {
            Level level = LevelController.FirstUnplayedLevel();

            if (level != null)
            {
                levelNumber = level.Number - 1;
            }
        } catch (Exception e) {}

        GSRequestData requestData = new GSRequestData();

        requestData.AddNumber("offlinePoints", offlinePoints);
        requestData.AddNumber("score", points);
        requestData.AddNumber("lastPlayedLevel", levelNumber);

        if (_pointsData != null)
        {
            requestData.AddJSONStringAsObject("pointsData", _pointsData.ToString());
        }

        if (source != null)
        {
            requestData.AddString("source", source);
        }

        new LogEventRequest()
        .SetEventKey("SubmitScoreV2")
        .SetEventAttribute("score", points + offlinePoints)
        .SetEventAttribute("data", requestData)
        .Send((response) => {
            if (!response.HasErrors)
            {
                PreferencesFactory.DeleteKey(Constants.KeyOfflinePoints);
                PreferencesFactory.DeleteKey(Constants.KeyOfflinePointsData);
            }
        });
    }
Exemple #5
0
        /** 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);
        }