예제 #1
0
        public void unlockLevel(string levelName)
        {
            LevelData level = currentUser.getLevelById(levelName);

            if (level != null)
            {
                level.isDirty = level.updateLocked(false) || level.isDirty;
            }
            else
            {
                level         = new LevelData(levelName);
                level.locked  = false;
                level.world   = levelsList.getLevelByName(levelName).world;
                level.isDirty = true;

                currentUser.addLevel(level);
            }

            //Cuidamos de no sobreescribir algun valor previo
            currentUser.isDirty = currentUser.isDirty || level.isDirty;

            if (currentUser.isDirty)
            {
                saveLocalData(false);

                //mandamos un usuario solo con este nivel
                KuberaUser user = new KuberaUser(currentUserId);
                user.addLevel(level);

                syncManager.updateData(user);
            }
        }
예제 #2
0
        protected override void fillDefaultData()
        {
            base.fillDefaultData();

            //Usuario anonimo
            KuberaUser anonymous = new KuberaUser(ANONYMOUS_USER);

            cleanToAnonymousData(anonymous);
            currentData.users.Add(anonymous);
        }
예제 #3
0
        public void diffUser(KuberaUser remoteUser, bool ignoreVersion = false)
        {
            if (currentUserId != remoteUser._id)
            {
                Debug.Log("Se recibieron datos de otro usuario: " + currentUserId + "," + remoteUser._id);
                return;
            }

            currentUser.compareAndUpdate(remoteUser, ignoreVersion);
            saveLocalData(false);
        }
예제 #4
0
        public override void changeCurrentuser(string newUserId)
        {
            if (currentUserId == newUserId)
            {
                //No hay cambios que hacer
                return;
            }

            //NOTA: Aqui por el flujo de login teoricamente nunca se llega con usuario anonimo pero es un reality check

            //Si es anonimo hay que ver si los avances se guardan
            if (currentUserId == ANONYMOUS_USER)
            {
                //El nuevo usuario existe?
                if (currentData.getUserById(newUserId) == null)
                {
                    //Este usuario toma los datos anonimos
                    currentData.getUserById(ANONYMOUS_USER)._id = newUserId;

                    //Agregamos un nuevo usuario anonimo
                    KuberaUser anon = new KuberaUser(ANONYMOUS_USER);
                    cleanToAnonymousData(anon);
                    currentData.users.Add(anon);
                }
                else
                {
                    //Diff de los datos sin verificar version
                    currentData.getUserById(newUserId).compareAndUpdate(currentUser, true);

                    //Limpiamos al usuario anonimo para que tenga valores iniciales
                    cleanToAnonymousData(currentUser);
                }
            }
            else
            {
                //El nuevo usuario existe?
                if (currentData.getUserById(newUserId) == null)
                {
                    KuberaUser newUser = new KuberaUser(newUserId);
                    newUser.playerLifes = initialLifes;
                    currentData.users.Add(newUser);
                }
                else
                {
                    //Hay un cambio de usuario sin consecuencias
                }
            }

            base.changeCurrentuser(newUserId);

            //currentData.isDirty = currentUser.isDirty;
            saveLocalData(false);
        }
예제 #5
0
        public void savePassedLevel(string levelName, int stars, int points)
        {
            KuberaUser currUser = currentUser;
            LevelData  level    = currUser.getLevelById(levelName);


            if (level != null)
            {
                KuberaAnalytics.GetInstance().registerFirstWinAttempts(levelName, level.attempts);
                level.updateOnlyIncrementalValues(stars, points);
                level.updatePassed(true);
                level.attempts++;
                level.isDirty = true;
            }
            else
            {
                level          = new LevelData(levelName);
                level.points   = points;
                level.stars    = stars;
                level.passed   = true;
                level.world    = levelsList.getLevelByName(levelName).world;
                level.attempts = 1;
                level.isDirty  = true;

                currUser.addLevel(level);

                KuberaAnalytics.GetInstance().registerFirstWinStars(levelName, stars);
                KuberaAnalytics.GetInstance().registerFirstWinAttempts(levelName, level.attempts);
            }

            KuberaAnalytics.GetInstance().registerLevelAttempts(levelName, level.attempts);

            //El maximo avance
            currUser.isDirty = currUser.upgradeMaxLevelReached(int.Parse(level._id)) || currUser.isDirty;

            //Es sucio porque ya estaba sucio o por un cambio aqui
            currUser.isDirty = currUser.isDirty || level.isDirty;

            if (currUser.isDirty)
            {
                saveLocalData(false);

                //Mandamos un usuario solo con este nivel
                KuberaUser user = new KuberaUser(currentUserId);
                user.addLevel(level);

                syncManager.updateData(user);
            }
        }
예제 #6
0
        public KuberaUser clone()
        {
            KuberaUser result = new KuberaUser(this._id);

            result.isDirty           = this.isDirty;
            result.version           = this.version;
            result.remoteDataVersion = this.remoteDataVersion;
            result.facebookId        = this.facebookId;
            result.maxLevelReached   = this.maxLevelReached;

            foreach (LevelData level in this.levels)
            {
                result.addLevel(level.clone());
            }

            return(result);
        }
예제 #7
0
        public void markGemsAsPurchased()
        {
            KuberaUser currUser = currentUser;

            currUser.isDirty = currUser.updateGemsPurchase(true) || currUser.isDirty;

            if (currUser.isDirty)
            {
                saveLocalData(false);

                //Mandamos el dato al server
                KuberaUser user = new KuberaUser(currentUserId);
                user.gemsPurchase = true;

                syncManager.updateData(user);
            }
        }
