static public void CloseProject(bool bSave)
        {
            if (bSave)
            {
                SaveProject();
            }

            Menus.Mode = RenderMenuMode.Disabled;
            MapSpawns.Clear();
            m_ScenarioTag  = null;
            m_ScenarioData = null;

            //reset fog

            //clean up resources
        }
Beispiel #2
0
        public void LoadScenario(Scenario st, TagBase scenario_data)
        {
            this.version = scenario_data.Header.GameVersion;
            int i;

            instanceCollection.Clear();

            //Process palettes
            scenarioTag = st;

            //load bipeds
            for (i = 0; i < st.ScenarioValues.Bipeds.Count; i++)
            {
                CreateInstance(st.ScenarioValues.Bipeds[i]);
            }

            //load decals
            //for(i=0; i<st.ScenarioValues.Decals.Count; i++)
            //  CreateInstance(st.ScenarioValues.Decals[i]);

            //load light fixtures
            for (i = 0; i < st.ScenarioValues.LightFixtures.Count; i++)
            {
                CreateInstance(st.ScenarioValues.LightFixtures[i]);
            }

            //load scenery
            for (i = 0; i < st.ScenarioValues.Scenery.Count; i++)
            {
                CreateInstance(st.ScenarioValues.Scenery[i]);
            }

            //load vehicles
            for (i = 0; i < st.ScenarioValues.Vehicles.Count; i++)
            {
                CreateInstance(st.ScenarioValues.Vehicles[i]);
            }

            //load netgame equipment
            for (i = 0; i < st.ScenarioValues.NetgameEquipment.Count; i++)
            {
                CreateInstance(st.ScenarioValues.NetgameEquipment[i]);
            }

            //load sound scenery
            for (i = 0; i < st.ScenarioValues.SoundScenery.Count; i++)
            {
                CreateInstance(st.ScenarioValues.SoundScenery[i]);
            }

            //load player spawns
            for (i = 0; i < st.ScenarioValues.PlayerStartingLocations.Count; i++)
            {
                CreateInstance(st.ScenarioValues.PlayerStartingLocations[i]);
            }

            //load netgame flags
            for (i = 0; i < st.ScenarioValues.NetgameFlags.Count; i++)
            {
                CreateInstance(st.ScenarioValues.NetgameFlags[i]);
            }


            if (st.ScenarioValues.StructureBsps.Count >= 1)
            {
                //get BSP filename
                TagFileName bsp_filename = new TagFileName(st.ScenarioValues.StructureBsps[0].StructureBsp.Value,
                                                           "sbsp", scenario_data.Header.GameVersion);

                //get Sky filename
                TagFileName sky_filename = new TagFileName(st.ScenarioValues.Skies[0].Sky.Value, "sky ", scenario_data.Header.GameVersion);
                TagBase     sky_data     = new TagBase();
                sky_data.LoadTagBuffer(sky_filename);
                BinaryReader sky_br  = new BinaryReader(sky_data.Stream);
                Sky          sky_tag = new Sky();
                sky_tag.Read(sky_br);
                sky_tag.ReadChildData(sky_br);

                MdxRender.RGB fog = new MdxRender.RGB();
                fog.R = sky_tag.SkyValues.OutdoorFogColor.R;
                fog.G = sky_tag.SkyValues.OutdoorFogColor.G;
                fog.B = sky_tag.SkyValues.OutdoorFogColor.B;
                MdxRender.FogColor = fog;

                /// Not sure how these units equate to d3d units - * 2.5 seems to be pretty good.
                MdxRender.FogStart   = sky_tag.SkyValues.OutdoorFogStartDistance.Value * 2.5f;
                MdxRender.FogEnd     = sky_tag.SkyValues.OutdoorFogOpaqueDistance.Value * 2.5f;
                MdxRender.FogDensity = sky_tag.SkyValues.OutdoorFogMaximumDensity.Value;

                MdxRender.ClearColor = Color.FromArgb(
                    (int)(sky_tag.SkyValues.OutdoorAmbientRadiosityColor.R * 255),
                    (int)(sky_tag.SkyValues.OutdoorAmbientRadiosityColor.G * 255),
                    (int)(sky_tag.SkyValues.OutdoorAmbientRadiosityColor.B * 255));

                MdxRender.FogEnabled = true;

                TagFileName sky_model_tfn;

                if (this.version == MapfileVersion.XHALO1)
                {
                    sky_model_tfn = new TagFileName(sky_tag.SkyValues.Model.Value, "mode", scenario_data.Header.GameVersion);
                }
                else
                {
                    sky_model_tfn = new TagFileName(sky_tag.SkyValues.Model.Value, "mod2", scenario_data.Header.GameVersion);
                }

                MdxRender.LoadBsp(bsp_filename, sky_model_tfn);

                //Load up them thar lights for Radiosity
                ProjectManager.RadiosityLights.Clear();
                //sky_tag
                for (int l = 0; l < sky_tag.SkyValues.Lights.Count; l++)
                {
                    RadiosityLight rl = new RadiosityLight();
                    rl.color[0] = sky_tag.SkyValues.Lights[l].Color.R;
                    rl.color[1] = sky_tag.SkyValues.Lights[l].Color.G;
                    rl.color[2] = sky_tag.SkyValues.Lights[l].Color.B;
                    rl.power    = sky_tag.SkyValues.Lights[l].Power.Value;

                    //don't know how this is turned into a vector, but we'll figure it out
                    //for now get x,y from yaw and z component from pitch (make sure Z component is negative)
                    rl.direction.Z = -1;
                    double y, p;
                    y = sky_tag.SkyValues.Lights[l].Direction.Y;
                    p = sky_tag.SkyValues.Lights[l].Direction.P;
                    rl.direction.X = -(float)Math.Cos(y);
                    rl.direction.Y = -(float)Math.Sin(y);
                    rl.direction.Z = -(float)Math.Sin(p);
                    ProjectManager.RadiosityLights.Add(rl);
                    MdxRender.AddGlobalLight(0, rl);
                }
            }

            instanceCollection.UpdateObjectColors();
        }