1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-05 20:57:46 +02:00

30 updates per second (Core::UPS)

This commit is contained in:
XProger
2020-07-18 17:25:57 +03:00
parent b7d6ce5b13
commit e276196572
3 changed files with 41 additions and 25 deletions

View File

@@ -176,6 +176,8 @@ extern void osMutexFree (void *obj);
extern void osMutexLock (void *obj);
extern void osMutexUnlock (void *obj);
extern int64 osGetCounter ();
extern int64 osGetFrequency ();
extern int osGetTimeMS ();
extern bool osJoyReady (int index);
@@ -229,6 +231,10 @@ enum RenderTargetOp {
namespace Core {
enum {
UPS = 30,
};
struct Mutex {
void *obj;

View File

@@ -203,17 +203,17 @@ namespace Game {
if (Input::lastState[1] == cStart) level->addPlayer(1);
}
/*
float dt = Core::deltaTime;
if (Input::down[ikR]) // slow motion (for animation debugging)
Core::deltaTime /= 10.0f;
*/
if (Input::down[ikT]) // fast motion
for (int i = 0; i < 9; i++)
level->update();
level->update();
Core::deltaTime = dt;
}
void quickSave() {
@@ -247,17 +247,23 @@ namespace Game {
}
}
int32 lastFrame = -1;
bool update() {
// async load for settings
if (Core::settings.version == SETTINGS_READING)
return true;
PROFILE_MARKER("UPDATE");
if (!Core::update())
return false;
float delta = Core::deltaTime;
int32 frame = int32(osGetCounter() * 30L / osGetFrequency());
int32 frameDelta = frame - lastFrame;
lastFrame = frame;
if (frameDelta <= 0) {
return false;
}
if (nextLevel) {
startLevel(nextLevel);
@@ -293,15 +299,9 @@ namespace Game {
Input::down[ik9] = false;
}
if (!level->level.isCutsceneLevel())
delta = min(0.2f, delta);
while (delta > EPS) {
Core::deltaTime = min(delta, 1.0f / 30.0f);
Core::deltaTime = 1.0f / Core::UPS;
for (int i = 0; i < frameDelta; i++) {
Game::updateTick();
delta -= Core::deltaTime;
if (Core::resetState) // resetTime was called
break;
}
return true;

View File

@@ -47,18 +47,29 @@ void osMutexUnlock(void *obj) {
}
// timing
int osStartTime = 0;
int64 osCounterStart = 0;
int64 osCounterFrequency = 0;
int64 osGetCounter() {
LARGE_INTEGER value;
QueryPerformanceCounter(&value);
return value.QuadPart - osCounterStart;
}
int64 osGetFrequency() {
return osCounterFrequency;
}
int osGetTimeMS() {
#ifdef DEBUG
LARGE_INTEGER Freq, Count;
QueryPerformanceFrequency(&Freq);
QueryPerformanceCounter(&Count);
return int(Count.QuadPart * 1000L / Freq.QuadPart);
#else
timeBeginPeriod(0);
return int(timeGetTime()) - osStartTime;
#endif
return int32(osGetCounter() * 1000L / osCounterFrequency);
}
void initCounter() {
LARGE_INTEGER value;
QueryPerformanceCounter(&value);
osCounterStart = value.QuadPart;
QueryPerformanceFrequency(&value);
osCounterFrequency = value.QuadPart;
}
// common input functions
@@ -929,7 +940,6 @@ int main(int argc, char** argv) {
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
_CrtMemCheckpoint(&_msBegin);
//#elif PROFILE
#elif PROFILE
int main(int argc, char** argv) {
#else
@@ -1017,7 +1027,7 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
Sound::channelsCount = 0;
osStartTime = Core::getTime();
initCounter();
touchInit(hWnd);
joyInit();