54 Commits
Author SHA1 Message Date
Goober5000 1493774f80 Merge pull request #6261 from Goober5000/timestamp_valid_tweak
refine timestamp_valid
2024-11-03 22:31:14 -05:00
Goober5000 c8010e5447 some timestamp refinements
1. Make sure the legacy `timestamp_until()` and `timestamp_since()` functions check for any type of invalid timestamp
2. Add a useful `isFinite()` function
3. A timestamp delta on an immediate timestamp is more properly the actual delta, rather than another immediate timestamp
2024-08-24 17:24:39 -04:00
Goober5000 ebb5a27922 refine timestamp_valid
Change `timestamp_valid()` to also catch the common case of -1 being used for invalid as well as the "official" 0.
2024-07-20 01:19:23 -04:00
Goober5000 9c5b4dfb49 synchronize simulation timestamps across the entire frame
Prior to the timer upgrade, all simulation timestamps shared identical timer and timestamp values for the duration of the frame, since they were only updated within the `game_set_frametime` function.  Since the timer upgrade depends on the system clock, timestamps evaluated near the end of the frame will be very slightly later than timestamps evaluated near the beginning of the frame.  It is desirable to keep them all in sync.

This PR tweaks the timestamp system to take a snapshot at the beginning of the frame, then use that snapshot for the entire duration of the frame.  This only affects simulation timestamps; real-time timestamps still use the live timer.
2023-04-15 22:17:23 -04:00
wookieejedi 2a492e00c2 Revert "synchronize simulation timestamps across the entire frame" (#5287)
* Revert "synchronize simulation timestamps across the entire frame"

* try a proper fix instead of revert

* make sure nothing is reverted

* and back to full revert
2023-03-27 09:59:23 -04:00
Goober5000 6f7c949e16 Merge pull request #5267 from Goober5000/event_timestamp_check_fix
fix an edge case in is-event-true-delay and related sexps
2023-03-20 11:04:32 -04:00
Goober5000 eed50619ca fix an edge case in is-event-true-delay and related sexps
Originally the check for event delay was this:
```
if ( (fix) Mission_events[i].timestamp + delay >= Missiontime )
    return SEXP_FALSE;
```
This returns false even when the mission time is equal to the timestamp.  Therefore the timestamp check needs to use >, not >=.

Thanks to Durandal and ShivanSpS for helping to track this down.
2023-03-17 15:00:06 -04:00
Goober5000 685f641696 synchronize simulation timestamps across the entire frame
Prior to the timer upgrade, all simulation timestamps shared identical timer and timestamp values for the duration of the frame, since they were only updated within the `game_set_frametime` function.  Since the timer upgrade depends on the system clock, timestamps evaluated near the end of the frame will be very slightly later than timestamps evaluated near the beginning of the frame.  It is desirable to keep them all in sync.

This PR tweaks the timestamp system to take a snapshot at the beginning of the frame, then use that snapshot for the entire duration of the frame.  This only affects simulation timestamps; real-time timestamps still use the live timer.
2023-03-17 14:14:55 -04:00
Goober5000 22782333c9 by default, start texture animation at the beginning of a mission
For all POFs that use animated textures, if no starting timestamp is specified, assume animation started at the beginning of the mission.  This fixes a bug reported in Starfox: Event Horizon where weapon POF animated textures stopped animating after the texture timestamp upgrade.
2022-11-16 22:50:04 -05:00
John FernandezandTaylor Richards 206ca742ab Further Fixes from Taylor
These fix up the in-game confirm packet and help sync client and server through a few timing fixes.

Co-Authored-By: Taylor Richards <[email protected]>
2022-11-14 10:30:28 -05:00
Goober5000 a86074e3cd fix timestamp_in_between functions
Fix the comparison and add documentation to the compare functions.
2022-11-01 01:10:59 -04:00
Goober5000 ae3fb54c02 add more timestamp documentation 2022-09-08 02:42:38 -04:00
Goober5000 6c7c093729 some more timestamps 2022-08-29 10:42:03 -04:00
Goober5000 19e407df62 convert some timestamps to the new system
Mostly debris and asteroid timestamps, but also arc timestamps for ships.
2022-08-25 21:40:18 -04:00
Goober5000 ab7a1d8fd7 some fixes for playing movies via script
The movie player code was missing some important functionality, in particular:
1) There was only one timing method to get real-time elapsed time, which was not suitable for pausing or time compression
2) There was an improper cast for the FPS property, causing a script error
3) The `getSeconds` method lost precision during casting

