static public void AddGlobalLight(int index, RadiosityLight rl) { MdxRender.Dev.RenderState.Ambient = Color.Gray; MdxRender.Dev.Lights[0].Type = LightType.Directional; MdxRender.Dev.Lights[0].Diffuse = Color.FromArgb((int)(rl.color[0] * 255), (int)(rl.color[1] * 255), (int)(rl.color[2] * 255)); MdxRender.Dev.Lights[0].Direction = rl.direction; MdxRender.Dev.Lights[0].Update(); MdxRender.Dev.Lights[0].Enabled = true; MdxRender.Dev.RenderState.Lighting = true; }
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(); }