Added: action argument inputs now support incremental increase/decrease prefixes (+++ and ---).

Probably fixed probable I/O race condition when loading images.
Fixed Visual mode stuttering due to floating point precision degradation when running the editor for several days without restarting (internal timer is now reset when saving the map or creating a new one).
Fixed, Nodes Viewer, cosmetic: Nodes Viewer window position was reset after pressing the "Rebuild Nodes" button.
Added Eternity Game configurations by printz.
Updated ZDoom_ACS.cfg (CheckClass).
Updated ZDoom ACC (CheckClass).
This commit is contained in:
MaxED 2016-08-29 10:06:16 +00:00 committed by spherallic
parent d1194019db
commit 7435d4bd5b
30 changed files with 7658 additions and 60 deletions

View file

@ -395,6 +395,9 @@ special
-124:EndDBTransaction(0),
-125:GetDBEntries(1),
// -1xx are reserved for Zandronum
-200:CheckClass(1),
// ZDaemon's
-19620:GetTeamScore(1),
-19621:SetTeamScore(2),

View file

@ -0,0 +1,61 @@
/*************************************************************\
Doom Builder 2 Game Configuration for ZDoom-compatible port
\*************************************************************/
// This is required to prevent accidental use of a different configuration
type = "Doom Builder 2 Game Configuration";
// This is the title to show for this game
game = "Eternity: Doom 2 (Doom format)";
// This is the simplified game engine/sourceport name
engine = "eternity";
// *******************************************************
// * *
// * Note: all the elements that could be factorized *
// * because they were common to ZDoom, GZDoom and *
// * Zandronum have been moved to ZDoom_common.cfg. *
// * *
// *******************************************************
// STANDARD DOOM SETTINGS
// Settings common to all games and all map formats
include("Includes\\Doom_common.cfg", "common");
// Settings common to Doom map format
include("Includes\\Eternity_common.cfg", "mapformat_doom");
// Settings common to Doom games
include("Includes\\Game_Doom.cfg");
//mxd. No DECORATE support in Eternity
decorategames = "";
// Default thing filters
// (these are not required, just useful for new users)
thingsfilters
{
include("Includes\\Doom_misc.cfg", "thingsfilters");
}
// THING TYPES
// Each engine has its own additional thing types
// Order should always be 1: Game; 2: ZDoom/game; 3: ZDoom/zdoom
thingtypes
{
// Basic game actors
include("Includes\\Doom_things.cfg");
include("Includes\\Doom2_things.cfg");
include("Includes\\Boom_things.cfg");
include("Includes\\Eternity_things.cfg");
}
// ENUMERATIONS
// Each engine has its own additional thing types
// These are enumerated lists for linedef types and UDMF fields.
enums
{
// Basic game enums
include("Includes\\Doom_misc.cfg", "enums");
}

View file

@ -0,0 +1,57 @@
/*************************************************************\
Doom Builder 2 Game Configuration for Eternity on UDMF
\*************************************************************/
// This is required to prevent accidental use of a different configuration
type = "Doom Builder 2 Game Configuration";
// This is the title to show for this game
game = "Eternity: Doom 2 (UDMF)";
// This is the simplified game engine/sourceport name
engine = "eternity";
// STANDARD ETERNITY SETTINGS
// Settings common to all games and all map formats
include("Includes\\Eternity_common.cfg", "common");
// Settings common to text map format
include("Includes\\Eternity_common.cfg", "mapformat_udmf");
// Settings common to Doom games
include("Includes\\Game_Doom.cfg");
//mxd. No DECORATE support in Eternity
decorategames = "";
// Default thing filters
// (these are not required, just useful for new users)
thingsfilters
{
include("Includes\\ZDoom_misc.cfg", "thingsfilters_udmf");
}
// THING TYPES
// Each engine has its own additional thing types
// Order should always be 1: Game; 2: ZDoom/game; 3: ZDoom/zdoom
thingtypes
{
// Basic game actors
include("Includes\\Doom_things.cfg");
include("Includes\\Doom2_things.cfg");
include("Includes\\Eternity_things.cfg");
}
// ENUMERATIONS
// Each engine has its own additional thing types
// These are enumerated lists for linedef types and UDMF fields.
enums
{
// Basic game enums
include("Includes\\Doom_misc.cfg", "enums");
// Standard ZDoom enums
include("Includes\\ZDoom_misc.cfg", "enums");
// Additional ZDoom enums for that game
include("Includes\\ZDoom_misc.cfg", "enums_doom");
include("Includes\\Eternity_misc.cfg", "enums");
}