예제 #8
0
        public void markLifesAsAsked()
        {
            KuberaUser currUser = currentUser;

            currUser.isDirty = currUser.updateLifesAsked(true) || currUser.isDirty;

            if (currUser.isDirty)
            {
                saveLocalData(false);

                //Mandamos el dato al server
                KuberaUser user = new KuberaUser(currentUserId);
                user.lifesAsked = true;

                syncManager.updateData(user);
            }
        }
예제 #9
0
        /**
         * Los datos de este usuario que necesiten subirse
         **/
        public KuberaUser getUserDirtyData()
        {
            KuberaUser user   = currentUser;
            KuberaUser result = new KuberaUser(user._id);

            result.facebookId           = user.facebookId;
            result.levels               = user.getDirtyLevelsCopy();
            result.maxLevelReached      = user.maxLevelReached;
            result.gemsUse              = user.gemsUse;
            result.gemsPurchase         = user.gemsPurchase;
            result.gemsUseAfterPurchase = user.gemsUseAfterPurchase;
            result.lifesAsked           = user.lifesAsked;
            result.remoteLifesGranted   = user.remoteLifesGranted;

            //Se envian como no sucios
            result.markAllLevelsAsNoDirty();

            return(result);
        }
예제 #10
0
        public override void setUserAsAnonymous()
        {
            //Reality check
            if (currentUserId == ANONYMOUS_USER)
            {
                return;
            }

            /*El current user se hace anonimo y mantiene su facebook ID,
             * el anonimo previo se elimina con todos sus datos*/
            KuberaUser anon = currentData.getUserById(ANONYMOUS_USER);

            if (anon != null)
            {
                currentData.users.Remove(anon);
            }

            currentUser._id = ANONYMOUS_USER;

            base.setUserAsAnonymous();
        }
예제 #11
0
        public void incrementLevelAttemp(string levelName)
        {
            KuberaUser currUser = currentUser;
            LevelData  level    = currUser.getLevelById(levelName);


            if (level != null)
            {
                level.attempts++;
                level.isDirty = true;
            }
            else
            {
                level          = new LevelData(levelName);
                level.points   = 0;
                level.stars    = 0;
                level.passed   = false;
                level.world    = levelsList.getLevelByName(levelName).world;
                level.attempts = 1;
                level.isDirty  = true;

                currUser.addLevel(level);
            }

            KuberaAnalytics.GetInstance().registerLevelAttempts(levelName, level.attempts);

            currUser.isDirty = true;


            if (currUser.isDirty)
            {
                saveLocalData(false);

                //Mandamos un usuario solo con este nivel
                KuberaUser user = new KuberaUser(currentUserId);
                user.addLevel(level);

                syncManager.updateData(user);
            }
        }
예제 #12
0
 private void cleanToAnonymousData(KuberaUser user)
 {
     user.clear();
     user._id         = ANONYMOUS_USER;
     user.playerLifes = initialLifes;
 }
예제 #13
0
        public void temporalUserChangeWithFacebookId(string facebookId)
        {
            string     newId;
            KuberaUser user;
            KuberaUser anon;

            if (currentUserId == ANONYMOUS_USER)
            {
                //El nuevo usuario existe?
                if (currentData.getUserByFacebookId(facebookId) == null)
                {
                    //NO existe y creamos uno nuevo
                    user = currentData.getUserById(ANONYMOUS_USER);


                    anon  = new KuberaUser(ANONYMOUS_USER);
                    newId = facebookId;
                    //Valores iniciales
                    cleanToAnonymousData(anon);

                    //Este usuario anonimo pertenece a otro id de facebook?
                    if (user.facebookId != "")
                    {
                        //Un nuevo usuario para este que llego
                        anon._id        = facebookId;
                        anon.facebookId = facebookId;
                    }
                    else
                    {
                        //este anonimo se convierte en el de facebook que llego
                        user._id        = facebookId;
                        user.facebookId = facebookId;
                    }

                    currentData.users.Add(anon);
                }
                else
                {
                    //Ya existe
                    //Diff de los datos sin verificar version
                    user = currentData.getUserByFacebookId(facebookId);
                    anon = currentData.getUserById(ANONYMOUS_USER);

                    newId = user._id;

                    //Solo se hace un diff si el anonimo no pertenecea ningun usuario de facebook
                    if (user.facebookId == "")
                    {
                        //prevalece la version del usuario que no es anonimo
                        currentUser.remoteDataVersion = user.remoteDataVersion;
                        user.compareAndUpdate(currentUser, true);


                        //Limpiamos al usuario anonimo para que tenga valores iniciales
                        cleanToAnonymousData(currentUser);
                    }
                }
            }
            else
            {
                //El nuevo usuario existe?
                if (currentData.getUserByFacebookId(facebookId) == null)
                {
                    //Se crea un nuevo usuario
                    user             = new KuberaUser(facebookId);
                    user.facebookId  = facebookId;
                    user.playerLifes = initialLifes;

                    newId = facebookId;

                    currentData.users.Add(user);
                }
                else
                {
                    //Hay un cambio de usuario sin consecuencias
                    newId = currentData.getUserByFacebookId(facebookId)._id;
                }
            }

            currentUserId = newId;
            saveLocalData(false);
        }