Beispiel #1
0
    public static ModelNPC.ObjectData GetObjectDataFromGrid(string nameGameObject, string nameField)
    {
        if (!ReaderScene.IsGridDataFieldExist(nameField))
        {
            Debug.Log("################# Error FindObjectData FIELD NOT FOUND :" + nameField + "   find object: " + nameGameObject);
            //if (!Storage.Instance.IsLoadingWorldThread)
            //{
            //Storage.Data.AddNewFieldInGrid(nameField, "GetObjecsDataFromGrid", true);
            //}
            //else
            //{
            //    Debug.Log("################# Error FindObjectData FIELD NOT FOUND :" + nameField + "   find object: " + nameGameObject);
            return(null);
            //    //return new ModelNPC.ObjectData();
            //}
        }
        List <ModelNPC.ObjectData> objects = ReaderScene.GetObjectsDataFromGrid(nameField);
        int index = objects.FindIndex(p => p.NameObject == nameGameObject);

        if (index == -1)
        {
            Debug.Log("################# Error FindObjectData DATA OBJECT NOT FOUND : " + nameGameObject + "   in Field: " + nameField);
            return(null);
        }
        return(objects[index]);
    }
Beispiel #2
0
    public void DrawLocationHero(bool isOpenChange = false)
    {
        if (!isOpenChange)
        {
            return;
        }

        if (IsOpen || isOpenChange)
        {
            Texture2D textureMap       = prefabFrameMap.GetComponent <SpriteRenderer>().sprite.texture;
            Texture2D textureMapResult = textureMap;
            //Texture2D textureResult = new Texture2D(textureMap.width, textureMap.height);
            //Graphics.CopyTexture(textureMap, 0, 0, 0, 0, textureMap.width, textureMap.height, textureResult, 0, 0, 0, 0);

            //-- Restore ---
            if (Storage.Instance.SelectFieldPosHero != saveHeroPosField)
            {
                if (!string.IsNullOrEmpty(saveHeroPosField))
                {
                    SaveLoadData.TypePrefabs prefabType = SaveLoadData.TypePrefabs.PrefabField;
                    string nameField = saveHeroPosField;
                    if (ReaderScene.IsGridDataFieldExist(nameField))
                    {
                        foreach (ModelNPC.ObjectData datObjItem in ReaderScene.GetObjectsDataFromGrid(nameField))
                        {
                            if (datObjItem.TypePrefabName != SaveLoadData.TypePrefabs.PrefabUfo.ToString() &&
                                datObjItem.TypePrefabName != SaveLoadData.TypePrefabs.PrefabBoss.ToString())
                            {
                                prefabType = (SaveLoadData.TypePrefabs)Enum.Parse(typeof(SaveLoadData.TypePrefabs), datObjItem.TypePrefabName);
                                break; //@@@+
                            }
                        }
                    }
                    Vector2 posF = Helper.GetPositByField(nameField);
                    int     x    = (int)posF.x;
                    int     y    = (int)posF.y;
                    DrawTextureTo(SizeCellMap, "Restore", SizeCellMap - 1, textureMapResult, y, x, prefabType);
                }
                saveHeroPosField = Storage.Instance.SelectFieldPosHero;
            }
            //------

            //@@@+
            textureMapResult = AddTextureHeroOnMap(textureMapResult);

            //@@@-
            //Vector2 posHero = Helper.GetPositByField(Storage.Instance.SelectFieldPosHero);
            //int heroX = (int)posHero.x;
            //int heroY = (int)posHero.y;

            //DrawTextureTo(SizeCellMap, "Hero", SizeCellMap - 1, textureResult, heroY, heroX, Storage.Map.textureHero);

            textureMapResult.Apply();
            Sprite spriteMe = Sprite.Create(textureMapResult, new Rect(0.0f, 0.0f, textureMapResult.width, textureMapResult.height), new Vector2(0.5f, 0.5f), 100.0f);
            prefabFrameMap.GetComponent <SpriteRenderer>().sprite = spriteMe;
        }
    }