View file

@ -0,0 +1,364 @@
// ***********************************************************
// * *
// * These values are mainly for UDMF Eternity *
// * *
// ***********************************************************
common
{
// Some common settings
include("Common.cfg");
// Default testing parameters
include("Test_params.cfg", "vanilla_mapxx"); // Eternity doesn't yet have +map
// Action special help (mxd)
actionspecialhelp = "http://eternity.youfailit.net/wiki/Detailed_parameterized_linedef_specification";
// FIXME: this info is not on the wiki, but in things.edf
// Thing class help (mxd)
thingclasshelp = "https://github.com/team-eternity/eternity/blob/master/base/doom/things.edf";
// Default nodebuilder configurations
defaultsavecompiler = "zdbsp_normal";
defaulttestcompiler = "zdbsp_fast";
// Generalized actions
// generalizedlinedefs is true for Doom format and false for
// the other two, so it's not here.
generalizedsectors = true;
//mxd. Maximum safe map size check (0 means skip check)
safeboundary = 0;
// Texture loading options
mixtexturesflats = true;
defaulttexturescale = 1.0f;
defaultflatscale = 1.0f;
scaledtextureoffsets = true;
//mxd. Sidedefs compression
// ioanch FIXME: what does this do? I made it false
sidedefcompressionignoresaction = false;
// Texture sources
textures
{
include("Doom_misc.cfg", "textures");
include("ZDoom_misc.cfg", "textures"); // works for Eternity too
}
//mxd. HiRes sources
hires
{
include("ZDoom_misc.cfg", "hires");
}
// Patch sources
patches
{
include("Doom_misc.cfg", "patches");
}
// Sprite sources
sprites
{
include("Doom_misc.cfg", "sprites");
}
// Flat sources
flats
{
include("Doom_misc.cfg", "flats");
}
// Colormap sources
colormaps
{
include("Boom_misc.cfg", "colormaps");
}
//mxd. Voxel sources
// Not in Eternity
// voxels
// {
// include("ZDoom_misc.cfg", "voxels");
// }
// Generalized sector types
gen_sectortypes
{
include("ZDoom_generalized.cfg", "gen_sectortypes"); // same as in ZDOOM
}
//mxd. Built-in Damage types
// ioanch: From base/things.edf
damagetypes = "Fist Pistol Shotgun Chaingun Plasma BFG BFG_Splash Chainsaw SShotgun BetaBFG BFGBurst Slime Lava Crush Telefrag Falling Suicide Barrel Splash Quake Rocket R_Splash BFG11k_Splash Grenade Hit PlayerMisc Fire";
}
mapformat_doom
{
mixtexturesflats = true;
// The format interface handles the map data format
formatinterface = "DoomMapSetIO";
maplumpnames
{
include("Doom_misc.cfg", "doommaplumpnames");
include("Boom_misc.cfg", "boommaplumpnames");
}
// When this is set to true, sectors with the same tag will light up when a line is highlighted
linetagindicatesectors = true;
// Special linedefs
include("ZDoom_misc.cfg", "speciallinedefs_doomhexen");
// Default flags for first new thing
defaultthingflags
{
include("Doom_misc.cfg", "defaultthingflags");
}
// Door making
include("ZDoom_misc.cfg", "doormaking_doom");
// Generalized actions
generalizedlinedefs = true;
generalizedsectors = true;
// GENERALIZED LINEDEF TYPES
gen_linedeftypes
{
include("Boom_generalized.cfg", "gen_linedeftypes");
}
// GENERALIZED SECTOR TYPES
gen_sectortypes
{
include("Boom_generalized.cfg", "gen_sectortypes");
include("Eternity_generalized.cfg", "gen_sectortypes");
}
// DEFAULT SECTOR BRIGHTNESS LEVELS
sectorbrightness
{
include("Doom_misc.cfg", "sectorbrightness");
}
// SECTOR TYPES
sectortypes
{
include("Doom_sectors.cfg");
}
// LINEDEF FLAGS
linedefflags
{
include("Doom_misc.cfg", "linedefflags");
include("Boom_misc.cfg", "linedefflags");
include("Eternity_misc.cfg", "linedefflags");
}
// LINEDEF ACTIVATIONS
linedefactivations
{
}
// Linedef flags UDMF translation table
// This is needed for copy/paste and prefabs to work properly
// When the UDMF field name is prefixed with ! it is inverted
linedefflagstranslation
{
include("Doom_misc.cfg", "linedefflagstranslation");
include("Boom_misc.cfg", "linedefflagstranslation");
}
// LINEDEF TYPES
linedeftypes
{
include("Doom_linedefs.cfg");
include("Boom_linedefs.cfg");
include("Eternity_linedefs.cfg", "doom");
}
// THING FLAGS
thingflags
{
include("Doom_misc.cfg", "thingflags");
include("Boom_misc.cfg", "thingflags");
include("Eternity_misc.cfg", "thingflags");
}
// Thing flags UDMF translation table
// This is needed for copy/paste and prefabs to work properly
// When the UDMF field name is prefixed with ! it is inverted
thingflagstranslation
{
include("Doom_misc.cfg", "thingflagstranslation");
include("Boom_misc.cfg", "thingflagstranslation");
}
// How to compare thing flags (for the stuck things error checker)
thingflagscompare
{
include("Boom_misc.cfg", "thingflagscompare");
}
// Things flags masks
include("Doom_misc.cfg", "thingflagsmasks");
}
// ***********************************************************
// * *
// * Text map format *
// * *
// ***********************************************************
mapformat_udmf
{
// The format interface handles the map data format
formatinterface = "UniversalMapSetIO";
//mxd. The default script compiler to use
defaultscriptcompiler = "zdoom_acs.cfg";
// Enables support for long (> 8 chars) texture names
// WARNING: this should only be enabled for UDMF game configurations!
// WARNING: enabling this will make maps incompatible with Doom Builder 2 and can lead to problems in Slade 3!
longtexturenames = true;
// Default nodebuilder configurations
defaultsavecompiler = "zdbsp_udmf_normal";
defaulttestcompiler = "zdbsp_udmf_fast";
// ioanch: eternity
engine = "eternity"; // override that so that DB2 uses the correct namespace
maplumpnames
{
include("UDMF_misc.cfg", "udmfmaplumpnames_begin");
include("ZDoom_misc.cfg", "udmfmaplumpnames");
include("UDMF_misc.cfg", "udmfmaplumpnames_end");
}
// eternity
universalfields
{
include("Eternity_misc.cfg", "universalfields");
}
// When this is set to true, sectors with the same tag will light up when a line is highlighted
linetagindicatesectors = false;
// Special linedefs
include("ZDoom_misc.cfg", "speciallinedefs_udmf"); // same in EE
// Default flags for first new thing
defaultthingflags
{
include("Eternity_misc.cfg", "defaultthingflags_udmf");
}
// Door making
include("Eternity_misc.cfg", "doormaking_udmf");
// Generalized actions
generalizedlinedefs = false;
// SECTOR FLAGS
sectorflags
{
include("Eternity_misc.cfg", "sectorflags_udmf");
}
// DEFAULT SECTOR BRIGHTNESS LEVELS
sectorbrightness
{
include("ZDoom_misc.cfg", "sectorbrightness");
}
// SECTOR TYPES
sectortypes
{
include("Eternity_misc.cfg", "sectors_udmf");
}
// SECTOR RENSERSTYLES
sectorrenderstyles
{
include("UDMF_misc.cfg", "sectorrenderstyles");
}
// LINEDEF FLAGS
linedefflags
{
include("Eternity_misc.cfg", "linedefflags_udmf");
}
// LINEDEF ACTIVATIONS
linedefactivations
{
include("Eternity_misc.cfg", "linedefactivations_udmf");
}
//mxd. Linedef flags UDMF translation table
// This is needed for copy/paste and prefabs to work properly
// When the UDMF field name is prefixed with ! it is inverted
linedefflagstranslation
{
include("Doom_misc.cfg", "linedefflagstranslation");
include("Hexen_misc.cfg", "linedefflagstranslation");
include("ZDoom_misc.cfg", "linedefflagstranslation");
}
// LINEDEF RENSERSTYLES
linedefrenderstyles
{
include("UDMF_misc.cfg", "linedefrenderstyles");
}
//SIDEDEF FLAGS
sidedefflags
{
include("Eternity_misc.cfg", "sidedefflags");
}
// THING FLAGS
thingflags
{
include("Eternity_misc.cfg", "thingflags_udmf");
}
// THING RENSERSTYLES
thingrenderstyles
{
include("UDMF_misc.cfg", "thingrenderstyles");
}
// How to compare thing flags (for the stuck things error checker)
thingflagscompare
{
include("Eternity_misc.cfg", "thingflagscompare_udmf");
}
//mxd. Thing flags UDMF translation table
// This is needed for copy/paste and prefabs to work properly
// When the UDMF field name is prefixed with ! it is inverted
thingflagstranslation
{
include("Doom_misc.cfg", "thingflagstranslation");
include("Hexen_misc.cfg", "thingflagstranslation");
include("ZDoom_misc.cfg", "thingflagstranslation");
}
// Things flags masks
include("Hexen_misc.cfg", "thingflagsmasks");
// LINEDEF TYPES
linedeftypes
{
include("Hexen_linedefs.cfg");
include("Eternity_linedefs.cfg", "udmf");
}
}

