public void LoadScenario(int scenarioNo) { sceneListView.RootLists.Clear(); cameraListView.RootLists.Clear(); lightsSceneListView.RootLists.Clear(); scene.objects.Clear(); cameraScene.objects.Clear(); lightScene.objects.Clear(); layerViewerDropDown.DropDownItems.Clear(); // we want to clear out the children of the 5 camera type root nodes //for (int i = 0; i < 5; i++) // camerasTree.Nodes[i].Nodes.Clear(); mGalaxy.SetScenario(scenarioNo); scenarioNameTxtBox.Text = mGalaxy.mCurScenarioName; // first we need to get the proper layers that the galaxy itself uses List <string> layers = mGalaxy.GetGalaxyLayers(mGalaxy.GetMaskUsedInZoneOnCurrentScenario(mGalaxyName)); layers.ForEach(l => layerViewerDropDown.DropDownItems.Add(l)); // get our main galaxy's zone Zone mainZone = mGalaxy.GetZone(mGalaxyName); // now we get the zones used on these layers List <string> zonesUsed = new List <string> { // add our galaxy name itself so we can properly add it to a scene list with the other zones mGalaxyName }; zonesUsed.AddRange(mainZone.GetZonesUsedOnLayers(layers)); Dictionary <string, int> zoneMasks = new Dictionary <string, int>(); ObjectHolder mainHolder = new ObjectHolder(); Dictionary <string, List <Camera> > cameras = new Dictionary <string, List <Camera> >(); List <Light> lights = new List <Light>(); List <PathPointObj> pathpoints = new List <PathPointObj>(); foreach (string zone in zonesUsed) { zoneMasks.Add(zone, mGalaxy.GetMaskUsedInZoneOnCurrentScenario(zone)); Zone z = mGalaxy.GetZone(zone); ObjectHolder curHolder = z.GetAllObjectsFromLayers(mGalaxy.GetGalaxyLayers(zoneMasks[zone])); foreach (PathObj pobj in z.mPaths) { pathpoints.AddRange(pobj.mPathPointObjs); } cameras.Add(zone, z.mCameras); if (z.mLights != null) { lights.AddRange(z.mLights); } if (!z.mIsMainGalaxy) { Zone galaxyZone = mGalaxy.GetGalaxyZone(); // the first step List <string> galaxyLayers = mGalaxy.GetGalaxyLayers(zoneMasks[mGalaxy.mName]); foreach (string layer in galaxyLayers) { List <StageObj> stages = galaxyZone.mZones[layer]; foreach (StageObj o in stages) { if (o.mName == z.mZoneName) { curHolder.ApplyZoneOffset(o.mPosition, o.mRotation); } } } } mainHolder.AddObjects(curHolder); } sceneListView.RootLists.Add("Areas", mainHolder.GetObjectsOfType("AreaObj")); sceneListView.RootLists.Add("Camera Areas", mainHolder.GetObjectsOfType("CameraObj")); sceneListView.RootLists.Add("Objects", mainHolder.GetObjectsOfType("Obj")); sceneListView.RootLists.Add("Demos", mainHolder.GetObjectsOfType("DemoObj")); sceneListView.RootLists.Add("Positions", mainHolder.GetObjectsOfType("GeneralPosObj")); sceneListView.RootLists.Add("Debug", mainHolder.GetObjectsOfType("DebugMoveObj")); sceneListView.RootLists.Add("Gravity", mainHolder.GetObjectsOfType("PlanetObj")); sceneListView.RootLists.Add("Start", mainHolder.GetObjectsOfType("StartObj")); sceneListView.RootLists.Add("Map Parts", mainHolder.GetObjectsOfType("MapPartsObj")); sceneListView.RootLists.Add("Paths", pathpoints); sceneListView.UpdateComboBoxItems(); sceneListView.SelectedItems = scene.SelectedObjects; sceneListView.SetRootList("Areas"); scene.objects.AddRange(mainHolder.GetObjectsOfType("AreaObj")); scene.objects.AddRange(mainHolder.GetObjectsOfType("CameraObj")); scene.objects.AddRange(mainHolder.GetObjectsOfType("Obj")); scene.objects.AddRange(mainHolder.GetObjectsOfType("DemoObj")); scene.objects.AddRange(mainHolder.GetObjectsOfType("GeneralPosObj")); scene.objects.AddRange(mainHolder.GetObjectsOfType("DebugMoveObj")); scene.objects.AddRange(mainHolder.GetObjectsOfType("PlanetObj")); scene.objects.AddRange(mainHolder.GetObjectsOfType("StartObj")); scene.objects.AddRange(mainHolder.GetObjectsOfType("MapPartsObj")); scene.objects.AddRange(pathpoints); List <Camera> cubeCameras = new List <Camera>(); List <Camera> groupCameras = new List <Camera>(); List <Camera> eventCameras = new List <Camera>(); List <Camera> startCameras = new List <Camera>(); List <Camera> otherCameras = new List <Camera>(); foreach (string zone in zonesUsed) { cameras[zone].ForEach(c => { if (c.GetCameraType() == Camera.CameraType.Cube) { cubeCameras.Add(c); } }); cameras[zone].ForEach(c => { if (c.GetCameraType() == Camera.CameraType.Group) { groupCameras.Add(c); } }); cameras[zone].ForEach(c => { if (c.GetCameraType() == Camera.CameraType.Event) { eventCameras.Add(c); } }); cameras[zone].ForEach(c => { if (c.GetCameraType() == Camera.CameraType.Start) { startCameras.Add(c); } }); cameras[zone].ForEach(c => { if (c.GetCameraType() == Camera.CameraType.Other) { otherCameras.Add(c); } }); } cameraListView.RootLists.Add("Cube", cubeCameras); cameraListView.RootLists.Add("Group", groupCameras); cameraListView.RootLists.Add("Event", eventCameras); cameraListView.RootLists.Add("Start", startCameras); cameraListView.RootLists.Add("Other", otherCameras); cameraListView.UpdateComboBoxItems(); cameraListView.SelectedItems = cameraScene.SelectedObjects; cameraListView.SetRootList("Cube"); cameraScene.objects.AddRange(cubeCameras); cameraScene.objects.AddRange(groupCameras); cameraScene.objects.AddRange(eventCameras); cameraScene.objects.AddRange(startCameras); cameraScene.objects.AddRange(otherCameras); lightsSceneListView.RootLists.Add("Lights", lights); lightsSceneListView.UpdateComboBoxItems(); lightsSceneListView.SelectedItems = lightScene.SelectedObjects; lightsSceneListView.SetRootList("Lights"); lightScene.objects.AddRange(lights); galaxyViewControl.Refresh(); }