Beispiel #3
0
    public void SetObjecDataFromGrid(string nameField, int index, ModelNPC.ObjectData newData)
    {
        if (!ReaderScene.IsGridDataFieldExist(nameField))
        {
            Storage.Data.AddNewFieldInGrid(nameField, "SetObjecDataFromGrid");
        }
        ReaderScene.GetObjectsDataFromGrid(nameField)[index] = newData;

        if (Storage.Instance.ReaderSceneIsValid)
        {
            Storage.ReaderWorld.UpdateLinkData(newData, nameField, index);
        }
    }
Beispiel #4
0
    public Texture2D DrawLocationHero(Texture2D textureResult)
    {
        //Texture2D textureResult = new Texture2D(textureMap.width, textureMap.height);
        //Graphics.CopyTexture(textureMap, 0, 0, 0, 0, textureMap.width, textureMap.height, textureResult, 0, 0, 0, 0);

        //-- Restore ---
        //if (Storage.Instance.SelectFieldPosHero != saveHeroPosField)
        //{
        //Clear old position Hero
        if (!string.IsNullOrEmpty(saveHeroPosField))
        {
            SaveLoadData.TypePrefabs prefabType = SaveLoadData.TypePrefabs.PrefabField;
            string nameField = saveHeroPosField;
            if (ReaderScene.IsGridDataFieldExist(nameField))
            {
                foreach (ModelNPC.ObjectData datObjItem in ReaderScene.GetObjectsDataFromGrid(nameField))
                {
                    if (datObjItem.TypePrefabName != SaveLoadData.TypePrefabs.PrefabUfo.ToString() &&
                        datObjItem.TypePrefabName != SaveLoadData.TypePrefabs.PrefabBoss.ToString())
                    {
                        prefabType = (SaveLoadData.TypePrefabs)Enum.Parse(typeof(SaveLoadData.TypePrefabs), datObjItem.TypePrefabName);
                    }
                }
            }
            Vector2 posF = Helper.GetPositByField(nameField);
            int     x    = (int)posF.x;
            int     y    = (int)posF.y;
            DrawTextureTo(SizeCellMap, "Restore", SizeCellMap - 1, textureResult, y, x, prefabType);
        }
        saveHeroPosField = Storage.Instance.SelectFieldPosHero;
        //}
        //------

        //@@@+

        textureResult = AddTextureHeroOnMap(textureResult);
        //@@@-
        //Vector2 posHero = Helper.GetPositByField(Storage.Instance.SelectFieldPosHero);
        //int heroX = (int)posHero.x;
        //int heroY = (int)posHero.y;

        //DrawTextureTo(SizeCellMap, "Hero", SizeCellMap - 1, textureResult, heroY, heroX, Storage.Map.textureHero);


        return(textureResult);
    }
