private void SaveObjects() { if (selectedLevelID != -1) { LevelItemBehaviour[] items = FindObjectsOfType <LevelItemBehaviour>(); items = items.OrderBy(x => x.transform.position.z).ToArray(); Level.ItemSave[] levelParts = new Level.ItemSave[items.Length]; for (int i = 0; i < items.Length; i++) { levelParts[i] = new Level.ItemSave(items[i].Item, items[i].Type, items[i].transform.position, items[i].transform.eulerAngles, items[i].transform.lossyScale, items[i].gameObject.isStatic); } levelsDatabase.Levels[selectedLevelID].Items = levelParts; levelLoaded = true; EditorUtility.SetDirty(levelsDatabase); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); Debug.Log("[LevelEditor] Saved " + levelParts.Length + " objects."); } }
public void LoadLevel(int levelNumber) { for (int i = 0; i < itemsPools.Count; i++) { itemsPools[i].ReturnToPoolEverything(); } int firstStageItemsAmount = 0; int secondStageItemsAmount = 0; float firstStageHighestZ = GroundGenerator.PLAYGROUND_HEIGHT; float secondStageLowestZ = GroundGenerator.PLAYGROUND_HEIGHT + GroundGenerator.GROUNDS_OFFSET; firstStageObstaclesList.Clear(); CloseGates(); Level level = levelsDatabase.GetLevel(levelNumber - 1); for (int i = 0; i < level.Items.Length; i++) { Level.ItemSave itemSave = level.Items[i]; LevelItemBehaviour item = itemsPools[(int)itemSave.Item].GetPooledObject(itemSave.Position).GetComponent <LevelItemBehaviour>(); item.Transform.eulerAngles = itemSave.Rotation; item.Transform.localScale = itemSave.Scale; item.Init(itemSave.Type); if (item.Type == LevelItemBehaviour.ItemType.Normal) { if (itemSave.Position.z < firstStageHighestZ) { firstStageItemsAmount++; } else if (itemSave.Position.z > secondStageLowestZ) { secondStageItemsAmount++; } } else { if (itemSave.Position.z < firstStageHighestZ) { firstStageObstaclesList.Add(item); } } } GameController.FirstStageItemsAmount = firstStageItemsAmount; GameController.SecondStageItemsAmount = secondStageItemsAmount; int sphereId = (int)Level.Item.Sphere; Vector3 positionOffset = pathSpheresPrefabTransform.position; Vector3 itemsScale = pathSpheresPrefabTransform.GetChild(0).localScale; for (int i = 0; i < pathSpheresPrefabTransform.childCount; i++) { LevelItemBehaviour item = itemsPools[sphereId].GetPooledObject(pathSpheresPrefabTransform.GetChild(i).localPosition + positionOffset).GetComponent <LevelItemBehaviour>(); item.Transform.localScale = itemsScale; item.Transform.rotation = new Quaternion(); item.Init(LevelItemBehaviour.ItemType.Normal); } }