44 Commits

Author SHA1 Message Date
Tamás Bálint Misius
7e9d9686dd
Change gravity timing and add support for saving it
Timing is now such that the input to the gravity process (the point masses and the mask derived from gravity walls) is passed in BeforeSim and the output of the gravity process (the 2D force field) is taken also in BeforeSim, at the same time. This means that input generated by particles in frame n is passed to the gravity process at the beginning of frame n+1, the corresponding output is available by the beginning of frame n+2, and so it is visible to particles in frame n+2. Thus, gravity is now properly and predictably one frame late, though, sadly, it's displayed two frames late.

This is in contrast with the case of not being late at all, which would be the case if input generated in frame n produced visible output by frame n+1, and also in contrast with what we've had until now, which was that gravity was *at least* one frame late, but it could be more out of sync than that if the gravity process for some reason took more time to produce output.

Further, both input and output now make it into snapshots and saves, which fixes one half of what causes the phenomenon wherein beams of PHOT under the effect of gravity wiggle for a few frames before stabilizing after a save is loaded. The other half is that velocities are saved at very a low precision, so overall, the effect of this change on this phenomenon is negligible.

It is not crucial that a client understands this new piece of info, as clients have been fine not getting gravity data from saves for years. Thus, its presence does not restrict the save to client versions newer than the one that adds this feature.

An interesting question this brings up is whether settings, crucially, the enabled state of Newtonian gravity, should be considered simulation state and be also included in saves.

Gravity data is now also included in the output of sim.hash, so Newtonian gravity no longer has to be disabled in order to ensure local determinism.

The diff is large because I gave up on being non-invasive and renamed important structures that lots of elements use. gravp, which was functionally just hypot(gravx, gravy), was removed, because it was only ever used to display a single value in the HUD. I've also taken a few detours and made changes that really should have been in separate commits, see below, but oh well.

This commit also includes a complete rework of the gravity wall area of effect discovery algorithm. The old implementation was extremely broken even beyond the usual C99-isms.

Also fix Simulation.NewtonianGravity being read as an integer from powder.pref, even though it's a boolean and is in fact saved as a boolean. It's pure luck that it's worked fine until now.

Also introduce PlaneBase for use with PlaneAdapter. PlaneBase is a very budget version of std::span from C++20, so budget in fact that it doesn't even store span size; this is fine because PlaneAdapter knows the span size anyway. std::basic_string_view worked for char types but this new code deals with floats.

Also include blockAir data in saves unconditionally. It used to be included only if ensureDeterminism was enabled, like rngState and frameCount, but those last two are conditionally included only because some assumptions are broken if they are included, such as that of expecting a saved simulation to take different paths of evolution after each reload. blockAir has no such effect.

Also remove sim.resetGravityField aka tpt.reset_gravity_field because it was agreed that it's really weird that the output of the gravity process can be changed at all from Lua, not to mention that it can only be reset to zero. No scripts to my knowledge ever used these functions.
2024-07-03 20:51:05 +02:00
Tamás Bálint Misius
588fe293ec
Add panning to ScrollPanel when TouchUI is enabled 2024-02-06 14:28:59 +01:00
Tamás Bálint Misius
c73fa1bcdd
Prevent almost all HTTP requests from blocking
The ones that remain blocking are the ones that run on different threads; see Task, yet another big mess to clean up.
2023-06-10 19:19:53 +02:00
Tamás Bálint Misius
1a69bbfb51
Add hflip and rotation parameters to sim.loadStamp 2023-06-02 06:44:23 +02:00
Tamás Bálint Misius
9bd8bd2274
Fix some deprecation warnings
Namely:

 - [[deprecated("Use Mat2")]]
 - [[deprecated("Use Vec2")]]
 - [[deprecated("Use Mat2::operator*(Vec2)")]]
 - [[deprecated("Use Vec2<float>::operator*(float)")]]
 - [[deprecated("Use Vec2::operator+")]]
 - [[deprecated("Use Vec2::operator-")]]
 - [[deprecated("Use Vec2::Zero")]]
 - [[deprecated("Use Mat2::Identity")]]