Beispiel #5
0
    //@DESTROY@
    public bool DestroyFullObject(GameObject gObj, bool isCorrect = false, bool isStopReal = false) //???? isStopReal
    {
        if (gObj == null)
        {
            Debug.Log("+++ DestroyFullObject ++++ object is null");
            return(false);
        }
        //if (isCorrect)
        //    Debug.Log("++++++++++++ DestroyFullObject ++++ : " + gObj);

        string setName = gObj.name;

        string nameField = Helper.GetNameFieldByName(setName);

        if (nameField == null)
        {
            return(false);
        }

        bool isExistReal = true;

        if (!_GamesObjectsReal.ContainsKey(nameField))
        {
            isExistReal = false;
            if (isStopReal)
            {
                Debug.Log("####### DestroyFullObject not field : " + nameField);
                return(false);
            }
        }
        if (isExistReal)
        {
            List <GameObject> listObjInField = _GamesObjectsReal[nameField];

            for (int i = listObjInField.Count - 1; i >= 0; i--)
            {
                if (listObjInField[i] == null)
                {
                    _UpdateData.RemoveRealObject(i, nameField, "DestroyRealObject");
                }
            }
            if (listObjInField.Count > 0)
            {
                int indRealData = listObjInField.FindIndex(p => p.name == setName);
                if (indRealData == -1)
                {
                    Debug.Log("+++ ------  DestroyFullObject: ------  Hero destroy >>> Not find GamesObjectsReal : " + gObj.name);
                }
                else
                {
                    _UpdateData.RemoveRealObject(indRealData, nameField, "DestroyRealObject");
                }
            }
        }

        bool isDestroyOnBild = false;

        if (gObj != null)
        {
            if (PoolGameObjects.IsUsePoolObjects)
            {
                var evObj = gObj.GetComponent <EventsObject>();
                if (evObj != null && evObj.PoolCase.IsDesrtoy) //Replace Data on Construct when Paint Prafab
                {
                    isDestroyOnBild = true;
                }
            }
            //@@@-
            //Destroy(gObj);
            //@@@+
            gObj.GetEvent().PoolCase.Deactivate();// .IsDesrtoy = true;
        }
        else
        {
            Debug.Log("+++ DestroyFullObject ++++ Destroy ---- object is null");
        }

        KillObjectHistory.Add(setName); //++ history
        //-----------------------------------------------
        bool isRemovedCorrect = false;
        bool isRemReal        = false;
        bool isRemData        = false;

        if (isCorrect)
        {
            isRemReal = _UpdateData.RemoveAllFindRealObject(setName);
        }

        //Destroy to Data
        if (false == ReaderScene.IsGridDataFieldExist(nameField))
        {
            Debug.Log("+++++ ------- DestroyRealObject ----- !GridData.FieldsD not field=" + nameField);
            return(false);
        }
        List <ModelNPC.ObjectData> dataObjects = ReaderScene.GetObjectsDataFromGrid(nameField);
        int indObj = dataObjects.FindIndex(p => p.NameObject == gObj.name);

        if (!isCorrect)
        {
            if (indObj != -1)
            {
                //Destroy to Data
                _UpdateData.RemoveDataObjectInGrid(nameField, indObj, "DestroyRealObject");
            }
            else
            {
                if (!isDestroyOnBild)
                {
                    Debug.Log("!!!! ObjectData GridData not object=" + gObj.name);
                    //RemoveAllFindRealObject(gObj.name);
                    _UpdateData.RemoveAllFindDataObject(gObj.name);
                }
            }
        }
        else
        {
            if (indObj != -1)
            {
                //@DD@ dataObjects.RemoveAt(indObj);
                _UpdateData.RemoveDataObjectInGrid(nameField, indObj, "DestroyRealObject");
            }
            isRemData = _UpdateData.RemoveAllFindDataObject(setName);
        }

        if (isRemData || isRemReal)
        {
            isRemovedCorrect = true;
        }

        return(isRemovedCorrect);
    }
Beispiel #6
0
    IEnumerator StartLoadDataBigXML()
    {
        string stepErr = "start";

        Debug.Log("Loaded Xml GridData start...");

        Dictionary <string, ModelNPC.FieldData> fieldsD_Test = new Dictionary <string, ModelNPC.FieldData>();

        yield return(null);

        LoadingWordlTimer = Time.time;

        string nameField = "";

        stepErr = "c.1";
        string datapathPart = Application.dataPath + "/Levels/LevelDataPart1x2.xml";

        if (File.Exists(datapathPart))
        {
            int indProgress = 0;
            int limitUpdate = 20;

            //using (XmlReader xml = XmlReader.Create(stReader))
            using (XmlReader xml = XmlReader.Create(datapathPart))
            //using (XmlReader xml = XmlReader.Create(new StreamReader(datapathPart, System.Text.Encoding.UTF8)))
            {
                while (xml.Read())
                {
                    switch (xml.NodeType)
                    {
                    case XmlNodeType.Element:
                        if (xml.Name == "Key")
                        {
                            XElement el = XElement.ReadFrom(xml) as XElement;
                            nameField = el.Value;
                            //nameField = xml.Value.Clone().ToString();
                            break;
                        }
                        //if (xml.Name == "Objects")
                        if (xml.Name == "ObjectData")     //WWW
                        {
                            indProgress++;
                            if (indProgress > limitUpdate)
                            {
                                indProgress = 0;
                                yield return(null);
                            }

                            XElement el          = XElement.ReadFrom(xml) as XElement;
                            string   inputString = el.ToString();

                            //---------------
                            //XmlSerializer serializer = new XmlSerializer(typeof(List<ModelNPC.ObjectData>), Serializator.extraTypes);
                            //WWW
                            XmlSerializer serializer = new XmlSerializer(typeof(ModelNPC.ObjectData), Serializator.extraTypes);
                            //--------------
                            StringReader stringReader = new StringReader(inputString);
                            //stringReader.Read(); // skip BOM
                            //--------------

                            //List<KeyValuePair<string, ModelNPC.FieldData>> dataResult = (List<KeyValuePair<string, ModelNPC.FieldData>>)serializer.Deserialize(rdr);
                            //Debug.Log("! " + inputString);
                            //List<ModelNPC.ObjectData> dataResult;
                            ModelNPC.ObjectData dataResult;
                            try
                            {
                                dataResult = (ModelNPC.ObjectData)serializer.Deserialize(stringReader);
                            }
                            catch (Exception x)
                            {
                                Debug.Log("############# " + x.Message);
                                yield break;
                            }
                            //-------------------------
                            if (ReaderScene.IsGridDataFieldExist(nameField))
                            {
                                fieldsD_Test[nameField].Objects.Add(dataResult);
                            }
                            else
                            {
                                //_GridDataG.FieldsD.Add(nameField, new ModelNPC.FieldData()
                                //{
                                //    NameField = nameField,
                                //    Objects = new List<ModelNPC.ObjectData>() { dataResult }
                                //});
                                fieldsD_Test.Add(nameField, new ModelNPC.FieldData()
                                {
                                    NameField = nameField,
                                    Objects   = new List <ModelNPC.ObjectData>()
                                    {
                                        dataResult
                                    }
                                });
                            }
                        }
                        break;
                    }
                }
            }

            //xml.Close();
            //stReader.Close();
        }

        //------------
        Storage.Data.SetGridDatatBig = fieldsD_Test;

        yield return(null);

        Storage.Data.CompletedLoadWorld();//fieldsD_Temp
        //--------------

        float loadingTime = Time.time - LoadingWordlTimer;

        Storage.EventsUI.SetMessageBox = "Ты ждал: " + loadingTime;

        yield return(new WaitForSeconds(4f));

        Storage.EventsUI.HideMessage();
    }
