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:
@@ -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;
|
||||
|
||||
|
26
src/game.h
26
src/game.h
@@ -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;
|
||||
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user