mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-02-17 17:41:09 +00:00
Added "Dynamic light size" slider, which matches GZDoom's "Light size" option. Added "Dynamic light intensity" slider, which matches GZDoom's "Light intensity" option. Fixed Vavoom light rendering (was rendered as additive light, light radius was twise smaller than in GZDoom) Fixed bug in light rendering introduced in v1.03 (light radius was set to -1 when switching from 2D to 3D mode).
226 lines
8.7 KiB
C#
226 lines
8.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
using CodeImp.DoomBuilder.Map;
|
|
using CodeImp.DoomBuilder.ZDoom;
|
|
using CodeImp.DoomBuilder.Actions;
|
|
using CodeImp.DoomBuilder.Windows;
|
|
using CodeImp.DoomBuilder.Config;
|
|
|
|
using CodeImp.DoomBuilder.GZBuilder.IO;
|
|
using CodeImp.DoomBuilder.GZBuilder.Data;
|
|
using CodeImp.DoomBuilder.GZBuilder.Windows;
|
|
|
|
using ColladaDotNet.Pipeline.MD3;
|
|
|
|
namespace CodeImp.DoomBuilder.GZBuilder
|
|
{
|
|
//mxd. should get rid of this class one day...
|
|
public class GZGeneral
|
|
{
|
|
private static Dictionary<int, ModelDefEntry> modelDefEntries; //doomEdNum, entry
|
|
public static Dictionary<int, ModelDefEntry> ModelDefEntries { get { return modelDefEntries; } }
|
|
|
|
//gzdoom light types
|
|
private static int[] gz_lights = { /* normal lights */ 9800, 9801, 9802, 9803, 9804, /* additive lights */ 9810, 9811, 9812, 9813, 9814, /* negative lights */ 9820, 9821, 9822, 9823, 9824, /* vavoom lights */ 1502, 1503};
|
|
public static int[] GZ_LIGHTS { get { return gz_lights; } }
|
|
private static int[] gz_lightTypes = { 5, 10, 15 };
|
|
public static int[] GZ_LIGHT_TYPES { get { return gz_lightTypes; } }
|
|
|
|
//version
|
|
public const string Version = "1.04";
|
|
|
|
//debug form
|
|
#if DEBUG
|
|
private static DebugForm form;
|
|
#endif
|
|
|
|
|
|
public static void Init() {
|
|
//bind actions
|
|
General.Actions.BindMethods(typeof(GZGeneral));
|
|
General.MainWindow.UpdateGZDoomPannel();
|
|
|
|
//create debug form
|
|
#if DEBUG
|
|
form = new DebugForm();
|
|
form.Show();
|
|
form.Location = new Point(General.MainWindow.Location.X + General.MainWindow.Width, General.MainWindow.Location.Y);
|
|
form.Height = General.MainWindow.Height;
|
|
#endif
|
|
}
|
|
|
|
public static void OnMapOpenEnd() {
|
|
loadModelDefs();
|
|
loadModels();
|
|
}
|
|
|
|
public static void OnReloadResources() {
|
|
loadModelDefs();
|
|
loadModels();
|
|
}
|
|
|
|
//!!!!!!!!!!! General.Map.FormatInterface.HasCustomFields == UMDF!!!!!!!!
|
|
|
|
public static bool LoadModelForThing(Thing t) {
|
|
if (modelDefEntries.ContainsKey(t.Type)) {
|
|
General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: got model override for thing id " + t.Type);
|
|
|
|
if (modelDefEntries[t.Type].Model == null) {
|
|
//load model and texture
|
|
ModelDefEntry mde = modelDefEntries[t.Type];
|
|
mde.Model = ModelReader.Parse(mde, General.Map.Graphics.Device);
|
|
|
|
if (mde.Model != null) {
|
|
General.Map.IsChanged = true; //update display
|
|
General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: loaded model for thing id " + t.Type);
|
|
return true;
|
|
} else {
|
|
General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: failed to load model(s) for thing id " + t.Type + ". Node removed.");
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//functions
|
|
private static void loadModelDefs() {
|
|
Dictionary<string, int> Actors = new Dictionary<string,int>();
|
|
Dictionary<int, ThingTypeInfo> things = General.Map.Config.GetThingTypes();
|
|
|
|
//read our new shiny ClassNames for default game things
|
|
foreach (KeyValuePair<int, ThingTypeInfo> ti in things) {
|
|
if (ti.Value.ClassName != null)
|
|
Actors.Add(ti.Value.ClassName, ti.Key);
|
|
}
|
|
|
|
//and for actors defined in DECORATE
|
|
ICollection<ActorStructure> ac = General.Map.Data.Decorate.Actors;
|
|
foreach (ActorStructure actor in General.Map.Data.Decorate.Actors)
|
|
Actors.Add(actor.ClassName.ToLower(), actor.DoomEdNum);
|
|
|
|
Dictionary<string, ModelDefEntry> modelDefEntriesByName = new Dictionary<string, ModelDefEntry>();
|
|
|
|
foreach (string folder in General.Map.Data.Folders)
|
|
ModelDefParser.ParseFolder(modelDefEntriesByName, folder);
|
|
|
|
modelDefEntries = new Dictionary<int, ModelDefEntry>();
|
|
|
|
foreach (KeyValuePair<string, ModelDefEntry> e in modelDefEntriesByName) {
|
|
if (Actors.ContainsKey(e.Value.Name)) {
|
|
modelDefEntries[Actors[e.Value.Name]] = modelDefEntriesByName[e.Value.Name];
|
|
} else {
|
|
General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: ModelDefEntry wasn't found in Decorate: '" + e.Value.Name + "'");
|
|
}
|
|
}
|
|
}
|
|
|
|
//load models for things which are already in the map
|
|
private static void loadModels() {
|
|
General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: loading models...");
|
|
|
|
foreach(Thing t in General.Map.Map.Things)
|
|
LoadModelForThing(t);
|
|
}
|
|
|
|
//debug
|
|
public static void Trace(string message) {
|
|
#if DEBUG
|
|
form.TextPannel.AppendText(message);
|
|
#endif
|
|
}
|
|
public static void TraceLine(string message) {
|
|
#if DEBUG
|
|
form.TextPannel.AppendText(message + Environment.NewLine);
|
|
#endif
|
|
}
|
|
public static void ClearTrace() {
|
|
#if DEBUG
|
|
form.TextPannel.Text = "";
|
|
#endif
|
|
}
|
|
|
|
public static void TraceInHeader(string message) {
|
|
#if DEBUG
|
|
form.Text = message;
|
|
#endif
|
|
}
|
|
|
|
//actions
|
|
[BeginAction("gztogglemodels")]
|
|
private static void toggleModels() {
|
|
ToggleModels();
|
|
General.MainWindow.UpdateGZDoomPannel();
|
|
}
|
|
|
|
public static void ToggleModels() {
|
|
General.Settings.GZDrawModels = !General.Settings.GZDrawModels;
|
|
General.MainWindow.DisplayStatus(StatusType.Action, "MD3 models rendering is " + (General.Settings.GZDrawModels ? "ENABLED" : "DISABLED"));
|
|
General.MainWindow.RedrawDisplay();
|
|
}
|
|
|
|
[BeginAction("gztogglelights")]
|
|
private static void toggleLights() {
|
|
ToggleLights();
|
|
General.MainWindow.UpdateGZDoomPannel();
|
|
}
|
|
|
|
public static void ToggleLights() {
|
|
General.Settings.GZDrawLights = !General.Settings.GZDrawLights;
|
|
General.MainWindow.DisplayStatus(StatusType.Action, "Dynamic lights rendering is " + (General.Settings.GZDrawLights ? "ENABLED" : "DISABLED"));
|
|
General.MainWindow.RedrawDisplay();
|
|
}
|
|
|
|
[BeginAction("gztogglelightsanimation")]
|
|
private static void toggleLightsAnimation() {
|
|
ToggleLightsAnimation();
|
|
General.MainWindow.UpdateGZDoomPannel();
|
|
}
|
|
public static void ToggleLightsAnimation() {
|
|
General.Settings.GZAnimateLights = !General.Settings.GZAnimateLights;
|
|
General.MainWindow.DisplayStatus(StatusType.Action, "Dynamic lights animation is " + (General.Settings.GZAnimateLights ? "ENABLED" : "DISABLED"));
|
|
General.MainWindow.RedrawDisplay();
|
|
}
|
|
|
|
[BeginAction("gztogglefog")]
|
|
private static void toggleFog() {
|
|
ToggleFog();
|
|
General.MainWindow.UpdateGZDoomPannel();
|
|
}
|
|
|
|
public static void ToggleFog() {
|
|
General.Settings.GZDrawFog = !General.Settings.GZDrawFog;
|
|
General.MainWindow.DisplayStatus(StatusType.Action, "Colored fog rendering is " + (General.Settings.GZDrawFog ? "ENABLED" : "DISABLED"));
|
|
General.MainWindow.RedrawDisplay();
|
|
General.ShowWarningMessage("Not implemented yet...", MessageBoxButtons.OK);
|
|
}
|
|
|
|
|
|
[BeginAction("gzdrawselectedmodelsonly")]
|
|
private static void toggleDrawSelectedModelsOnly() {
|
|
ToggleDrawSelectedModelsOnly();
|
|
General.MainWindow.UpdateGZDoomPannel();
|
|
}
|
|
|
|
public static void ToggleDrawSelectedModelsOnly() {
|
|
General.Settings.GZDrawSelectedModelsOnly = !General.Settings.GZDrawSelectedModelsOnly;
|
|
General.MainWindow.DisplayStatus(StatusType.Action, "Rendering " + (General.Settings.GZDrawSelectedModelsOnly ? "only selected" : "all") + " models.");
|
|
General.MainWindow.RedrawDisplay();
|
|
}
|
|
|
|
[BeginAction("gztogglelightpannel")]
|
|
public static void ToggleLightPannel() {
|
|
General.ShowWarningMessage("Not implemented yet...", MessageBoxButtons.OK);
|
|
}
|
|
|
|
[BeginAction("gztogglefogpannel")]
|
|
public static void ToggleFogPannel() {
|
|
General.ShowWarningMessage("Not implemented yet...", MessageBoxButtons.OK);
|
|
}
|
|
|
|
|
|
}
|
|
}
|