Beispiel #7
0
    //Texture2D textureMap = null;

    public Sprite GetBildSpriteMap(out Texture2D textureMap, int scaleCell = 1, bool isRefresh = false, int offsetMapX = 0, int offsetMapY = 0)
    {
        string indErr = "start";

        int sizeMap  = 25;
        int sizeDraw = sizeMap * scaleCell;

        int addSize = scaleCell - 1;

        offsetMapX *= sizeMap;
        offsetMapY *= sizeMap;

        textureMap = new Texture2D(sizeDraw, sizeDraw);
        //textureMap = new Texture2D(sizeDraw, sizeDraw, UnityEngine.Experimental.Rendering.GraphicsFormat.RGBA_DXT5_SRGB, UnityEngine.Experimental.Rendering.TextureCreationFlags.MipChain);
        //textureMap = new Texture2D(sizeDraw, sizeDraw, UnityEngine.Experimental.Rendering.GraphicsFormat.RGBA_DXT5_UNorm, UnityEngine.Experimental.Rendering.TextureCreationFlags.MipChain);

        try
        {
            indErr = "1";

            for (int y = 0; y < sizeMap; y++)
            {
                indErr = "2";
                for (int x = 0; x < sizeMap; x++)
                {
                    indErr = "3";
                    //isPerson = false;
                    indErr = "5";

                    int    mapX      = x + offsetMapX;
                    int    mapY      = y + offsetMapY;
                    string nameField = Helper.GetNameField(mapX, mapY);
                    indErr = "6";
                    SaveLoadData.TypePrefabs prefabType = SaveLoadData.TypePrefabs.PrefabField;

                    //--------------
                    if (nameField == Storage.Instance.SelectFieldPosHero)
                    {
                        DrawTextureTo(scaleCell, indErr, addSize, textureMap, y, x, Storage.Map.textureHero);
                        continue;
                    }
                    //--------------
                    indErr = "7";
                    if (!ReaderScene.IsGridDataFieldExist(nameField))
                    {
                        DrawTextureTo(scaleCell, indErr, addSize, textureMap, y, x, prefabType);
                        continue;
                    }
                    indErr = "9";
                    foreach (ModelNPC.ObjectData datObjItem in ReaderScene.GetObjectsDataFromGrid(nameField))
                    {
                        indErr = "10";
                        //Debug.Log("++++++++ : " + datObjItem + " " + datObjItem.TagObject + " =" + datObjItem.TagObject.IsPerson());
                        if (datObjItem.TypePrefabName != SaveLoadData.TypePrefabs.PrefabUfo.ToString() &&
                            datObjItem.TypePrefabName != SaveLoadData.TypePrefabs.PrefabBoss.ToString() &&
                            datObjItem.TypePoolPrefab != PoolGameObjects.TypePoolPrefabs.PoolPerson)
                        {
                            indErr     = "11";
                            prefabType = (SaveLoadData.TypePrefabs)Enum.Parse(typeof(SaveLoadData.TypePrefabs), datObjItem.TypePrefabName);
                            if (datObjItem.TypePoolPrefab != PoolGameObjects.TypePoolPrefabs.PoolFloor)
                            {
                                break;
                            }
                        }
                    }
                    DrawTextureTo(scaleCell, indErr, addSize, textureMap, y, x, prefabType);
                    indErr = "14";
                }
            }
        }
        catch (Exception x)
        {
            Debug.Log("############# GetTextureMap: " + indErr + "  " + x.Message);
            return(null);
        }

        //textureMap.Apply();
        try
        {
            textureMap.Apply();
            //textureMap.Apply(false, true);
        }
        catch (Exception x2)
        {
            Debug.Log("############# GetTextureMap:  textureMap.Apply " + indErr + "  " + x2.Message);
            return(null);
        }

        Sprite _spriteMap = null;

        try
        {
            //spriteMap = Sprite.Create(textureMap, new Rect(0.0f, 0.0f, textureMap.width, textureMap.height), new Vector2(0.5f, 0.5f), 100.0f);
            _spriteMap = Sprite.Create(textureMap, new Rect(0.0f, 0.0f, textureMap.width, textureMap.height), new Vector2(0.5f, 0.5f), 100.0f);
        }
        catch (Exception x2)
        {
            Debug.Log("############# GetTextureMap:  Sprite.Create " + indErr + "  " + x2.Message);
            return(null);
        }
        return(_spriteMap);
    }
