private void newToolStripMenuItem_Click(object sender, EventArgs e) { workFileName = string.Empty; saveAsToolStripMenuItem.Enabled = true; closeToolStripMenuItem.Enabled = true; splitContainerGeneral.Enabled = true; splitContainerMaterial.Enabled = true; splitContainerEffect.Enabled = true; // Default values BaseMaterialFile bgsm = new BGSM(); BaseMaterialFile bgem = new BGEM(); SetUIFromMaterial(ref bgsm); SetUIFromMaterial(ref bgem); }
private void OpenMaterial(string fileName, uint signature) { BaseMaterialFile material; if (signature == BGSM.Signature) { material = new BGSM(); } else if (signature == BGEM.Signature) { material = new BGEM(); } else { return; } using (FileStream file = new FileStream(fileName, FileMode.Open)) { char start = Convert.ToChar(file.ReadByte()); file.Position = 0; // Check for JSON if (start == '{' || start == '[') { try { var ser = new DataContractJsonSerializer(material.GetType()); if (signature == BGSM.Signature) { material = (BGSM)ser.ReadObject(file); } else if (signature == BGEM.Signature) { material = (BGEM)ser.ReadObject(file); } } catch (Exception) { } } // Try binary else if (!material.Open(file)) { MessageBox.Show(string.Format("Failed to open file '{0}'!", fileName), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } SetUIFromMaterial(ref material); workFileName = fileName; saveToolStripMenuItem.Enabled = true; saveAsToolStripMenuItem.Enabled = true; closeToolStripMenuItem.Enabled = true; splitContainerGeneral.Enabled = true; splitContainerMaterial.Enabled = true; splitContainerEffect.Enabled = true; int nameIndex = fileName.LastIndexOf('\\'); this.Text = fileName.Substring(nameIndex + 1, fileName.Length - nameIndex - 1); changed = false; } }
private void SetMaterialFromUI(ref BaseMaterialFile file) { // Base file.Version = Convert.ToUInt32(numVersion.Value); file.TileU = cbTileU.Checked; file.TileV = cbTileV.Checked; file.UOffset = Convert.ToSingle(numOffsetU.Value); file.VOffset = Convert.ToSingle(numOffsetV.Value); file.UScale = Convert.ToSingle(numScaleU.Value); file.VScale = Convert.ToSingle(numScaleV.Value); file.Alpha = Convert.ToSingle(numAlpha.Value); file.AlphaBlendMode = (BaseMaterialFile.AlphaBlendModeType)selAlphaBlendMode.SelectedIndex; file.AlphaTestRef = Convert.ToByte(numAlphaTestReference.Value); file.AlphaTest = cbAlphaTest.Checked; file.ZBufferWrite = cbZBufferWrite.Checked; file.ZBufferTest = cbZBufferTest.Checked; file.ScreenSpaceReflections = cbScreenSpaceReflections.Checked; file.WetnessControlScreenSpaceReflections = cbWetnessControlSSR.Checked; file.Decal = cbDecal.Checked; file.TwoSided = cbTwoSided.Checked; file.DecalNoFade = cbDecalNoFade.Checked; file.NonOccluder = cbNonOccluder.Checked; file.Refraction = cbRefraction.Checked; file.RefractionFalloff = cbRefractionFalloff.Checked; file.RefractionPower = Convert.ToSingle(numRefractionPower.Value); file.EnvironmentMapping = cbEnvironmentMapping.Checked; file.EnvironmentMappingMaskScale = Convert.ToSingle(numEnvironmentMaskScale.Value); file.GrayscaleToPaletteColor = cbGrayscaleToPaletteColor.Checked; if (file.GetType() == typeof(BGSM)) { // BGSM BGSM bgsm = (BGSM)file; bgsm.DiffuseTexture = tbDiffuseTexture.Text; bgsm.NormalTexture = tbNormalTexture.Text; bgsm.SmoothSpecTexture = tbSmoothSpecularTexture.Text; bgsm.GreyscaleTexture = tbGreyscaleTexture.Text; bgsm.EnvmapTexture = tbEnvironmentMapTexture.Text; bgsm.GlowTexture = tbGlowTexture.Text; bgsm.InnerLayerTexture = tbInnerLayerTexture.Text; bgsm.WrinklesTexture = tbWrinklesTexture.Text; bgsm.DisplacementTexture = tbDisplacementTexture.Text; bgsm.EnableEditorAlphaRef = cbEnableEditorAlphaRef.Checked; bgsm.RimLighting = cbRimLighting.Checked; bgsm.RimPower = Convert.ToSingle(numRimPower.Value); bgsm.BackLightPower = Convert.ToSingle(numBacklightPower.Value); bgsm.SubsurfaceLighting = cbSubsurfaceLighting.Checked; bgsm.SubsurfaceLightingRolloff = Convert.ToSingle(numSubsurfaceLightingRolloff.Value); bgsm.SpecularEnabled = cbSpecularEnabled.Checked; bgsm.SpecularColor = (uint)btSpecularColor.BackColor.ToArgb(); bgsm.SpecularMult = Convert.ToSingle(numSpecularMultiplier.Value); bgsm.Smoothness = Convert.ToSingle(numSmoothness.Value); bgsm.FresnelPower = Convert.ToSingle(numFresnelPower.Value); bgsm.WetnessControlSpecScale = Convert.ToSingle(numWetSpecScale.Value); bgsm.WetnessControlSpecPowerScale = Convert.ToSingle(numWetSpecPowerScale.Value); bgsm.WetnessControlSpecMinvar = Convert.ToSingle(numWetSpecMinVar.Value); bgsm.WetnessControlEnvMapScale = Convert.ToSingle(numWetEnvMapScale.Value); bgsm.WetnessControlFresnelPower = Convert.ToSingle(numWetFresnelPower.Value); bgsm.WetnessControlMetalness = Convert.ToSingle(numWetMetalness.Value); bgsm.RootMaterialPath = tbRootMaterialPath.Text; bgsm.AnisoLighting = cbAnisoLighting.Checked; bgsm.EmitEnabled = cbEmittanceEnabled.Checked; bgsm.EmittanceColor = (uint)btEmittanceColor.BackColor.ToArgb(); bgsm.EmittanceMult = Convert.ToSingle(numEmittanceMultiplier.Value); bgsm.ModelSpaceNormals = cbModelSpaceNormals.Checked; bgsm.ExternalEmittance = cbExternalEmittance.Checked; bgsm.BackLighting = cbBackLighting.Checked; bgsm.ReceiveShadows = cbReceiveShadows.Checked; bgsm.HideSecret = cbHideSecret.Checked; bgsm.CastShadows = cbCastShadows.Checked; bgsm.DissolveFade = cbDissolveFade.Checked; bgsm.AssumeShadowmask = cbAssumeShadowmask.Checked; bgsm.Glowmap = cbGlowmap.Checked; bgsm.EnvironmentMappingWindow = cbEnvironmentMapWindow.Checked; bgsm.EnvironmentMappingEye = cbEnvironmentMapEye.Checked; bgsm.Hair = cbHair.Checked; bgsm.HairTintColor = (uint)btHairTintColor.BackColor.ToArgb(); bgsm.Tree = cbTree.Checked; bgsm.Facegen = cbFacegen.Checked; bgsm.SkinTint = cbSkinTint.Checked; bgsm.Tessellate = cbTessellate.Checked; bgsm.DisplacementTextureBias = Convert.ToSingle(numDisplacementTexBias.Value); bgsm.DisplacementTextureScale = Convert.ToSingle(numDisplacementTexScale.Value); bgsm.TessellationPnScale = Convert.ToSingle(numTessellationPNScale.Value); bgsm.TessellationBaseFactor = Convert.ToSingle(numTessellationBaseFactor.Value); bgsm.TessellationFadeDistance = Convert.ToSingle(numTessellationFadeDistance.Value); bgsm.GrayscaleToPaletteScale = Convert.ToSingle(numGrayscaleToPaletteScale.Value); bgsm.SkewSpecularAlpha = cbSkewSpecularAlpha.Checked; } else if (file.GetType() == typeof(BGEM)) { // BGEM BGEM bgem = (BGEM)file; bgem.BaseTexture = tbBaseTexture.Text; bgem.GrayscaleTexture = tbGrayscaleTexture.Text; bgem.EnvmapTexture = tbEnvmapTexture.Text; bgem.NormalTexture = tbNormalTexture_effect.Text; bgem.EnvmapMaskTexture = tbEnvmapMaskTexture.Text; bgem.BloodEnabled = cbBloodEnabled.Checked; bgem.EffectLightingEnabled = cbEffectLightingEnabled.Checked; bgem.FalloffEnabled = cbFalloffEnabled.Checked; bgem.FalloffColorEnabled = cbFalloffColorEnabled.Checked; bgem.GrayscaleToPaletteAlpha = cbGrayscaleToPaletteAlpha.Checked; bgem.SoftEnabled = cbSoftEnabled.Checked; bgem.BaseColor = (uint)btBaseColor.BackColor.ToArgb(); bgem.BaseColorScale = Convert.ToSingle(numBaseColorScale.Value); bgem.FalloffStartAngle = Convert.ToSingle(numFalloffStartAngle.Value); bgem.FalloffStopAngle = Convert.ToSingle(numFalloffStopAngle.Value); bgem.FalloffStartOpacity = Convert.ToSingle(numFalloffStartOpacity.Value); bgem.FalloffStopOpacity = Convert.ToSingle(numFalloffStopOpacity.Value); bgem.LightingInfluence = Convert.ToSingle(numLightingInfluence.Value); bgem.EnvmapMinLOD = Convert.ToByte(numEnvmapMinLOD.Value); bgem.SoftDepth = Convert.ToSingle(numSoftDepth.Value); } }
private void saveToolStripMenuItem_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(workFileName)) { saveAsToolStripMenuItem_Click(null, null); } BaseMaterialFile material; if (workFileName.ToLower().EndsWith(".bgsm")) { material = new BGSM(); } else if (workFileName.ToLower().EndsWith(".bgem")) { material = new BGEM(); } else { return; } SetMaterialFromUI(ref material); try { using (var file = new FileStream(workFileName, FileMode.Create)) { if (serializeToJSONToolStripMenuItem.Checked) { var currentCulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; try { using (var writer = JsonReaderWriterFactory.CreateJsonWriter(file, Encoding.UTF8, true, true, " ")) { var ser = new DataContractJsonSerializer(material.GetType(), new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true }); ser.WriteObject(writer, material); writer.Flush(); } } catch { MessageBox.Show(string.Format("Failed to serialize to JSON data for file '{0}'!", workFileName), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { Thread.CurrentThread.CurrentCulture = currentCulture; } } else { if (!material.Save(file)) { MessageBox.Show(string.Format("Failed to save file '{0}'!", workFileName), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } } catch { MessageBox.Show(string.Format("Failed to save file '{0}'!", workFileName), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } int nameIndex = workFileName.LastIndexOf('\\'); this.Text = workFileName.Substring(nameIndex + 1, workFileName.Length - nameIndex - 1); changed = false; }
private void SetUIFromMaterial(ref BaseMaterialFile file) { // Base numVersion.Value = file.Version; cbTileU.Checked = file.TileU; cbTileV.Checked = file.TileV; numOffsetU.Value = Convert.ToDecimal(file.UOffset); numOffsetV.Value = Convert.ToDecimal(file.VOffset); numScaleU.Value = Convert.ToDecimal(file.UScale); numScaleV.Value = Convert.ToDecimal(file.VScale); numAlpha.Value = Convert.ToDecimal(file.Alpha); int alphaBlendMode = (int)file.AlphaBlendMode; if (alphaBlendMode < 0 || alphaBlendMode > 4) { alphaBlendMode = 0; } selAlphaBlendMode.SelectedIndex = alphaBlendMode; numAlphaTestReference.Value = file.AlphaTestRef; cbAlphaTest.Checked = file.AlphaTest; cbZBufferWrite.Checked = file.ZBufferWrite; cbZBufferTest.Checked = file.ZBufferTest; cbScreenSpaceReflections.Checked = file.ScreenSpaceReflections; cbWetnessControlSSR.Checked = file.WetnessControlScreenSpaceReflections; cbDecal.Checked = file.Decal; cbTwoSided.Checked = file.TwoSided; cbDecalNoFade.Checked = file.DecalNoFade; cbNonOccluder.Checked = file.NonOccluder; cbRefraction.Checked = file.Refraction; cbRefractionFalloff.Checked = file.RefractionFalloff; numRefractionPower.Value = Convert.ToDecimal(file.RefractionPower); cbEnvironmentMapping.Checked = file.EnvironmentMapping; numEnvironmentMaskScale.Value = Convert.ToDecimal(file.EnvironmentMappingMaskScale); cbGrayscaleToPaletteColor.Checked = file.GrayscaleToPaletteColor; if (file.GetType() == typeof(BGSM)) { // BGSM BGSM bgsm = (BGSM)file; tbDiffuseTexture.Text = bgsm.DiffuseTexture; tbNormalTexture.Text = bgsm.NormalTexture; tbSmoothSpecularTexture.Text = bgsm.SmoothSpecTexture; tbGreyscaleTexture.Text = bgsm.GreyscaleTexture; tbEnvironmentMapTexture.Text = bgsm.EnvmapTexture; tbGlowTexture.Text = bgsm.GlowTexture; tbInnerLayerTexture.Text = bgsm.InnerLayerTexture; tbWrinklesTexture.Text = bgsm.WrinklesTexture; tbDisplacementTexture.Text = bgsm.DisplacementTexture; cbEnableEditorAlphaRef.Checked = bgsm.EnableEditorAlphaRef; cbRimLighting.Checked = bgsm.RimLighting; numRimPower.Value = Convert.ToDecimal(bgsm.RimPower); numBacklightPower.Value = Convert.ToDecimal(bgsm.BackLightPower); cbSubsurfaceLighting.Checked = bgsm.SubsurfaceLighting; numSubsurfaceLightingRolloff.Value = Convert.ToDecimal(bgsm.SubsurfaceLightingRolloff); cbSpecularEnabled.Checked = bgsm.SpecularEnabled; Color specularColor = Color.FromArgb((int)bgsm.SpecularColor); btSpecularColor.BackColor = Color.FromArgb(specularColor.R, specularColor.G, specularColor.B); numSpecularMultiplier.Value = Convert.ToDecimal(bgsm.SpecularMult); numSmoothness.Value = Convert.ToDecimal(Math.Min(Math.Max(0.0f, bgsm.Smoothness), 1.0f)); numFresnelPower.Value = Convert.ToDecimal(bgsm.FresnelPower); numWetSpecScale.Value = Convert.ToDecimal(bgsm.WetnessControlSpecScale); numWetSpecPowerScale.Value = Convert.ToDecimal(bgsm.WetnessControlSpecPowerScale); numWetSpecMinVar.Value = Convert.ToDecimal(bgsm.WetnessControlSpecMinvar); numWetEnvMapScale.Value = Convert.ToDecimal(bgsm.WetnessControlEnvMapScale); numWetFresnelPower.Value = Convert.ToDecimal(bgsm.WetnessControlFresnelPower); numWetMetalness.Value = Convert.ToDecimal(bgsm.WetnessControlMetalness); tbRootMaterialPath.Text = bgsm.RootMaterialPath; cbAnisoLighting.Checked = bgsm.AnisoLighting; cbEmittanceEnabled.Checked = bgsm.EmitEnabled; Color emittanceColor = Color.FromArgb((int)bgsm.EmittanceColor); btEmittanceColor.BackColor = Color.FromArgb(emittanceColor.R, emittanceColor.G, emittanceColor.B); numEmittanceMultiplier.Value = Convert.ToDecimal(bgsm.EmittanceMult); cbModelSpaceNormals.Checked = bgsm.ModelSpaceNormals; cbExternalEmittance.Checked = bgsm.ExternalEmittance; cbBackLighting.Checked = bgsm.BackLighting; cbReceiveShadows.Checked = bgsm.ReceiveShadows; cbHideSecret.Checked = bgsm.HideSecret; cbCastShadows.Checked = bgsm.CastShadows; cbDissolveFade.Checked = bgsm.DissolveFade; cbAssumeShadowmask.Checked = bgsm.AssumeShadowmask; cbGlowmap.Checked = bgsm.Glowmap; cbEnvironmentMapWindow.Checked = bgsm.EnvironmentMappingWindow; cbEnvironmentMapEye.Checked = bgsm.EnvironmentMappingEye; cbHair.Checked = bgsm.Hair; Color hairTintColor = Color.FromArgb((int)bgsm.HairTintColor); btHairTintColor.BackColor = Color.FromArgb(hairTintColor.R, hairTintColor.G, hairTintColor.B); cbTree.Checked = bgsm.Tree; cbFacegen.Checked = bgsm.Facegen; cbSkinTint.Checked = bgsm.SkinTint; cbTessellate.Checked = bgsm.Tessellate; numDisplacementTexBias.Value = Convert.ToDecimal(bgsm.DisplacementTextureBias); numDisplacementTexScale.Value = Convert.ToDecimal(bgsm.DisplacementTextureScale); numTessellationPNScale.Value = Convert.ToDecimal(bgsm.TessellationPnScale); numTessellationBaseFactor.Value = Convert.ToDecimal(bgsm.TessellationBaseFactor); numTessellationFadeDistance.Value = Convert.ToDecimal(bgsm.TessellationFadeDistance); numGrayscaleToPaletteScale.Value = Convert.ToDecimal(bgsm.GrayscaleToPaletteScale); cbSkewSpecularAlpha.Checked = bgsm.SkewSpecularAlpha; } else if (file.GetType() == typeof(BGEM)) { // BGEM BGEM bgem = (BGEM)file; tbBaseTexture.Text = bgem.BaseTexture; tbGrayscaleTexture.Text = bgem.GrayscaleTexture; tbEnvmapTexture.Text = bgem.EnvmapTexture; tbNormalTexture_effect.Text = bgem.NormalTexture; tbEnvmapMaskTexture.Text = bgem.EnvmapMaskTexture; cbBloodEnabled.Checked = bgem.BloodEnabled; cbEffectLightingEnabled.Checked = bgem.EffectLightingEnabled; cbFalloffEnabled.Checked = bgem.FalloffEnabled; cbFalloffColorEnabled.Checked = bgem.FalloffColorEnabled; cbGrayscaleToPaletteAlpha.Checked = bgem.GrayscaleToPaletteAlpha; cbSoftEnabled.Checked = bgem.SoftEnabled; Color baseColor = Color.FromArgb((int)bgem.BaseColor); btBaseColor.BackColor = Color.FromArgb(baseColor.R, baseColor.G, baseColor.B); numBaseColorScale.Value = Convert.ToDecimal(bgem.BaseColorScale); numFalloffStartAngle.Value = Convert.ToDecimal(bgem.FalloffStartAngle); numFalloffStopAngle.Value = Convert.ToDecimal(bgem.FalloffStopAngle); numFalloffStartOpacity.Value = Convert.ToDecimal(bgem.FalloffStartOpacity); numFalloffStopOpacity.Value = Convert.ToDecimal(bgem.FalloffStopOpacity); numLightingInfluence.Value = Convert.ToDecimal(bgem.LightingInfluence); numEnvmapMinLOD.Value = bgem.EnvmapMinLOD; numSoftDepth.Value = Convert.ToDecimal(bgem.SoftDepth); } UpdateUI(); }
private void saveToolStripMenuItem_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(workFileName)) { saveAsToolStripMenuItem_Click(null, null); } BaseMaterialFile material; if (workFileName.ToLower().EndsWith(".bgsm")) material = new BGSM(); else if (workFileName.ToLower().EndsWith(".bgem")) material = new BGEM(); else return; SetMaterialFromUI(ref material); if (!material.Save(workFileName)) { MessageBox.Show(string.Format("Failed to save file '{0}'!", workFileName), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } int nameIndex = workFileName.LastIndexOf('\\'); this.Text = workFileName.Substring(nameIndex + 1, workFileName.Length - nameIndex - 1); changed = false; }
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) { saveFileDialog.AddExtension = false; saveFileDialog.DefaultExt = ""; if (!string.IsNullOrEmpty(workFileName)) { int fileIndex = workFileName.LastIndexOf('\\'); if (fileIndex >= 0) { string fileName = workFileName.Substring(fileIndex + 1, workFileName.Length - fileIndex - 1); saveFileDialog.FileName = fileName; } } if (saveFileDialog.ShowDialog() == DialogResult.OK) { string fileName = saveFileDialog.FileName; BaseMaterialFile material; if (fileName.ToLower().EndsWith(".bgsm")) material = new BGSM(); else if (fileName.ToLower().EndsWith(".bgem")) material = new BGEM(); else return; SetMaterialFromUI(ref material); if (!material.Save(fileName)) { MessageBox.Show(string.Format("Failed to save file '{0}'!", fileName), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } workFileName = fileName; saveToolStripMenuItem.Enabled = true; int nameIndex = workFileName.LastIndexOf('\\'); this.Text = workFileName.Substring(nameIndex + 1, workFileName.Length - nameIndex - 1); changed = false; } }
private void OpenMaterial(string fileName, uint signature) { BaseMaterialFile material; if (signature == BGSM.Signature) material = new BGSM(); else if (signature == BGEM.Signature) material = new BGEM(); else return; using (FileStream file = new FileStream(fileName, FileMode.Open)) { char start = Convert.ToChar(file.ReadByte()); file.Position = 0; // Check for JSON if (start == '{' || start == '[') { try { DataContractJsonSerializer ser = new DataContractJsonSerializer(material.GetType()); if (signature == BGSM.Signature) material = (BGSM)ser.ReadObject(file); else if (signature == BGEM.Signature) material = (BGEM)ser.ReadObject(file); } catch (Exception) { } } // Try binary else if (!material.Open(file)) { MessageBox.Show(string.Format("Failed to open file '{0}'!", fileName), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } SetUIFromMaterial(ref material); workFileName = fileName; saveToolStripMenuItem.Enabled = true; saveAsToolStripMenuItem.Enabled = true; closeToolStripMenuItem.Enabled = true; splitContainerGeneral.Enabled = true; splitContainerMaterial.Enabled = true; splitContainerEffect.Enabled = true; int nameIndex = fileName.LastIndexOf('\\'); this.Text = fileName.Substring(nameIndex + 1, fileName.Length - nameIndex - 1); changed = false; } }