This patches those deficiencies.
2022-07-12 23:35:27 -04:00
John Fernandez 43b89d29b6 Add overload for timestamp_elapsed_safe
Why?  Cause multi
2022-06-02 11:34:52 -04:00
JohnAFernandez 0bbd099853 Add timestamp get delta (#4334)
* Add timestamp get delta

For returning the delta between two timestamps, as a counterpart to timestamp_delta.
2022-06-02 09:35:52 -04:00
Goober5000 7780cf4617 timestamp comparisons
Add methods to compare timestamps, as well as methods to calculate deltas from existing timestamps.

Follow-up to #4286.
2022-05-28 17:13:24 -04:00
Goober5000 62cacb3f08 address feedback 2022-05-28 14:41:20 -04:00
Goober5000 e473ff011c add timestamp_since
Add `timestamp_since()` and modify a few places that use `timestamp_until()`.
2022-05-18 22:24:20 -04:00
Taylor Richards df6cf572ac convert multi timestamp()'s to ui_timestamp() where appropriate
A bit overkill for some of this but just covering the bases.

 * fix issues with in-game join
 * fix multi messaging and multi pause screen
 * make sure maintenance stuff (pings, voice, file xfer, etc.) isn't
   affected by pausing or time compression
2022-05-17 07:50:50 -04:00
Goober5000 4933906d18 upgrade supernova timestamps
This adds a type-safe TIMESTAMP, similar to UI_TIMESTAMP.  Eventually all of the FSO codebase will be switched over to this new type.  In the meantime, just the supernova code is switched over.
2022-04-09 13:23:03 -04:00
Goober5000 c6d87b0626 there is now no longer a need to keep timestamps running during briefing, so keep them paused until the mission starts 2022-02-12 19:34:01 -05:00
Goober5000 0c8cfd160b improve the UI_TIMESTAMP type a bit 2022-02-12 19:34:01 -05:00
Goober5000 8e2e825204 add UI_TIMESTAMP type and switch some timestamps to use it 2022-02-12 19:01:15 -05:00
Goober5000 a1bc06aeeb accommodate elapsed time during debugging
If a breakpoint is hit in the code, the SDL time will keep running even though FSO doesn't realize things are effectively, if not actually, paused.  Detect this situation and adjust the timestamp offset to compensate.
2022-01-20 21:13:52 -05:00
Goober5000 4ee84b71d7 refactor some names 2022-01-17 19:03:23 -05:00
Goober5000 18f4f490d0 time compression outline, static casts 2022-01-16 15:24:43 -05:00
Goober5000 97f9aa2259 move stuff here too 2022-01-16 15:24:43 -05:00
Goober5000 00de4c3e7e timestamps should be running just about all the time 2022-01-16 15:24:43 -05:00
Goober5000 a1dadb1c0b small refactor 2022-01-16 15:24:43 -05:00
Goober5000 8e33644a8f since we used to fast-forward at the rate of 1/4 second per frame, simulate the same thing with the timer 2022-01-16 15:20:57 -05:00
Goober5000 88f4163ae3 always give the game priority when starting/stopping time 2022-01-16 15:20:57 -05:00
Goober5000 1b51225c51 convert the FSO timestamp system to use SDL time
Previously, the game used a dead-reckoning system for measuring time, where several time counters were incremented as long as time was running.  This unfortunately has no way to synchronize time in the long term, and therefore in-game time will tend to run faster or slower than real time by a few percent, depending on various factors.

This PR redesigns the timestamp system to use the SDL time counter which will always keep it in sync with real time.  However this necessarily involves a bit of clever handling when the game is paused and unpaused.  It also revealed several minor bugs in several places in the code where timestamps were handled.

This PR is currently in draft status until the design can be updated to handle time compression.  In all other respects it should be working.
2022-01-16 15:20:57 -05:00
Joshua Glatt 144d484c85 Replace rand() calls with a Random class (#3332) 2021-05-04 18:26:06 -07:00
asarium acbac94685 Add GPU time tracing
This also adds nanosecond precision tracing for normal CPU events
2016-09-14 12:26:53 +02:00
asarium baf7746986 Rename high res timer function to timer_get_microseconds 2016-08-31 14:32:53 +02:00
asarium e8bd7363c8 Use microsecond precision for timestamps
This only increases resolution for the internal ticker but not for the
external timestamps
2016-08-31 14:32:53 +02:00
asarium 0169a5477c Always use high resolution timers 2016-08-31 14:32:53 +02:00
asarium 2d4d0081cd Merge branch 'master' into antipodes_/sync
Conflicts:
	code/cmdline/cmdline.cpp
	code/io/timer.cpp
	code/network/multi.cpp
	configure.ac
	projects/MSVC_2005/Fred2.vcproj
	projects/MSVC_2005/Freespace2.sln
	projects/MSVC_2005/Freespace2.vcproj
	projects/MSVC_2005/code.vcproj
	projects/MSVC_2008/Fred2.vcproj
	projects/MSVC_2008/Freespace2.doxproj
	projects/MSVC_2008/Freespace2.vcproj
	projects/MSVC_2008/code.vcproj
	projects/MSVC_2010/Fred2.vcxproj
	projects/MSVC_2012/Fred2.vcxproj
	projects/MSVC_2012/Freespace2.vcxproj
	projects/MSVC_2012/code.vcxproj
	projects/MSVC_2012/code.vcxproj.filters
	projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj
	projects/Xcode4/Frameworks.tgz
	projects/Xcode4/Info.plist
2016-03-11 12:36:52 +01:00
Goober5000 746fe56b32 Merge pull request #525 from asarium/cleanup/timer
Remove some unused code from timer.h/.cpp
2016-01-31 16:12:04 -05:00
asarium fc6bc3a1c6 Remove some unused code from timer.h/.cpp
The removed code has been replaced by the profiling subsystem.
2016-01-29 22:00:58 +01:00
asarium 54b2eddc14 Change timestamp integer handling again 2016-01-28 16:39:10 +01:00
asarium 64c4e4d7b4 Use integer math instead of floats for timestamps 2016-01-27 15:34:37 +01:00
asarium 75625270c9 Use the correct type for high resolution timers 2016-01-27 14:27:46 +01:00
Swifty dd9f9ed921 Improved profiling code to have a timing resolution of microseconds instead of milliseconds. 2015-05-05 20:41:05 -07:00
portej05 719825f80d The big CVS comment removal. This chops approx. 3.5mb off a full checkout.
I've tested this through compiling and through hand checking. 
Normalises line endings in ALL files to \n.
2009-06-20 08:08:20 +00:00
taylor 3abccfa76c sync up to current FS2NetD code (fixes so many little problems/issues that it's not even funny) 2008-11-09 05:08:19 +00:00
Goober5000 52f136f9ad remove PreProcDefine #includes in FS2
--Goober5000
2005-07-13 03:15:53 +00:00
Kazan 7d1c8b185d added preprocdefines.h to prevent what happened with fred -- make sure to make all fred2 headers include this file as the _first_ include -- i have already modified fs2 files to do this 2004-08-11 05:06:36 +00:00