Beispiel #8
0
    public void CreateTextureMap(int scaleCell = 1, bool isRefresh = false)
    {
        string indErr   = "start";
        int    sizeMap  = Helper.HeightLevel;
        int    sizeDraw = Helper.HeightLevel * scaleCell;
        int    addSize  = scaleCell - 1;

        //List<Color> colorsPersons = new List<Color>();
        //List<SaveLoadData.TypePrefabs> listPersonsTypes = new List<SaveLoadData.TypePrefabs>();
        //List<Texture2D> listPersonsPrefabTexture = new List<Texture2D>();
        //List<Texture2D> listPersonsMapTexture = new List<Texture2D>();

        if (!isRefresh)
        {
            CreateFrameMap();
        }

        //Storage.Events.ListLogAdd = "Loaded map.." + DateTime.Now.ToLongTimeString();

        bool isPerson = false;

        //Texture2D texture = new Texture2D(sizeDraw, sizeDraw);
        //textureMap = new Texture2D(sizeDraw, sizeDraw);


        //------- GRID MAP
        if (IsGridMap)
        {
            //var spriteMapC = Sprite.Create(textureMap, new Rect(0.0f, 0.0f, sizeDraw, sizeDraw), new Vector2(0.5f, 0.5f), 100.0f);
            //prefabFrameMap.GetComponent<SpriteRenderer>().sprite = spriteMapC;
            if (m_isGridMapLoaded)
            {
                BoxCollider2D colliderMapC = prefabFrameMap.GetComponent <BoxCollider2D>();
                if (colliderMapC != null)
                {
                    prefabFrameMap.GetComponent <BoxCollider2D>().size = new Vector3(sizeDraw / Helper.WidthLevel, sizeDraw / Helper.HeightLevel, 0);
                }
            }
            LoadGrid();
            return;
        }
        //----------------------

        //textureMap
        //textureMap = null;
        //        textureMap = new Texture2D(sizeDraw, sizeDraw);
        //# fix mem 2.
        Texture2D textureMap = new Texture2D(sizeDraw, sizeDraw);


        try
        {
            indErr = "1";

            for (int y = 0; y < sizeMap; y++)
            {
                indErr = "2";
                for (int x = 0; x < sizeMap; x++)
                {
                    indErr   = "3";
                    isPerson = false;
                    indErr   = "5";
                    string nameField = Helper.GetNameField(x, y);
                    indErr = "6";
                    SaveLoadData.TypePrefabs prefabType = SaveLoadData.TypePrefabs.PrefabField;
                    indErr = "7";
                    if (!ReaderScene.IsGridDataFieldExist(nameField))
                    {
                        DrawTextureTo(scaleCell, indErr, addSize, textureMap, y, x, prefabType);
                        continue;
                    }
                    indErr = "9";
                    foreach (ModelNPC.ObjectData datObjItem in ReaderScene.GetObjectsDataFromGrid(nameField))
                    {
                        indErr = "10";
                        //Debug.Log("++++++++ : " + datObjItem + " " + datObjItem.TagObject + " =" + datObjItem.TagObject.IsPerson());
                        if (datObjItem.TypePrefabName != SaveLoadData.TypePrefabs.PrefabUfo.ToString() &&
                            datObjItem.TypePrefabName != SaveLoadData.TypePrefabs.PrefabBoss.ToString())
                        {
                            indErr     = "11";
                            prefabType = (SaveLoadData.TypePrefabs)Enum.Parse(typeof(SaveLoadData.TypePrefabs), datObjItem.TypePrefabName);
                        }
                        else
                        {
                            indErr = "12";
                            ModelNPC.GameDataBoss bossObj = datObjItem as ModelNPC.GameDataBoss;
                            if (bossObj != null)
                            {
                                indErr     = "";
                                prefabType = SaveLoadData.TypePrefabs.PrefabBoss;

                                ////+++DRAW PERSON ---------------------------------
                                //    //Texture2D personTexture = Storage.GridData.GetSpriteBoss(bossObj.Level).texture;
                                //    //listPersonsPrefabTexture.Add(personTexture);
                                ////>>>> Texture2D personMapTexture_True = Storage.GridData.GetTextuteMapBoss(bossObj.Level);
                                //Texture2D personMapTexture = TypeBoss.Instance.GetNameTextureMapForIndexLevel(bossObj.Level);
                                //listPersonsMapTexture.Add(personMapTexture);
                                //-----------------------------------------------------

                                isPerson = true;
                            }
                        }
                    }
                    indErr = "14";
                    ////----- DRAW
                    if (!isPerson)
                    {
                        DrawTextureTo(scaleCell, indErr, addSize, textureMap, y, x, prefabType);
                    }
                    //-----------------
                    //else
                    //{
                    indErr = "22";
                    //---- Draw Person

                    //+++DRAW PERSON
                    //for (int indMap2D = 0; indMap2D < listPersonsMapTexture.Count(); indMap2D++)
                    //{
                    //    Texture2D texturePerson = listPersonsMapTexture[indMap2D];
                    //    DrawTextureTo(scaleCell, indErr, addSize, texture, y, x, texturePerson);
                    //}
                }
            }
        }
        catch (Exception x)
        {
            Debug.Log("############# CreateTextureMap: " + indErr + "  " + x.Message);
            return;
        }

        textureMap = DrawLocationHero(textureMap);

        textureMap.Apply();

        //#fix mem
        var _spriteMap = Sprite.Create(textureMap, new Rect(0.0f, 0.0f, textureMap.width, textureMap.height), new Vector2(0.5f, 0.5f), 100.0f);

        prefabFrameMap.GetComponent <SpriteRenderer>().sprite = _spriteMap;
        BoxCollider2D colliderMap = prefabFrameMap.GetComponent <BoxCollider2D>();

        if (colliderMap != null)
        {
            prefabFrameMap.GetComponent <BoxCollider2D>().size = new Vector3(textureMap.width / Helper.WidthLevel, textureMap.height / Helper.HeightLevel, 0);
        }
    }