View file

@ -0,0 +1,14 @@
gen_sectortypes
{
allsounds
{
0 = "sounds in sector are normal";
1024 = "sounds in sector are suppressed";
}
movementsounds
{
0 = "floor/ceiling normal";
2048 = "floor/ceiling silent";
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,124 @@
monsters
{
888
{
title = "Dog";
sprite = "internal:dog";
class = "MBFHelperDog";
width = 12;
height = 28;
}
}
eternity
{
color = 8; // Grey
arrow = 1;
title = "Eternity Items";
width = 0;
height = 0;
sort = 1;
fixedsize = true;
5003
{
title = "Camera spot";
class = "SMMUCameraSpot";
}
1200
{
title = "Enviro sequence 0";
}
1300
{
title = "Enviro sequence param";
}
1400
{
title = "Sector sequence 0";
}
1500
{
title = "Sector sequence param";
}
5004
{
title = "ExtraData thing";
}
5006
{
title = "Skybox camera";
class = "EESkyboxCam";
}
5007
{
title = "Particle Drip";
class = "EEParticleDrip";
}
9001
{
title = "Map spot";
class = "EEMapSpot";
}
9013
{
title = "Map spot gravity";
class = "EEMapSpotGravity";
}
9027
{
title = "Particle fountain red";
}
9028
{
title = "Particle fountain green";
}
9029
{
title = "Particle fountain blue";
}
9030
{
title = "Particle fountain yellow";
}
9031
{
title = "Particle fountain purple";
}
9032
{
title = "Particle fountain black";
}
9033
{
title = "Particle fountain white";
}
9300t
{
title = "Polyobject anchor";
class = "EEPolyObjAnchor";
}
9301
{
title = "Polyobject spawn spot";
class = "EEPolyObjSpawnSpot";
}
9302
{
title = "Polyobject spawn spot crush";
class = "EEPolyObjSpawnSpotCrush";
}
9303
{
title = "Polyobject spawn spot damage";
class = "EEPolyObjSpawnSpotDamage";
}
14001
{
title = "Ambience 1";
}
14065
{
title = "Ambience param";
}
}

View file

@ -106,6 +106,8 @@ keywords
CheckActorFloorTexture = "bool CheckActorFloorTexture(int tid, str texture)";
CheckActorInventory = "int CheckActorInventory(int tid, str inventory_item)\nChecks the given actor's inventory for the item specified by inventory_item";
CheckActorProperty = "bool CheckActorProperty(int tid, int property, [int|float|str] value)";
CheckActorState = "bool CheckActorState(int tid, str statename[, bool exact = false])";
CheckClass = "bool CheckClass(str classname)";
CheckFlag = "bool CheckFlag(int tid, str flag)\nChecks to see if the actor with the matching tid has the specified actor flag set.\nIf tid is 0, the check is performed on the activator of the script.";
CheckFont = "bool CheckFont(str fontname)";
CheckInventory = "int CheckInventory(str inventory_item)\nChecks the inventory of the actor who activated the script for the item specified by inventory_item";

View file

@ -266,36 +266,54 @@ namespace CodeImp.DoomBuilder.Controls
// This checks if the number is relative
public bool CheckIsRelative()
{
// Prefixed with ++ or --?
return (combobox.Text.Trim().StartsWith("++") || combobox.Text.Trim().StartsWith("--"));
// Prefixed with +++, ---, ++ or --?
string str = combobox.Text.Trim();
return (str.StartsWith("+++") || str.StartsWith("---") || str.StartsWith("++") || str.StartsWith("--"));
}
// This returns the selected value
public int GetResult(int original)
public int GetResult(int original) { return GetResult(original, 0); } //mxd
public int GetResult(int original, int offset)
{
int result;
// Strip prefixes
string str = combobox.Text.Trim().ToLowerInvariant();
str = str.TrimStart('+', '-');
string numstr = str.TrimStart('+', '-'); //mxd
// Anything in the box?
if(combobox.Text.Trim().Length > 0)
if(numstr.Length > 0)
{
//mxd. Prefixed with +++?
if(str.StartsWith("+++"))
{
// Add offset to number
int num;
if(!int.TryParse(numstr, out num)) num = 0;
result = num + offset;
}
//mxd. Prefixed with ---?
else if(str.StartsWith("---"))
{
// Subtract offset from number
int num;
if(!int.TryParse(numstr, out num)) num = 0;
result = num - offset;
}
// Prefixed with ++?
if(combobox.Text.Trim().StartsWith("++"))
else if(str.StartsWith("++"))
{
// Add number to original
int num;
if(!int.TryParse(str, out num)) num = 0;
if(!int.TryParse(numstr, out num)) num = 0;
result = original + num;
}
// Prefixed with --?
else if(combobox.Text.Trim().StartsWith("--"))
else if(str.StartsWith("--"))
{
// Subtract number from original
int num;
if(!int.TryParse(str, out num)) num = 0;
if(!int.TryParse(numstr, out num)) num = 0;
result = original - num;
}
else

View file

@ -133,7 +133,7 @@ namespace CodeImp.DoomBuilder.Controls
#region ================== Apply
public void Apply(Linedef l)
public void Apply(Linedef l, int offset)
{
//mxd. Script name/number handling
// We can't rely on control visibility here, because all controlls will be invisible if ArgumentsControl is invisible
@ -161,7 +161,7 @@ namespace CodeImp.DoomBuilder.Controls
// Apply classic arg
case ArgZeroMode.DEFAULT:
l.Args[0] = arg0.GetResult(l.Args[0]);
l.Args[0] = arg0.GetResult(l.Args[0], offset);
if(l.Fields.ContainsKey("arg0str")) l.Fields.Remove("arg0str");
break;
@ -169,13 +169,13 @@ namespace CodeImp.DoomBuilder.Controls
}
// Apply the rest of args
l.Args[1] = arg1.GetResult(l.Args[1]);
l.Args[2] = arg2.GetResult(l.Args[2]);
l.Args[3] = arg3.GetResult(l.Args[3]);
l.Args[4] = arg4.GetResult(l.Args[4]);
l.Args[1] = arg1.GetResult(l.Args[1], offset);
l.Args[2] = arg2.GetResult(l.Args[2], offset);
l.Args[3] = arg3.GetResult(l.Args[3], offset);
l.Args[4] = arg4.GetResult(l.Args[4], offset);
}
public void Apply(Thing t)
public void Apply(Thing t, int offset)
{
//mxd. Script name/number handling
// We can't rely on control visibility here, because all controlls will be invisible if ArgumentsControl is invisible
@ -203,7 +203,7 @@ namespace CodeImp.DoomBuilder.Controls
// Apply classic arg
case ArgZeroMode.DEFAULT:
t.Args[0] = arg0.GetResult(t.Args[0]);
t.Args[0] = arg0.GetResult(t.Args[0], offset);
if(t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str");
break;
@ -211,10 +211,10 @@ namespace CodeImp.DoomBuilder.Controls
}
// Apply the rest of args
t.Args[1] = arg1.GetResult(t.Args[1]);
t.Args[2] = arg2.GetResult(t.Args[2]);
t.Args[3] = arg3.GetResult(t.Args[3]);
t.Args[4] = arg4.GetResult(t.Args[4]);
t.Args[1] = arg1.GetResult(t.Args[1], offset);
t.Args[2] = arg2.GetResult(t.Args[2], offset);
t.Args[3] = arg3.GetResult(t.Args[3], offset);
t.Args[4] = arg4.GetResult(t.Args[4], offset);
}
#endregion

View file

@ -57,9 +57,14 @@ namespace CodeImp.DoomBuilder.Data
if(lumpdata != null)
{
// Copy lump data to memory
lumpdata.Seek(0, SeekOrigin.Begin);
byte[] membytes = new byte[(int)lumpdata.Length];
lumpdata.Read(membytes, 0, (int)lumpdata.Length);
lock(lumpdata) //mxd
{
lumpdata.Seek(0, SeekOrigin.Begin);
lumpdata.Read(membytes, 0, (int)lumpdata.Length);
}
MemoryStream mem = new MemoryStream(membytes);
mem.Seek(0, SeekOrigin.Begin);

View file

@ -151,9 +151,14 @@ namespace CodeImp.DoomBuilder.Data
if(patchdata != null)
{
// Copy patch data to memory
patchdata.Seek(0, SeekOrigin.Begin);
byte[] membytes = new byte[(int)patchdata.Length];
patchdata.Read(membytes, 0, (int)patchdata.Length);
lock(patchdata) //mxd
{
patchdata.Seek(0, SeekOrigin.Begin);
patchdata.Read(membytes, 0, (int)patchdata.Length);
}
MemoryStream mem = new MemoryStream(membytes);
mem.Seek(0, SeekOrigin.Begin);

View file

@ -70,9 +70,14 @@ namespace CodeImp.DoomBuilder.Data
if(patchdata != null)
{
// Copy patch data to memory
patchdata.Seek(0, SeekOrigin.Begin);
byte[] membytes = new byte[(int)patchdata.Length];
patchdata.Read(membytes, 0, (int)patchdata.Length);
lock(patchdata) //mxd
{
patchdata.Seek(0, SeekOrigin.Begin);
patchdata.Read(membytes, 0, (int)patchdata.Length);
}
MemoryStream mem = new MemoryStream(membytes);
mem.Seek(0, SeekOrigin.Begin);

View file

@ -84,9 +84,14 @@ namespace CodeImp.DoomBuilder.Data
if(lumpdata != null)
{
// Copy lump data to memory
lumpdata.Seek(0, SeekOrigin.Begin);
byte[] membytes = new byte[(int)lumpdata.Length];
lumpdata.Read(membytes, 0, (int)lumpdata.Length);
lock(lumpdata) //mxd
{
lumpdata.Seek(0, SeekOrigin.Begin);
lumpdata.Read(membytes, 0, (int)lumpdata.Length);
}
MemoryStream mem = new MemoryStream(membytes);
mem.Seek(0, SeekOrigin.Begin);

View file

@ -106,9 +106,14 @@ namespace CodeImp.DoomBuilder.Data
if(patchdata != null)
{
// Copy patch data to memory
patchdata.Seek(0, SeekOrigin.Begin);
byte[] membytes = new byte[(int)patchdata.Length];
patchdata.Read(membytes, 0, (int)patchdata.Length);
lock(patchdata) //mxd
{
patchdata.Seek(0, SeekOrigin.Begin);
patchdata.Read(membytes, 0, (int)patchdata.Length);
}
MemoryStream mem = new MemoryStream(membytes);
mem.Seek(0, SeekOrigin.Begin);

View file

@ -246,6 +246,7 @@ namespace CodeImp.DoomBuilder.Editing
// Processing events
public virtual void OnProcess(long deltatime) { }
public virtual void OnClockReset() { } //mxd
// Generic events
public virtual void OnReloadResources() { }

View file

@ -22,5 +22,12 @@ namespace CodeImp.DoomBuilder
{
// This queries the system for the current time
public static long CurrentTime { get { return Configuration.Timer.ElapsedMilliseconds; } }
//mxd. Timer needs to be reset from time to time (like, every 2 days of continuously running the editor) to prevent float precision degradation.
internal static void Reset()
{
Configuration.Timer.Reset();
Configuration.Timer.Start();
}
}
}

View file

@ -1062,6 +1062,9 @@ namespace CodeImp.DoomBuilder
// Ask the user to save changes (if any)
if(AskSaveMap())
{
//mxd. Reset the clock...
MainWindow.ResetClock();
// Open map options dialog
MapOptionsForm optionswindow = new MapOptionsForm(newoptions, true);
if(optionswindow.ShowDialog(mainwindow) == DialogResult.OK)
@ -1457,6 +1460,9 @@ namespace CodeImp.DoomBuilder
Cursor.Current = Cursors.Default;
}
//mxd. Also reset the clock...
MainWindow.ResetClock();
return result;
}
@ -1541,6 +1547,10 @@ namespace CodeImp.DoomBuilder
}
savefile.Dispose();
//mxd. Also reset the clock...
MainWindow.ResetClock();
return result;
}
@ -1606,6 +1616,10 @@ namespace CodeImp.DoomBuilder
}
savefile.Dispose();
//mxd. Also reset the clock...
MainWindow.ResetClock();
return result;
}

View file

@ -336,8 +336,7 @@ namespace CodeImp.DoomBuilder.Rendering
// Highlight
if(General.Settings.AnimateVisualSelection)
{
long time = Clock.CurrentTime;
highlightglow = (float)Math.Sin(time / 100.0f) * 0.1f + 0.4f;
highlightglow = (float)Math.Sin(Clock.CurrentTime / 100.0f) * 0.1f + 0.4f;
highlightglowinv = -highlightglow + 0.8f;
}
else

View file

@ -652,7 +652,6 @@ namespace CodeImp.DoomBuilder.VisualModes
return;
}
long time = Clock.CurrentTime;
float rMin = Math.Min(lightPrimaryRadius, lightSecondaryRadius);
float rMax = Math.Max(lightPrimaryRadius, lightSecondaryRadius);
float diff = rMax - rMin;
@ -660,12 +659,12 @@ namespace CodeImp.DoomBuilder.VisualModes
switch(lightType)
{
case DynamicLightType.PULSE:
lightDelta = ((float)Math.Sin(time / (interval * 4.0f)) + 1.0f) / 2.0f; //just playing by the eye here... in [0.0 ... 1.0] interval
lightDelta = ((float)Math.Sin(Clock.CurrentTime / (interval * 4.0f)) + 1.0f) / 2.0f; //just playing by the eye here... in [0.0 ... 1.0] interval
lightRadius = rMin + diff * lightDelta;
break;
case DynamicLightType.FLICKER:
float fdelta = (float)Math.Sin(time / 0.1f); //just playing by the eye here...
case DynamicLightType.FLICKER:
float fdelta = (float)Math.Sin(Clock.CurrentTime / 0.1f); //just playing by the eye here...
if(Math.Sign(fdelta) != Math.Sign(lightDelta))
{
lightDelta = fdelta;
@ -674,7 +673,7 @@ namespace CodeImp.DoomBuilder.VisualModes
break;
case DynamicLightType.RANDOM:
float rdelta = (float)Math.Sin(time / (interval * 9.0f)); //just playing by the eye here...
float rdelta = (float)Math.Sin(Clock.CurrentTime / (interval * 9.0f)); //just playing by the eye here...
if(Math.Sign(rdelta) != Math.Sign(lightDelta))
{
lightRadius = rMin + (General.Random(0, (int) (diff * 10))) / 10.0f;

View file

@ -418,7 +418,7 @@ namespace CodeImp.DoomBuilder.Windows
}
// Go for all the lines
int tagoffset = 0; //mxd
int offset = 0; //mxd
foreach(Linedef l in lines)
{
// Apply chosen activation flag
@ -426,12 +426,11 @@ namespace CodeImp.DoomBuilder.Windows
l.Activate = (activation.SelectedItem as LinedefActivateInfo).Index;
// Action/tags
oldtag = l.Tag;
l.Tag = General.Clamp(tagSelector.GetSmartTag(l.Tag, tagoffset++), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
l.Tag = General.Clamp(tagSelector.GetSmartTag(l.Tag, offset), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
if(!action.Empty) l.Action = action.Value;
//mxd. Apply args
argscontrol.Apply(l);
argscontrol.Apply(l, offset);
// Remove front side?
if((l.Front != null) && (frontside.CheckState == CheckState.Unchecked))
@ -505,6 +504,9 @@ namespace CodeImp.DoomBuilder.Windows
l.Front.Sector.UpdateFloorSurface();
l.Front.Sector.UpdateCeilingSurface();
}
//mxd. Increase offset...
offset++;
}
// Update the used textures

View file

@ -671,7 +671,7 @@ namespace CodeImp.DoomBuilder.Windows
}
// Go for all the lines
int tagoffset = 0; //mxd
int offset = 0; //mxd
foreach(Linedef l in lines)
{
// UDMF activations
@ -685,12 +685,11 @@ namespace CodeImp.DoomBuilder.Windows
}
}
// Action/tags
// Action
if(!action.Empty) l.Action = action.Value;
tagsselector.ApplyTo(l, tagoffset++); //mxd
//mxd. Apply args
argscontrol.Apply(l);
argscontrol.Apply(l, offset++);
// Remove front side?
if((l.Front != null) && (frontside.CheckState == CheckState.Unchecked))

View file

@ -4171,6 +4171,17 @@ namespace CodeImp.DoomBuilder.Windows
processingcount = 0;
processor.Enabled = false;
}
//mxd
internal void ResetClock()
{
Clock.Reset();
lastupdatetime = 0;
// Let the mode know...
if(General.Editing.Mode != null)
General.Editing.Mode.OnClockReset();
}
// Processor event
private void processor_Tick(object sender, EventArgs e)

View file

@ -410,7 +410,7 @@ namespace CodeImp.DoomBuilder.Windows
}
// Go for all the things
int tagoffset = 0; //mxd
int offset = 0; //mxd
foreach(Thing t in things)
{
// Coordination
@ -437,14 +437,17 @@ namespace CodeImp.DoomBuilder.Windows
}
// Action/tags
t.Tag = General.Clamp(tagSelector.GetSmartTag(t.Tag, tagoffset++), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
t.Tag = General.Clamp(tagSelector.GetSmartTag(t.Tag, offset), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
if(!action.Empty) t.Action = action.Value;
//mxd. Apply args
argscontrol.Apply(t);
argscontrol.Apply(t, offset);
// Update settings
t.UpdateConfiguration();
//mxd. Increase offset...
offset++;
}
// Set as defaults

View file

@ -459,7 +459,7 @@ namespace CodeImp.DoomBuilder.Windows
}
// Go for all the things
int tagoffset = 0; //mxd
int offset = 0; //mxd
foreach(Thing t in things)
{
// Coordination
@ -479,11 +479,11 @@ namespace CodeImp.DoomBuilder.Windows
if(t.Position.x != px || t.Position.y != py) t.Move(new Vector2D(px, py));
// Action/tags
t.Tag = General.Clamp(tagSelector.GetSmartTag(t.Tag, tagoffset++), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
t.Tag = General.Clamp(tagSelector.GetSmartTag(t.Tag, offset), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
if(!action.Empty) t.Action = action.Value;
//mxd. Apply args
argscontrol.Apply(t);
argscontrol.Apply(t, offset);
//mxd. Custom fields
fieldslist.Apply(t.Fields);
@ -510,6 +510,9 @@ namespace CodeImp.DoomBuilder.Windows
// Update settings
t.UpdateConfiguration();
//mxd. Increase offset...
offset++;
}
// Set as defaults

View file

@ -507,8 +507,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(flashpolygon != null)
{
// Determine the intensity of the flash by time elapsed
long curtime = Clock.CurrentTime;
flashintensity = 1f - ((curtime - flashstarttime) / FLASH_DURATION);
flashintensity = 1f - ((Clock.CurrentTime - flashstarttime) / FLASH_DURATION);
if(flashintensity > 0.0f)
{
// Update vertices in polygon

View file

@ -1463,7 +1463,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
MouseEventArgs args = new MouseEventArgs(General.Interface.MouseButtons, 0, 0, 0, 0);
OnMouseMove(args);
}
//mxd
public override void OnClockReset()
{
base.OnClockReset();
lastpicktime = 0;
}
// This draws a frame
public override void OnRedrawDisplay()
{

View file

@ -168,6 +168,7 @@ namespace CodeImp.DoomBuilder.Plugins.NodesViewer
NodesViewerMode newmode = new NodesViewerMode();
General.Editing.ChangeMode(newmode);
newmode.Form.showsegsvertices.Checked = this.showsegsvertices.Checked;
newmode.Form.Location = this.Location; //mxd
}
#endregion

View file

@ -59,7 +59,7 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
private Dictionary<Point, Tile> tiles = new Dictionary<Point, Tile>();
// Time when to do another update
private DateTime nextupdate;
private long nextupdate;
// Are we processing?
private bool processingenabled;
@ -323,7 +323,7 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
renderer.SetPresentation(p);
// Setup processing
nextupdate = DateTime.Now + new TimeSpan(0, 0, 0, 0, 100);
nextupdate = Clock.CurrentTime + 100;
General.Interface.EnableProcessing();
processingenabled = true;
@ -358,7 +358,7 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
RedrawAllTiles();
// Update the screen sooner
nextupdate = DateTime.Now + new TimeSpan(0, 0, 0, 0, 100);
nextupdate = Clock.CurrentTime + 100;
}
// Draw the display
@ -383,7 +383,7 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
public override void OnProcess(long deltatime)
{
base.OnProcess(deltatime);
if(DateTime.Now >= nextupdate)
if(Clock.CurrentTime >= nextupdate)
{
// Get the processed points from the VPO manager
List<PointData> points = new List<PointData>();
@ -405,7 +405,7 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
RedrawAllTiles();
General.Interface.RedrawDisplay();
nextupdate = DateTime.Now + new TimeSpan(0, 0, 0, 0, 500);
nextupdate = Clock.CurrentTime + 500;
}
else
{