private void InitializeObjects() { for (int i = 0; i < 5; i++) { normalBlocks[i] = new GeneralObject(1) { GroupIDs = new int[] { i + 1 }, Color1ID = i + 1, Color2ID = i + 21, }; moveTriggers[i] = new MoveTrigger(0, i + 1); pickupItems[i] = new PickupItem(1275) { TargetItemID = i + 1, }; pickupTriggers[i] = new PickupTrigger(i + 1, 0); colorTriggers[i] = new ColorTrigger(i + 1) { CopiedColorID = i + 21, }; instantCountTriggers[i] = new InstantCountTrigger(i + 1, i + 1, 0); collisionBlocks[i] = new CollisionBlock { BlockID = i + 1, }; collisionTriggers[i] = new CollisionTrigger(i + 1, i + 21, i + 1); } allObjects = new LevelObjectCollection(normalBlocks.Concat(moveTriggers).Concat(pickupItems).Concat(pickupTriggers).Concat(colorTriggers).Concat(instantCountTriggers).Concat(collisionBlocks).Concat(collisionTriggers)); }
public TestSceneIDMigrationBackend() { Children = new Drawable[] { new SpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Font = new FontUsage(size: 26), Text = "Nothing to see here, too bored to make friendly visualized messages indicating test cases" } }; var normalBlocks = new GeneralObject[5]; var moveTriggers = new MoveTrigger[5]; var pickupItems = new PickupItem[5]; var pickupTriggers = new PickupTrigger[5]; var colorTriggers = new ColorTrigger[5]; var instantCountTriggers = new InstantCountTrigger[5]; var collisionBlocks = new CollisionBlock[5]; var collisionTriggers = new CollisionTrigger[5]; for (var i = 0; i < 5; i++) { normalBlocks[i] = new GeneralObject(1) { GroupIDs = new[] { i + 1 }, Color1ID = i + 1, Color2ID = i + 21 } } ; for (var i = 0; i < 5; i++) { moveTriggers[i] = new MoveTrigger(0, i + 1); } for (var i = 0; i < 5; i++) { pickupItems[i] = new PickupItem(1275) { TargetItemID = i + 1 } } ; for (var i = 0; i < 5; i++) { pickupTriggers[i] = new PickupTrigger(i + 1, 0); } for (var i = 0; i < 5; i++) { colorTriggers[i] = new ColorTrigger(i + 1) { CopiedColorID = i + 21 } } ; for (var i = 0; i < 5; i++) { instantCountTriggers[i] = new InstantCountTrigger(i + 1, i + 1, 0); } for (var i = 0; i < 5; i++) { collisionBlocks[i] = new CollisionBlock { BlockID = i + 1 } } ; for (var i = 0; i < 5; i++) { collisionTriggers[i] = new CollisionTrigger(i + 1, i + 21, i + 1); } var allObjects = new LevelObjectCollection(normalBlocks.Concat(moveTriggers).Concat(pickupItems) .Concat(pickupTriggers).Concat(colorTriggers).Concat(instantCountTriggers).Concat(collisionBlocks) .Concat(collisionTriggers).ToList()); var level = new Level { Name = "ID Migration Test Level", Description = "This is a test level to help testing the ID migration feature in the backend", LevelObjects = allObjects }; var editor = new Editor(level); var step0 = new SourceTargetRange(1, 5, 6); var step1 = new SourceTargetRange(21, 25, 46); var step2 = new SourceTargetRange(1, 25, 26); var step3 = new SourceTargetRange(8, 8, 10); AddStep("Perform Group ID migration 1-5 > 6-10", () => editor.PerformGroupIDMigration(new List <SourceTargetRange> { step0 })); AddAssert("Verify Group ID migration", () => VerifyGroupIDMigration(step0.TargetFrom)); AddStep("Perform Color ID migration 1-25 > 26-50", () => editor.PerformColorIDMigration(new List <SourceTargetRange> { step2 })); AddAssert("Verify Color ID migration", () => VerifyColorIDMigration(step2.TargetFrom, step1.TargetFrom)); AddStep("Perform Item ID migration 1-5 > 6-10", () => editor.PerformItemIDMigration(new List <SourceTargetRange> { step0 })); AddAssert("Verify Item ID migration", () => VerifyItemIDMigration(step0.TargetFrom)); AddStep("Perform Block ID migration 21-25 > 46-50", () => editor.PerformBlockIDMigration(new List <SourceTargetRange> { step1 })); AddAssert("Verify Block ID migration", () => VerifyBlockIDMigration(step0.SourceFrom, step1.TargetFrom)); // TODO: Add more test steps with multiple step ID migrations bool VerifyGroupIDMigration(int targetFrom) { for (var i = 0; i < 5; i++) { if (normalBlocks[i].GetGroupID(0) != i + targetFrom) { return(false); } } for (var i = 0; i < 5; i++) { if (moveTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } for (var i = 0; i < 5; i++) { if (instantCountTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } for (var i = 0; i < 5; i++) { if (collisionTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } return(true); } bool VerifyColorIDMigration(int targetFromA, int targetFromB) { for (var i = 0; i < 5; i++) { if (normalBlocks[i].Color1ID != i + targetFromA) { return(false); } if (normalBlocks[i].Color2ID != i + targetFromB) { return(false); } } for (var i = 0; i < 5; i++) { if (colorTriggers[i].TargetColorID != i + targetFromA) { return(false); } if (colorTriggers[i].CopiedColorID != i + targetFromB) { return(false); } } return(true); } bool VerifyItemIDMigration(int targetFrom) { for (var i = 0; i < 5; i++) { if (pickupItems[i].TargetItemID != i + targetFrom) { return(false); } } for (var i = 0; i < 5; i++) { if (pickupTriggers[i].TargetItemID != i + targetFrom) { return(false); } } return(true); } bool VerifyBlockIDMigration(int targetFromA, int targetFromB) { for (var i = 0; i < 5; i++) { if (collisionBlocks[i].BlockID != i + targetFromA) { return(false); } } for (var i = 0; i < 5; i++) { if (collisionTriggers[i].PrimaryBlockID != i + targetFromA) { return(false); } if (collisionTriggers[i].SecondaryBlockID != i + targetFromB) { return(false); } } return(true); } } } }
public IEnumerator Begin() { int i = 0; if (exe == (ExecutionType)0) //Sequential { while (i < triggers.Length) { float d1 = delay[i], time = 0, d2 = 0; GameObject trigger = triggers[i]; while (time <= d1) { time += Time.deltaTime; yield return(null); } switch (trigger.gameObject.tag) { // MOVE TRIGGER case "MoveTrigger": MoveTrigger move = trigger.GetComponent <MoveTrigger>(); d2 = move.getDuration(); time = 0; //Debug.Log("Trigger " + i); StartCoroutine(move.Move()); while (time <= d2 && !ignorefinish) { time += Time.deltaTime; yield return(null); } while (move.getFinished() != true && !ignorefinish) { //Debug.Log("Waiting to finish"); yield return(null); } move.StopAllCoroutines(); break; // SPAWN TRIGGER case "SpawnTrigger": SpawnTrigger spawn = trigger.GetComponent <SpawnTrigger>(); spawn.StopAllCoroutines(); StartCoroutine(spawn.Begin()); if (spawn.exe == ExecutionType.Parallel) { while (spawn.getFinished() != true && !ignorefinish) { //Debug.Log("Waiting to finish"); yield return(null); } } break; // MUSIC TRIGGER case "MusicTrigger": MusicTrigger music = trigger.GetComponent <MusicTrigger>(); d2 = music.getDuration(); time = 0; // Volume if (music.mode == MusicTrigger.Mode.volume) { StartCoroutine(music.setMusicVolume()); while (music.getFinished() != true && !ignorefinish) { //Debug.Log("Waiting to finish"); yield return(null); } } // Change Song else if (music.mode == MusicTrigger.Mode.music) { music.setBGMusic(); } music.StopAllCoroutines(); break; // TOGGLE TRIGGER case "ToggleTrigger": ToggleTrigger toggle = trigger.GetComponent <ToggleTrigger>(); StartCoroutine(toggle.Toggle()); while (toggle.getFinished() != true && !ignorefinish) { //Debug.Log("Waiting to finish"); yield return(null); } break; // COLOR TRIGGER case "ColorTrigger": ColorTrigger color = trigger.GetComponent <ColorTrigger>(); color.SpawnActivate(); while (!color.getFinished() && !ignorefinish) { //Debug.Log("Waiting to finish"); yield return(null); } break; // SHAKE TRIGGER case "ShakeTrigger": ShakeTrigger shake = trigger.GetComponent <ShakeTrigger>(); shake.SpawnActivate(); break; default: break; } i++; if (i == triggers.Length && loop) { i = 0; } yield return(null); } } else if (exe == (ExecutionType)1) //Parallel { finished = false; float longestDelay = 0, time = 0; while (i < triggers.Length) { GameObject trigger = triggers[i]; switch (trigger.gameObject.tag) { // MOVE TRIGGER case "MoveTrigger": MoveTrigger move = trigger.GetComponent <MoveTrigger>(); longestDelay = Mathf.Max(move.getDuration(), longestDelay); //Debug.Log("Trigger " + i); StartCoroutine(move.Move()); break; // SPAWN TRIGGER case "SpawnTrigger": SpawnTrigger spawn = trigger.GetComponent <SpawnTrigger>(); spawn.StopAllCoroutines(); StartCoroutine(spawn.Begin()); break; // MUSIC TRIGGER case "MusicTrigger": MusicTrigger music = trigger.GetComponent <MusicTrigger>(); longestDelay = Mathf.Max(music.getDuration(), longestDelay); // Volume if (music.mode == MusicTrigger.Mode.volume) { StartCoroutine(music.setMusicVolume()); } // Change Song else if (music.mode == MusicTrigger.Mode.music) { music.setBGMusic(); } break; // TOGGLE TRIGGER case "ToggleTrigger": ToggleTrigger toggle = trigger.GetComponent <ToggleTrigger>(); longestDelay = Mathf.Max((toggle.on_targets.Length + toggle.off_targets.Length) * Time.fixedDeltaTime * 10, longestDelay); StartCoroutine(toggle.Toggle()); break; // COLOR TRIGGER case "ColorTrigger": ColorTrigger color = trigger.GetComponent <ColorTrigger>(); color.SpawnActivate(); break; default: break; } i++; } while (time <= longestDelay) { time += Time.deltaTime; yield return(null); } finished = true; } }
public void IDMigration() { var normalBlocks = new GeneralObject[5]; var moveTriggers = new MoveTrigger[5]; var pickupItems = new PickupItem[5]; var pickupTriggers = new PickupTrigger[5]; var colorTriggers = new ColorTrigger[5]; var instantCountTriggers = new InstantCountTrigger[5]; var collisionBlocks = new CollisionBlock[5]; var collisionTriggers = new CollisionTrigger[5]; for (int i = 0; i < 5; i++) { normalBlocks[i] = new GeneralObject(1) { GroupIDs = new int[] { i + 1 }, Color1ID = i + 1, Color2ID = i + 21, } } ; for (int i = 0; i < 5; i++) { moveTriggers[i] = new MoveTrigger(0, i + 1); } for (int i = 0; i < 5; i++) { pickupItems[i] = new PickupItem(1275) { TargetItemID = i + 1, } } ; for (int i = 0; i < 5; i++) { pickupTriggers[i] = new PickupTrigger(i + 1, 0); } for (int i = 0; i < 5; i++) { colorTriggers[i] = new ColorTrigger(i + 1) { CopiedColorID = i + 21, } } ; for (int i = 0; i < 5; i++) { instantCountTriggers[i] = new InstantCountTrigger(i + 1, i + 1, 0); } for (int i = 0; i < 5; i++) { collisionBlocks[i] = new CollisionBlock { BlockID = i + 1, } } ; for (int i = 0; i < 5; i++) { collisionTriggers[i] = new CollisionTrigger(i + 1, i + 21, i + 1); } var allObjects = new LevelObjectCollection(normalBlocks.Concat(moveTriggers).Concat(pickupItems).Concat(pickupTriggers).Concat(colorTriggers).Concat(instantCountTriggers).Concat(collisionBlocks).Concat(collisionTriggers).ToList()); var level = new Level { Name = "ID Migration Test Level", Description = "This is a test level to help testing the ID migration feature in the backend", LevelObjects = allObjects, }; var editor = new Editor(level); var step0 = new SourceTargetRange(1, 5, 6); var step1 = new SourceTargetRange(21, 25, 46); var step2 = new SourceTargetRange(1, 25, 26); var step3 = new SourceTargetRange(8, 8, 10); editor.PerformGroupIDMigration(new List <SourceTargetRange> { step0 }); Assert.IsTrue(VerifyGroupIDMigration(step0.TargetFrom)); editor.PerformColorIDMigration(new List <SourceTargetRange> { step2 }); Assert.IsTrue(VerifyColorIDMigration(step2.TargetFrom, step1.TargetFrom)); editor.PerformItemIDMigration(new List <SourceTargetRange> { step0 }); Assert.IsTrue(VerifyItemIDMigration(step0.TargetFrom)); editor.PerformBlockIDMigration(new List <SourceTargetRange> { step1 }); Assert.IsTrue(VerifyBlockIDMigration(step0.SourceFrom, step1.TargetFrom)); // TODO: Add more test steps with multiple step ID migrations bool VerifyGroupIDMigration(int targetFrom) { for (int i = 0; i < 5; i++) { if (normalBlocks[i].GetGroupID(0) != i + targetFrom) { return(false); } } for (int i = 0; i < 5; i++) { if (moveTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } for (int i = 0; i < 5; i++) { if (instantCountTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } for (int i = 0; i < 5; i++) { if (collisionTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } return(true); } bool VerifyColorIDMigration(int targetFromA, int targetFromB) { for (int i = 0; i < 5; i++) { if (normalBlocks[i].Color1ID != i + targetFromA) { return(false); } if (normalBlocks[i].Color2ID != i + targetFromB) { return(false); } } for (int i = 0; i < 5; i++) { if (colorTriggers[i].TargetColorID != i + targetFromA) { return(false); } if (colorTriggers[i].CopiedColorID != i + targetFromB) { return(false); } } return(true); } bool VerifyItemIDMigration(int targetFrom) { for (int i = 0; i < 5; i++) { if (pickupItems[i].TargetItemID != i + targetFrom) { return(false); } } for (int i = 0; i < 5; i++) { if (pickupTriggers[i].TargetItemID != i + targetFrom) { return(false); } } return(true); } bool VerifyBlockIDMigration(int targetFromA, int targetFromB) { for (int i = 0; i < 5; i++) { if (collisionBlocks[i].BlockID != i + targetFromA) { return(false); } } for (int i = 0; i < 5; i++) { if (collisionTriggers[i].PrimaryBlockID != i + targetFromA) { return(false); } if (collisionTriggers[i].SecondaryBlockID != i + targetFromB) { return(false); } } return(true); } } } }
void Awake() { string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Geometry Dash RetroFunk/Created Levels/" + gameObject.GetComponent <ResourcesManager>().levelName + "/" + gameObject.GetComponent <ResourcesManager>().levelName + ".json"; level lvlObj = JsonUtility.FromJson <level>(File.ReadAllText(path)); rM = GameObject.Find("ResourcesManager").GetComponent <ResourcesManager>(); if (lvlObj.song.nameMp3 != null && lvlObj.song.nameWav != null) { GetSong songScript = GameObject.Find("GetSong").GetComponent <GetSong>(); songScript.nameMp3 = lvlObj.song.nameMp3; songScript.nameWav = lvlObj.song.nameWav; songScript.StartDownload(); } GameObject complete = GameObject.Find("LevelCompletedTrigger"); if (lvlObj.levelComplete.position == new Vector3(0, 0, 0)) { complete.transform.position = new Vector3(40, 15, 0); } else { complete.transform.position = lvlObj.levelComplete.position; } foreach (LevelObjects.Object m in lvlObj.objects) { GameObject p = Instantiate(objects[m.numberOfObject - 1]) as GameObject; p.name = "Object" + m.numberOfObject; p.transform.position = m.position; p.transform.localScale = m.scale; p.transform.rotation = m.rotation; p.GetComponent <ObjectPriorities>().group = m.group; p.GetComponent <SpriteRenderer>().sortingOrder = m.layer; p.GetComponent <ObjectPriorities>().isOnCenter = m.IsOnCenter; p.GetComponent <SpriteRenderer>().color = m.color; } foreach (LevelObjects.CustomObject1 m in lvlObj.customObject1) { GameObject p = Instantiate(CustomObject1) as GameObject; p.name = "CustomObject1"; p.transform.position = m.position; p.transform.localScale = m.scale; p.transform.rotation = m.rotation; p.GetComponent <ObjectPriorities>().group = m.group; p.GetComponent <SpriteRenderer>().sortingOrder = m.layer; p.transform.GetChild(0).GetComponent <SpriteRenderer>().sortingOrder = m.layer; p.GetComponent <ObjectPriorities>().isOnCenter = m.IsOnCenter; p.GetComponent <SpriteRenderer>().color = m.color; p.GetComponentInChildren <CustomObject>().nameImage = m.image; StartCoroutine(p.GetComponentInChildren <CustomObject>().DownloadImage(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Geometry Dash RetroFunk/Created Levels/" + rM.levelName + "/Sprites/" + m.image)); } foreach (LevelObjects.Spike1 m in lvlObj.spike1) { GameObject p = Instantiate(Spike1) as GameObject; p.name = "Spike1"; p.transform.position = m.position; p.transform.localScale = m.scale; p.transform.rotation = m.rotation; p.GetComponent <ObjectPriorities>().group = m.group; p.GetComponent <SpriteRenderer>().sortingOrder = m.layer; p.GetComponent <ObjectPriorities>().isOnCenter = m.IsOnCenter; p.GetComponent <SpriteRenderer>().color = m.color; } foreach (LevelObjects.Cameras m in lvlObj.cameras) { GameObject c = GameObject.FindGameObjectWithTag("GameCamera"); c.transform.position = m.position; c.transform.rotation = m.rotation; c.GetComponent <ObjectPriorities>().group = m.group; c.GetComponent <ObjectPriorities>().isOnCenter = m.IsOnCenter; } foreach (LevelObjects.ColorTriggerJSON m in lvlObj.colorTrigger) { GameObject p = Instantiate(ColorTrigger) as GameObject; p.name = "ColorTrigger"; ColorTrigger script = p.GetComponent <ColorTrigger>(); p.transform.position = m.position; p.GetComponent <ObjectPriorities>().group = m.group; script.group = m.group; script.seconds = m.seconds; script.r = m.color.x; script.b = m.color.z; script.g = m.color.y; script.a = m.color.w; } foreach (LevelObjects.MoveTriggerJSON m in lvlObj.moveTrigger) { GameObject p = Instantiate(MoveTrigger) as GameObject; p.name = "MoveTrigger"; MoveTrigger script = p.GetComponent <MoveTrigger>(); p.transform.position = m.position; p.GetComponent <ObjectPriorities>().group = m.group; script.group = m.group; script.seconds = m.seconds; script.x = m.x; script.y = m.y; script.z = m.z; } foreach (LevelObjects.RotateTriggerJSON m in lvlObj.rotateTrigger) { GameObject p = Instantiate(RotateTrigger) as GameObject; p.name = "RotateTrigger"; RotateTrigger script = p.GetComponent <RotateTrigger>(); p.transform.position = m.position; p.GetComponent <ObjectPriorities>().group = m.group; script.group = m.group; script.groupObject = m.groupObject; script.seconds = m.seconds; script.x = m.x; script.y = m.y; script.z = m.z; script.rotateInObject = m.rotateInObject; } foreach (LevelObjects.ScaleTriggerJSON m in lvlObj.scaleTrigger) { GameObject p = Instantiate(ScaleTrigger) as GameObject; p.name = "ScaleTrigger"; ScaleTrigger script = p.GetComponent <ScaleTrigger>(); p.transform.position = m.position; p.GetComponent <ObjectPriorities>().group = m.group; script.group = m.group; script.seconds = m.seconds; script.x = m.x; script.y = m.y; script.z = m.z; } foreach (LevelObjects.BloomTriggerJSON m in lvlObj.bloomTrigger) { GameObject p = Instantiate(BloomTrigger) as GameObject; p.name = "BloomTrigger"; BloomTrigger script = p.GetComponent <BloomTrigger>(); p.transform.position = m.position; script.seconds = m.seconds; script.intensityGoal = m.intensity; script.thresholdGoal = m.threshold; } foreach (LevelObjects.TVTriggerJSON m in lvlObj.tvTrigger) { GameObject p = Instantiate(TVTrigger) as GameObject; p.name = "TVTrigger"; TVTrigger script = p.GetComponent <TVTrigger>(); p.transform.position = m.position; script.seconds = m.seconds; script.colorDriftGoal = m.colorDrift; script.scanLinesGoal = m.scanLines; } foreach (LevelObjects.DisableEnableTriggerJSON m in lvlObj.disableEnableTrigger) { GameObject p = Instantiate(DisableEnableTrigger) as GameObject; p.name = "DisableEnableTrigger"; DisableEnableTrigger script = p.GetComponent <DisableEnableTrigger>(); p.transform.position = m.position; p.GetComponent <ObjectPriorities>().group = m.group; script.group = m.group; script.disableOrEnable = m.disableOrEnable; } foreach (LevelObjects.FollowTriggerJSON m in lvlObj.followTrigger) { GameObject p = Instantiate(FollowTrigger) as GameObject; p.name = "FollowTrigger"; FollowTrigger script = p.GetComponent <FollowTrigger>(); p.transform.position = m.position; p.GetComponent <ObjectPriorities>().group = m.group; script.group = m.group; script.groupToFollow = m.groupToFollow; script.follow = m.follow; } foreach (LevelObjects.StartColorTriggerJSON m in lvlObj.startColorTrigger) { GameObject p = Instantiate(StartColorTrigger) as GameObject; p.name = "StartColorTrigger"; StartColor script = p.GetComponent <StartColor>(); p.transform.position = m.position; p.GetComponent <ObjectPriorities>().group = m.group; script.group = m.group; script.groupColor = m.groupColor; } foreach (LevelObjects.KillZone m in lvlObj.killZone) { GameObject p = Instantiate(KillZone) as GameObject; p.name = "KillZone"; p.transform.position = m.position; p.transform.localScale = m.scale; p.transform.rotation = m.rotation; p.GetComponent <ObjectPriorities>().group = m.group; p.GetComponent <ObjectPriorities>().isOnCenter = m.IsOnCenter; } }
public void saveFunction() { saveObjects = new Save(); GetSong songScript = GameObject.Find("GetSong").GetComponent <GetSong>(); LevelObjects.Song song = new LevelObjects.Song(); song.nameMp3 = songScript.nameMp3; song.nameWav = songScript.nameWav; saveObjects.song = song.getJSON(); GameObject levelComplete = GameObject.Find("LevelCompletedTrigger"); LevelObjects.LevelComplete complete = new LevelObjects.LevelComplete(); complete.position = levelComplete.transform.position; saveObjects.levelComplete = complete.getJSON(); allObjects = GameObject.FindGameObjectsWithTag("Objects"); allCameras = GameObject.FindGameObjectsWithTag("GameCamera"); allTriggers = GameObject.FindGameObjectsWithTag("Trigger"); foreach (GameObject m in allObjects) { if (m.name.Split(LevelObjects.numberChars, StringSplitOptions.None)[0] == "Object") { Debug.Log(m.name); ReturnPositionAfterPlay properties = m.GetComponent <ReturnPositionAfterPlay>(); ObjectPriorities priorities = m.GetComponent <ObjectPriorities>(); Color color = m.GetComponent <SpriteRenderer>().color; int layer = m.transform.GetComponent <SpriteRenderer>().sortingOrder; LevelObjects.Object obj = new LevelObjects.Object(); obj.position = properties.position; obj.scale = properties.scale; obj.rotation = properties.rotation; obj.group = priorities.group; obj.layer = layer; obj.IsOnCenter = priorities.isOnCenter; obj.color = color; obj.numberOfObject = int.Parse(m.name.Split(new string[] { "Object" }, StringSplitOptions.None)[1]); if (saveObjects.objects == null) { saveObjects.objects += obj.getJSON(); } else { saveObjects.objects += "," + obj.getJSON(); } } else if (m.name == "CustomObject1") { ReturnPositionAfterPlay properties = m.GetComponent <ReturnPositionAfterPlay>(); ObjectPriorities priorities = m.GetComponent <ObjectPriorities>(); Color color = m.GetComponent <SpriteRenderer>().color; int layer = m.transform.GetComponent <SpriteRenderer>().sortingOrder; string image = m.GetComponentInChildren <CustomObject>().nameImage; LevelObjects.CustomObject1 obj = new LevelObjects.CustomObject1(); obj.position = properties.position; obj.scale = properties.scale; obj.rotation = properties.rotation; obj.group = priorities.group; obj.layer = layer; obj.IsOnCenter = priorities.isOnCenter; obj.color = color; obj.image = image; if (saveObjects.customObject1 == null) { saveObjects.customObject1 += obj.getJSON(); } else { saveObjects.customObject1 += "," + obj.getJSON(); } } else if (m.name == "Spike1") { ReturnPositionAfterPlay properties = m.GetComponent <ReturnPositionAfterPlay>(); ObjectPriorities priorities = m.GetComponent <ObjectPriorities>(); Color color = m.GetComponent <SpriteRenderer>().color; int layer = m.transform.GetComponent <SpriteRenderer>().sortingOrder; LevelObjects.Spike1 obj = new LevelObjects.Spike1(); obj.position = properties.position; obj.scale = properties.scale; obj.rotation = properties.rotation; obj.group = priorities.group; obj.layer = layer; obj.IsOnCenter = priorities.isOnCenter; obj.color = color; if (saveObjects.spike1 == null) { saveObjects.spike1 += obj.getJSON(); } else { saveObjects.spike1 += "," + obj.getJSON(); } } } foreach (GameObject m in allCameras) { ReturnPositionAfterPlay properties = m.GetComponent <ReturnPositionAfterPlay>(); ObjectPriorities priorities = m.GetComponent <ObjectPriorities>(); LevelObjects.Cameras obj = new LevelObjects.Cameras(); obj.position = properties.position; obj.rotation = properties.rotation; obj.group = priorities.group; obj.IsOnCenter = priorities.isOnCenter; if (saveObjects.cameras == null) { saveObjects.cameras += obj.getJSON(); } else { saveObjects.cameras += "," + obj.getJSON(); } } foreach (GameObject m in allTriggers) { Vector3 position = m.GetComponent <ReturnPositionAfterPlay>().position; if (m.name == "ColorTrigger") { ColorTrigger script = m.GetComponent <ColorTrigger>(); LevelObjects.ColorTriggerJSON obj = new LevelObjects.ColorTriggerJSON(); obj.position = position; obj.group = script.group; obj.seconds = script.seconds; obj.color = script.colorFinish * 255; if (saveObjects.colorTrigger == null) { saveObjects.colorTrigger += obj.getJSON(); } else { saveObjects.colorTrigger += "," + obj.getJSON(); } } else if (m.name == "MoveTrigger") { MoveTrigger script = m.GetComponent <MoveTrigger>(); LevelObjects.MoveTriggerJSON obj = new LevelObjects.MoveTriggerJSON(); obj.position = position; obj.group = script.group; obj.seconds = script.seconds; obj.x = script.x; obj.y = script.y; obj.z = script.z; if (saveObjects.moveTrigger == null) { saveObjects.moveTrigger += obj.getJSON(); } else { saveObjects.moveTrigger += "," + obj.getJSON(); } } else if (m.name == "RotateTrigger") { RotateTrigger script = m.GetComponent <RotateTrigger>(); LevelObjects.RotateTriggerJSON obj = new LevelObjects.RotateTriggerJSON(); obj.position = position; obj.group = script.group; obj.groupObject = script.groupObject; obj.seconds = script.seconds; obj.x = script.x; obj.y = script.y; obj.z = script.z; obj.rotateInObject = script.rotateInObject; if (saveObjects.rotateTrigger == null) { saveObjects.rotateTrigger += obj.getJSON(); } else { saveObjects.rotateTrigger += "," + obj.getJSON(); } } else if (m.name == "ScaleTrigger") { ScaleTrigger script = m.GetComponent <ScaleTrigger>(); LevelObjects.ScaleTriggerJSON obj = new LevelObjects.ScaleTriggerJSON(); obj.position = position; obj.group = script.group; obj.seconds = script.seconds; obj.x = script.x; obj.y = script.y; obj.z = script.z; if (saveObjects.scaleTrigger == null) { saveObjects.scaleTrigger += obj.getJSON(); } else { saveObjects.scaleTrigger += "," + obj.getJSON(); } } else if (m.name == "BloomTrigger") { BloomTrigger script = m.GetComponent <BloomTrigger>(); LevelObjects.BloomTriggerJSON obj = new LevelObjects.BloomTriggerJSON(); obj.position = position; obj.intensity = script.intensityGoal; obj.threshold = script.thresholdGoal; obj.seconds = script.seconds; if (saveObjects.bloomTrigger == null) { saveObjects.bloomTrigger += obj.getJSON(); } else { saveObjects.bloomTrigger += "," + obj.getJSON(); } } else if (m.name == "TVTrigger") { TVTrigger script = m.GetComponent <TVTrigger>(); LevelObjects.TVTriggerJSON obj = new LevelObjects.TVTriggerJSON(); obj.position = position; obj.scanLines = script.scanLinesGoal; obj.colorDrift = script.colorDriftGoal; obj.seconds = script.seconds; if (saveObjects.tvTrigger == null) { saveObjects.tvTrigger += obj.getJSON(); } else { saveObjects.tvTrigger += "," + obj.getJSON(); } } else if (m.name == "DisableEnableTrigger") { DisableEnableTrigger script = m.GetComponent <DisableEnableTrigger>(); LevelObjects.DisableEnableTriggerJSON obj = new LevelObjects.DisableEnableTriggerJSON(); obj.position = position; obj.group = script.group; obj.disableOrEnable = script.disableOrEnable; if (saveObjects.disableEnableTrigger == null) { saveObjects.disableEnableTrigger += obj.getJSON(); } else { saveObjects.disableEnableTrigger += "," + obj.getJSON(); } } else if (m.name == "FollowTrigger") { FollowTrigger script = m.GetComponent <FollowTrigger>(); LevelObjects.FollowTriggerJSON obj = new LevelObjects.FollowTriggerJSON(); obj.position = position; obj.group = script.group; obj.groupToFollow = script.groupToFollow; obj.follow = script.follow; if (saveObjects.followTrigger == null) { saveObjects.followTrigger += obj.getJSON(); } else { saveObjects.followTrigger += "," + obj.getJSON(); } } else if (m.name == "StartColorTrigger") { StartColor script = m.GetComponent <StartColor>(); LevelObjects.StartColorTriggerJSON obj = new LevelObjects.StartColorTriggerJSON(); obj.position = position; obj.group = script.group; obj.groupColor = script.groupColor; if (saveObjects.startColorTrigger == null) { saveObjects.startColorTrigger += obj.getJSON(); } else { saveObjects.startColorTrigger += "," + obj.getJSON(); } } else if (m.name == "KillZone") { ReturnPositionAfterPlay properties = m.GetComponent <ReturnPositionAfterPlay>(); ObjectPriorities priorities = m.GetComponent <ObjectPriorities>(); LevelObjects.KillZone obj = new LevelObjects.KillZone(); obj.position = properties.position; obj.scale = properties.scale; obj.rotation = properties.rotation; obj.group = priorities.group; obj.IsOnCenter = priorities.isOnCenter; if (saveObjects.killZone == null) { saveObjects.killZone += obj.getJSON(); } else { saveObjects.killZone += "," + obj.getJSON(); } } } ResourcesManager path = gameObject.GetComponent <ResourcesManager>(); string json = "{" + saveObjects.getAllObjects() + "}"; string jsonPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Geometry Dash RetroFunk/Created Levels/" + path.levelName + "/" + path.levelName + ".json"; File.WriteAllText(jsonPath, json); }