2023-05-12 18:53:48 +02:00
mniip
a0a9ad0abd Add new Vec2, Mat2, RGB, RGBA classes and deprecate some old functions 2023-04-05 02:29:35 +02:00
Tamás Bálint Misius
1c92280097
Clean up Misc.cpp somewhat
Also make a feeble attempt at rooting out standard C I/O library function usage. Lua still uses it though >_>
2023-02-05 15:59:31 +01:00
Tamás Bálint Misius
4f0c365e05
Preprocessor purge round 19: Split and minimize usage of Config.h
Also mostly banish it from other headers, and shuffle standard header includes to minimize cross-contamination between headers.
2023-01-27 09:27:32 +01:00
Tamás Bálint Misius
e4c2ec5a00
Preprocessor purge round 2: #pragma once 2023-01-27 09:26:38 +01:00
Tamás Bálint Misius
36d034dc2e
Fix 8-bit-uncleanliness of most of the Lua API
This fixes bugs like "type\0hello mom" being a property name sim.partProperty accepts and half-fixes bugs like text formatting codes making gfx.drawText exit prematurely.
2022-08-22 19:42:51 +02:00
jacob1
b0e29c8c23
Fix crash when doing sim.ambientAirTemp(0/0) 2021-06-17 23:21:29 -04:00
Tamás Bálint Misius
4b7e85c2fb
Fix a metric ton of MSVC warnings 2021-02-15 21:24:44 +01:00
Tamás Bálint Misius
360297c338
Mesonification 2020-12-14 20:16:52 +01:00
Tamás Bálint Misius
59afaec70f
Fix Element::Identifier assignment leak (closes #205)
I didn't use 'fixes' because this doesn't strictly fix that specific
bug (I think?). Anyway, it does remove strdup which is mentioned in the
issue.

Also fix elem.free not allowing DEFAULTFOO_PT_STUFF and similar to
be freed.
2019-04-12 00:27:27 +02:00
mniip
ff27d69424 Switch from std::string to String/ByteString in most of the code
Also switch SimulationData from weird arrays to std::vector
2018-04-30 21:13:24 +03:00
jacob1
f76d10df4d remove unused cpu check 2018-03-18 10:25:52 -04:00
wolfy1339
b65e94900e Use C++ includes (#308)
Replaces stdio.h, stdlib.h, string.h, math.h, time.h, limits.h and othters with their C++ equivalents.
2016-07-17 23:37:24 -04:00
jacob1
a8427ef33a only use -Wno-unused-result on Linux, also actually fix the unused results that we could possibly care about
Fixes cross compilers, TODO: I don't think scons can check if a flag exists but might support adding a test for that, even if through hacky means, like CheckFramework
2016-04-26 23:55:14 -04:00
jacob1
9048a3c50e new lua API: platform
you can get current OS / build information, exe name, restart tpt, open a link in the web browser, and use clipboard copy/paste functions

Also remove some older Platform.h file which wasn't really needed or used
2015-08-31 23:33:40 -04:00
jacob1
e990eead10 add CleanText function from my mod, used when copying / pasting / loading signs 2015-07-10 00:05:58 -04:00
jacob1
d67cb4b582 add new s: sign which does a save search
also change some searchController stuff to properly queue searches when one is already going on
2015-06-27 19:03:41 -04:00
jacksonmj
d08621a0f6 Remove unused register_extension()
(Client::DoInstallation is used instead)
2015-06-17 20:36:33 +01:00
jacob1
6463d04f6c fix a few of the most spammy warnings (there are still hundreds of warnings though)
TODO: actually fix all the warnings
2014-10-23 00:42:13 -04:00
mniip
a105ed9df8 Use system clock instead of used CPU time. Fixes key repeat and some
other stuff. close #206
2014-02-13 00:26:34 +04:00
jacob1
138cb4d757 exception bluescreens print what the exception was, some (probably unnecessary) fixes to fusion that were never merged in, and probably a compiling fix 2013-12-03 22:05:35 -05:00
mniip
41e058e3b2 Fix a few cpu time leaks in request broker and HTTP, also add a global sleep function
(and why did HTTP.c have it's own copy of mystrdup anyway)
2013-10-30 21:39:30 +04:00
mniip
9183fa1755 apparently Ximon hates const; a lot;
added a bunch of const everywhere, had to modify a few functions to be const-compliant
2013-10-30 04:38:13 +04:00
Simon Robertshaw
8f4296ac39 Spark sign tool, {b|sometext}, when the sign is clicked, the a spark will be created at the signs position. Also MouseDown events that draw particles from being triggered when clicking on a sign 2013-10-19 18:59:49 +01:00
mniip
e2cb5838c6 specially per @savask's request, put matcher into a function
returns 0 if no match, returns position of pipe character if there is
2013-08-22 19:50:20 +04:00
mniip
4a308cbf66 oh, and remove dependency 2013-08-22 17:52:32 +04:00
jacob1
ded94b475d move clipboard functions out of misc.cpp without creating errors 2013-01-18 14:37:24 -05:00
jacob1
73fdfd411c copy support in linux 2013-01-13 15:24:52 -05:00
Simon Robertshaw
f3307e47a8 Helper function for linear interpolation 2012-11-18 22:24:56 +00:00
Simon Robertshaw
268795eec1 Add date to Preview View, fixes issue #64 2012-08-04 13:40:39 +01:00
ntoskrnl
f94fabd999 Rename WIN32 preprocessor definition to WIN 2012-08-02 15:21:16 +01:00
Simon Robertshaw
f8a6d2ea1f Textboxes for decoration, addresses "No text boxes in deco editor to directly edit the values" in issue #23 2012-07-29 14:58:56 +01:00
Simon Robertshaw
5befe5c25f Local file browser + some more interesting things like Progress bar UI component 2012-07-27 20:06:17 +01:00
Simon Robertshaw
2b51441573 Linux fix with SDL_syswm 2012-06-13 14:54:15 +01:00
Simon Robertshaw
d7e12b7b43 Missing includes and declarations for Linux 2012-06-13 14:36:56 +01:00
Simon Robertshaw
136675b56a Move style into Component 2012-05-15 18:13:17 +01:00
Simon Robertshaw
f86091d421 Use useragent for version, fix URl encoding 2012-02-01 21:20:27 +00:00
Simon Robertshaw
038da72c61 Console UI, open in browser button, tab and enter shortcut for Login UI, various 2012-02-01 18:45:59 +00:00
Simon Robertshaw
44639a6423 Some folder changes, started search and client 2012-01-19 13:44:59 +00:00
Simon Robertshaw
4a60b97c70 Some minor changes 2012-01-17 20:46:06 +00:00