Ejemplo n.º 1
0
        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();
        }