Beispiel #9
0
    private void SaveListObjectsToData(string p_nameField, bool isDestroy = false)
    {
        if (!ConfigDebug.IsTestDUBLICATE)
        {
            SaveListObjectsToData_Cache(p_nameField, isDestroy);
            return;
        }
        var _gamesObjectsReal = Storage.Instance.GamesObjectsReal;
        var _gridData         = Storage.Instance.GridDataG;

        string indErr = "start";

        if (!_gamesObjectsReal.ContainsKey(p_nameField))
        {
            Debug.Log("################# SaveListObjectsToData GamesObjectsReal Not field=" + p_nameField);
            return;
        }

        indErr = "start";
        List <GameObject> realObjects = _gamesObjectsReal[p_nameField];

        if (_gridData == null)
        {
            Debug.Log("################# SaveListObjectsToData GridData is EMPTY");
            return;
        }

        if (!_gridData.FieldsD.ContainsKey(p_nameField))
        {
            Debug.Log("################# SaveListObjectsToData !GridData.FieldsD not field=" + p_nameField);
            return;
        }

        List <ModelNPC.ObjectData> dataObjects = ReaderScene.GetObjectsDataFromGrid(p_nameField);
        int indLast = -1;

        try
        {
            indErr = "1.";
            for (int i = realObjects.Count - 1; i >= 0; i--)  //+FIX
            {
                indErr = "2.";
                GameObject gobj = realObjects[i];
                if (gobj == null || !gobj.activeSelf)
                {
                    Debug.Log("***************** SaveListObjectsToData DESTROY GameObject field:" + p_nameField + "  ind:" + i);
                    continue;
                }
                indErr = "3.";
                int indData = dataObjects.FindIndex(p => p.NameObject == gobj.name);
                if (indData == -1)
                {
                    indData = 0;
                    bool isFind = false;
                    foreach (var itemObj in ReaderScene.GetObjectsDataFromGrid(p_nameField))
                    {
                        Debug.Log("[" + p_nameField + "] :: " + itemObj.NameObject);
                        if (itemObj.NameObject == gobj.name)
                        {
                            Debug.Log("))))))))))))))))))))  [" + p_nameField + "] :: " + itemObj.NameObject + "    index: " + indData);
                            isFind = true;
                            break;
                        }
                        indData++;
                    }
                    if (!isFind)
                    {
                        Debug.Log("################# SaveListObjectsToData 1.  DataObject (" + gobj.name + ") not Find in DATA     field: " + p_nameField);
                        int newIndex = Storage.Log.ConflictLog(gobj, p_nameField, dataObjects);
                        if (newIndex == -1)
                        {
                            Debug.Log("################# SaveListObjectsToData 2.  DataObject (" + gobj.name + ") not Find in DATA     field: " + p_nameField);
                            continue;
                        }
                        else
                        {
                            indData = newIndex;
                        }
                    }
                }

                ModelNPC.ObjectData dataObj = dataObjects[indData];
                if (ConfigDebug.IsTestDUBLICATE)
                {
                    if (dataObj == null)
                    {
                        Debug.Log("################# SaveListObjectsToData 2.  DataObject (" + gobj.name + ") not Find in DATA     field: " + p_nameField);
                        Storage.Log.GetHistory(gobj.name);
                        continue;
                    }
                    if (dataObj.NameObject != gobj.name)
                    {
                        Debug.Log("################# SaveListObjectsToData 2.  DataObject (" + gobj.name + ") <> (" + gobj.name + ") Gobj)");
                        Storage.Log.GetHistory(gobj.name);
                        continue;
                    }
                }

                indErr = "3.7.";
                var posD = dataObj.Position;
                var posR = gobj.transform.position; //!!!!

                indErr = "6.";
                string posFieldOld = Helper.GetNameFieldPosit(posD.x, posD.y);
                indErr = "7.";
                string posFieldReal = Helper.GetNameFieldPosit(posR.x, posR.y);

                if (posFieldOld != p_nameField)
                {
                    Debug.Log("###### SaveListObjectsToData [" + gobj.name + "] posFieldOld(" + posFieldOld + ") != (" + p_nameField + ")p_nameField ");
                }
                indErr = "8.";
                //---------------------------------------------
                if (posFieldOld != posFieldReal)
                {
                    if (isDestroy)
                    {
                        dataObj.IsReality = false;
                        gobj.SetActive(false);
                    }
                    indErr = "10. posFieldReal=" + posFieldReal + " <> posFieldOld=" + posFieldOld + "  " + gobj.name;

                    if (ReaderScene.IsGridDataFieldExist(posFieldReal))
                    {
                        int indValid = ReaderScene.GetObjectsDataFromGrid(posFieldReal).FindIndex(p => p.NameObject == gobj.name);
                        if (indValid != -1)
                        {
                            Debug.Log("################# SaveListObjectsToData ))))))))))))))   Find " + gobj.name + "  in " + posFieldReal);
                            Storage.Data.UpdateDataObect(p_nameField, indData, dataObj, "SaveListObjectsToData", posR); //@<<@
                            continue;
                        }
                    }
                    indErr = "11.";
                    ModelNPC.ObjectData dataObjNew = (ModelNPC.ObjectData)dataObj.Clone();
                    var name = Helper.CreateName(dataObj.TypePrefabName, posFieldReal, "", gobj.name);
                    indErr  = "12.";
                    indLast = -1;

                    //----------  FIX@@DUBLICATE REM#
                    if (!ConfigDebug.IsTestDUBLICATE)
                    {
                        indLast = ReaderScene.GetObjectsDataFromGrid(posFieldOld).FindIndex(p => p.NameObject == gobj.name);
                        Storage.Data.RemoveDataObjectInGrid(posFieldOld, indData, "SaveListObjectsToData");
                    }
                    else
                    //-------------------------------------------------------------------------
                    {
                        if (ReaderScene.IsGridDataFieldExist(posFieldOld))
                        {
                            indLast = ReaderScene.GetObjectsDataFromGrid(posFieldOld).FindIndex(p => p.NameObject == gobj.name);
                            // FIX@@DUBLICATE REM# -------------------
                            if (indLast == -1)
                            {
                                indLast = ReaderScene.GetObjectsDataFromGrid(posFieldOld).FindIndex(p => p.Id == dataObj.Id);
                            }
                            if (indLast != -1)
                            {
                                Storage.Data.RemoveDataObjectInGrid(posFieldOld, indLast, "SaveListObjectsToData"); ////@<<@
                            }
                            else
                            {
                                Debug.Log("#### SaveListObjectsToData DUBLICATE ERROR - not index " + dataObj.Id + " and " + gobj.name);
                            }
                            //--------------------
                        }
                        else
                        {
                            Debug.Log("#### SaveListObjectsToData DUBLICATE ERROR - not field " + posFieldOld);
                        }
                    }
                    //--------------------
                    indErr             = "14.";
                    dataObj            = dataObjNew;
                    indErr             = "15.";
                    dataObj.NameObject = name;
                    indErr             = "17.";
                    //@SAVE@ ------ RESAVE PROPERTIES
                    if (dataObj.NameObject != gobj.name)
                    {
                        if (!isDestroy)
                        {
                            dataObj.UpdateGameObject(gobj);
                        }
                        indErr = "18.";
                        dataObj.SetPosition(gobj.transform.position);
                        indErr = "19.";
                        dataObj.UpdateGameObjectAndID(gobj);
                    }
                    dataObj.IsReality = false;
                    indErr            = "20.";
                    Storage.Data.AddDataObjectInGrid(dataObj, posFieldReal, "SaveListObjectsToData");
                    indErr = "21.";
                    //RESAVE REAL +++++++++++++++++++++++++++++++++++++++++++++++++++++
                    if (!Storage.Instance.GamesObjectsReal.ContainsKey(posFieldReal))
                    {
                        indErr = "22.";
                        Storage.Data.AddNewFieldInRealObject(posFieldReal, "SaveListObjectsToData");
                    }
                    indErr = "23.";
                    if (!isDestroy)
                    {
                        Debug.Log("SaveListObjectsToData -- AddRealObject -- " + gobj.name + " : " + posFieldReal);
                        Storage.Data.AddRealObject(gobj, posFieldReal, "SaveListObjectsToData");
                    }

                    indErr = "24.";
                    Storage.Data.RemoveRealObject(i, p_nameField, "SaveListObjectsToData");
                    //+++++++++++++++++++++++++++++++++++++++++++++++++++++
                    indErr = "25.";
                    //@SAVE@
                    if (!isDestroy)
                    {
                        GameObjectUpdatePersonData(gobj);
                    }
                }
                else
                {
                    //update
                    if (isDestroy)
                    {
                        dataObj.IsReality = false;
                    }
                    //@@@TEST
                    Storage.Data.UpdateDataObect(p_nameField, indData, dataObj, "SaveListObjectsToData", posR); //@<<@
                    //------------------------------------
                }
            }
        }
        catch (Exception x)
        {
            Debug.Log("################# ERROR SaveListObjectsToData : " + x.Message + "  #" + indErr);
        }
    }