Beispiel #1
0
    void OnLevelWasLoaded()
    {
        if (IsCanUse)
        {
            if (Application.loadedLevelName != defaultLevel)
            {
                trackChunkManager           = TrackChunkManager.GetInstance();
                currentLevelConfiguration   = LevelConfiguration.Instance;
                PrefabInitializationManager = FindObjectOfType <PrefabInitializationManager>();



                if (PrefabInitializationManager != null)
                {
                    foreach (PrefabItem prefabItem in PrefabInitializationManager.PrefabItems)
                    {
                        if (prefabItem.prefab.GetComponent <AbstractPoolableObject>() != null)
                        {
                            Pool.InstantiateAndAdd(
                                prefabItem.prefab.GetComponent <AbstractPoolableObject>(),
                                prefabItem.count);
                        }
                    }
                }


                if (Controller.GetInstance() != null)
                {
                    TrackAbstract.GetInstance().CalculateTrackState(currentLevelConfiguration.DefaultPosition);
                    Controller.GetInstance().MoveToPosition(currentLevelConfiguration.DefaultPosition);
                    trackChunkManager.Initialize(currentLevelConfiguration.DefaultPosition);


                    CollectionInitializedEvent(info.bonuses);
                }
            }
            else
            {
                Pool = new Pool <AbstractPoolableObject>();
                trackChunkManager           = null;
                currentLevelConfiguration   = null;
                PrefabInitializationManager = null;
            }
        }
    }
Beispiel #2
0
    void OnGUI()
    {
        scroll = GUILayout.BeginScrollView(scroll);

        GUILayout.BeginHorizontal();
        GUILayout.Toggle(IsSerialized, "Level is saved");

        if (IsSerialized)
        {
            EditorGUILayout.BeginVertical();
            if (GUILayout.Button("Restore level"))
            {
                IsSerialized = false;
                TrackChunkManager.GetInstance().DeserializeFromChunks();
                TrackChunkManager.GetInstance().PutAllPoolablesToBlocks();
                if (GameManager.Instance.PrefabInitializationManager)
                {
                    GameManager.Instance.PrefabInitializationManager.Reset();
                }
                LevelConfiguration.Instance.IsSerializedLevel = false;
            }

            EditorGUILayout.EndVertical();
        }
        else
        {
            if (GUILayout.Button("Save level"))
            {
                IsSerialized = true;
                TrackChunkManager.GetInstance().GenerateChunks();
                TrackChunkManager.GetInstance().DestroyAllBlocks();
                PrefabInitializationManager prefabManager = FindObjectOfType <PrefabInitializationManager>();
                if (prefabManager)
                {
                    prefabManager.Caluculate(TrackChunkManager.GetInstance());
                }
                LevelConfiguration.Instance.IsSerializedLevel = true;
            }
        }
        GUILayout.EndHorizontal();
        GUILayout.EndScrollView();
    }
    public void Caluculate(TrackChunkManager trackChunkManager)
    {
        prefabItems = new List <PrefabItem>();
        if (trackChunkManager.trackChuncks != null)
        {
            int head = Mathf.Max(1, trackChunkManager.NumberOfActiveChunksAhead);

            for (int j = 0; j < (trackChunkManager.trackChuncks.Count - head - 1); j++)
            {
                int tail = trackChunkManager.NumberOfActiveChunksBehind;
                if (j < tail)
                {
                    tail = j;
                }


                List <PrefabItem>           PrefabItemsToInclude = new List <PrefabItem>();
                List <StandartSerializator> serializators        = new List <StandartSerializator>();
                for (int i = j - tail; i < j + head + 1; i++)
                {
                    serializators = serializators.Concat(trackChunkManager.trackChuncks[i].GetComponents <StandartSerializator>()).ToList();
                }
                foreach (StandartSerializator s in serializators)
                {
                    AddPrefabToItems(PrefabItemsToInclude, s.prefab);
                }



                string s1 = "";
                s1 += "PrefabInitializationManager: Чанки с " + (j - tail) + " до " + (j + head) + "(Центральный=" + j + ") . Количество добавленных префабов: " + PrefabItemsToInclude.Count + "\n";
                s1 += "Все префабы:\n";
                foreach (PrefabItem item in PrefabItemsToInclude)
                {
                    s1 += "prefab :" + item.prefab.name + ". count:" + item.count + "\n";
                }
                s1 += "До PrefabItems.Count=" + PrefabItems.Count;



                foreach (PrefabItem prefabtoInclude in PrefabItemsToInclude)
                {
                    bool needToAdd = true;
                    foreach (PrefabItem original in prefabItems)
                    {
                        if (PrefabUtility.FindPrefabRoot(prefabtoInclude.prefab) ==
                            PrefabUtility.FindPrefabRoot(original.prefab) &&
                            (PrefabUtility.FindPrefabRoot(original.prefab) != null) &&
                            (PrefabUtility.FindPrefabRoot(prefabtoInclude.prefab) != null))
                        {
                            needToAdd = false;
                            if (prefabtoInclude.count > original.count)
                            {
                                original.count = prefabtoInclude.count;
                            }
                        }
                    }

                    if (needToAdd)
                    {
                        prefabItems.Add(prefabtoInclude);
                    }
                }

                s1 += ".\t\tПосле PrefabItems.Count=" + PrefabItems.Count + "\n";
                Debug.Log(s1);
            }
        }
        EditorUtility.SetDirty(this);
    }
 public void CalculateForContextMenu()
 {
     Caluculate(TrackChunkManager.GetInstance());
 }