mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-06 13:16:52 +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 osMutexLock (void *obj);
|
||||||
extern void osMutexUnlock (void *obj);
|
extern void osMutexUnlock (void *obj);
|
||||||
|
|
||||||
|
extern int64 osGetCounter ();
|
||||||
|
extern int64 osGetFrequency ();
|
||||||
extern int osGetTimeMS ();
|
extern int osGetTimeMS ();
|
||||||
|
|
||||||
extern bool osJoyReady (int index);
|
extern bool osJoyReady (int index);
|
||||||
@@ -229,6 +231,10 @@ enum RenderTargetOp {
|
|||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
|
enum {
|
||||||
|
UPS = 30,
|
||||||
|
};
|
||||||
|
|
||||||
struct Mutex {
|
struct Mutex {
|
||||||
void *obj;
|
void *obj;
|
||||||
|
|
||||||
|
26
src/game.h
26
src/game.h
@@ -203,17 +203,17 @@ namespace Game {
|
|||||||
if (Input::lastState[1] == cStart) level->addPlayer(1);
|
if (Input::lastState[1] == cStart) level->addPlayer(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
float dt = Core::deltaTime;
|
float dt = Core::deltaTime;
|
||||||
if (Input::down[ikR]) // slow motion (for animation debugging)
|
if (Input::down[ikR]) // slow motion (for animation debugging)
|
||||||
Core::deltaTime /= 10.0f;
|
Core::deltaTime /= 10.0f;
|
||||||
|
*/
|
||||||
|
|
||||||
if (Input::down[ikT]) // fast motion
|
if (Input::down[ikT]) // fast motion
|
||||||
for (int i = 0; i < 9; i++)
|
for (int i = 0; i < 9; i++)
|
||||||
level->update();
|
level->update();
|
||||||
|
|
||||||
level->update();
|
level->update();
|
||||||
|
|
||||||
Core::deltaTime = dt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void quickSave() {
|
void quickSave() {
|
||||||
@@ -247,17 +247,23 @@ namespace Game {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32 lastFrame = -1;
|
||||||
|
|
||||||
bool update() {
|
bool update() {
|
||||||
// async load for settings
|
// async load for settings
|
||||||
if (Core::settings.version == SETTINGS_READING)
|
if (Core::settings.version == SETTINGS_READING)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
PROFILE_MARKER("UPDATE");
|
|
||||||
|
|
||||||
if (!Core::update())
|
if (!Core::update())
|
||||||
return false;
|
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) {
|
if (nextLevel) {
|
||||||
startLevel(nextLevel);
|
startLevel(nextLevel);
|
||||||
@@ -293,15 +299,9 @@ namespace Game {
|
|||||||
Input::down[ik9] = false;
|
Input::down[ik9] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!level->level.isCutsceneLevel())
|
Core::deltaTime = 1.0f / Core::UPS;
|
||||||
delta = min(0.2f, delta);
|
for (int i = 0; i < frameDelta; i++) {
|
||||||
|
|
||||||
while (delta > EPS) {
|
|
||||||
Core::deltaTime = min(delta, 1.0f / 30.0f);
|
|
||||||
Game::updateTick();
|
Game::updateTick();
|
||||||
delta -= Core::deltaTime;
|
|
||||||
if (Core::resetState) // resetTime was called
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@@ -47,18 +47,29 @@ void osMutexUnlock(void *obj) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// timing
|
// 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() {
|
int osGetTimeMS() {
|
||||||
#ifdef DEBUG
|
return int32(osGetCounter() * 1000L / osCounterFrequency);
|
||||||
LARGE_INTEGER Freq, Count;
|
}
|
||||||
QueryPerformanceFrequency(&Freq);
|
|
||||||
QueryPerformanceCounter(&Count);
|
void initCounter() {
|
||||||
return int(Count.QuadPart * 1000L / Freq.QuadPart);
|
LARGE_INTEGER value;
|
||||||
#else
|
QueryPerformanceCounter(&value);
|
||||||
timeBeginPeriod(0);
|
osCounterStart = value.QuadPart;
|
||||||
return int(timeGetTime()) - osStartTime;
|
QueryPerformanceFrequency(&value);
|
||||||
#endif
|
osCounterFrequency = value.QuadPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
// common input functions
|
// common input functions
|
||||||
@@ -929,7 +940,6 @@ int main(int argc, char** argv) {
|
|||||||
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
|
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
|
||||||
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
|
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
|
||||||
_CrtMemCheckpoint(&_msBegin);
|
_CrtMemCheckpoint(&_msBegin);
|
||||||
//#elif PROFILE
|
|
||||||
#elif PROFILE
|
#elif PROFILE
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
#else
|
#else
|
||||||
@@ -1017,7 +1027,7 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
|
|||||||
|
|
||||||
Sound::channelsCount = 0;
|
Sound::channelsCount = 0;
|
||||||
|
|
||||||
osStartTime = Core::getTime();
|
initCounter();
|
||||||
|
|
||||||
touchInit(hWnd);
|
touchInit(hWnd);
|
||||||
joyInit();
|
joyInit();
|
||||||
|
Reference in New Issue
Block a user