Files
mcpe/source/client/common/Timer.cpp
Brent a0f71c7b27 C++03 Support & Partial Xbox 360 Support (#37)
* WIP C++03 + Xbox 360 Support

* math.h & _USE_MATH_DEFINES on Level.hpp
Updated Xenon vcxproj file for new file structure.

* * Fix bad GUI scale setup.

* * Gui: Use ratios instead of hardcoded sub-1 floating point values, to make the mechanism more clear.

* Add Direct Connect Button and Screen (#30)

* Add Direct Connect Button and Screen

* Remove accidental extra build directories for wasm

* Add DirectConnectScreen.cpp to the CMake

* Use Hungarian coding style notation

* * Fix errors caused by #30

* * Improve the Chat Screen

* * Improve the DirectConnectScreen, among other things.

* * Update the game title once again.

* * Add build-wasm.bat.

* * Add info about compiling for wasm

* * Fix send to specific GUID actually broadcasting to everyone

* * Add command manager.

* * Add writeable configuration.

* * Allow dynamic screen size change on windows

* * Allow the same thing on the emscripten version.

* WIP C++03 + Xbox 360 Support

* Fixed a possible merging issue that broke RakNet?

* Additional Xbox 360 compatability fixes

---------

Co-authored-by: Brent Da Mage <BrentDaMage@users.noreply.github.com>
Co-authored-by: iProgramInCpp <iprogramincpp@gmail.com>
Co-authored-by: ts <124226059+uniformization@users.noreply.github.com>
2023-08-07 15:48:52 +03:00

101 lines
2.1 KiB
C++

/********************************************************************
Minecraft: Pocket Edition - Decompilation Project
Copyright (C) 2023 iProgramInCpp
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#include "Timer.hpp"
#include "client/common/Utils.hpp"
#if !defined(_WIN32) && defined(USE_ACCURATE_TIMER)
#error "Implement getAccurateTimeMs() for your platform!"
#endif
#if defined(_WIN32) && defined(USE_ACCURATE_TIMER)
static LARGE_INTEGER s_StartTime;
static bool s_Initted;
double getAccurateTimeMs()
{
// Thanks to @Kleadron for helping out with this!
if (!s_Initted)
{
s_Initted = true;
QueryPerformanceCounter(&s_StartTime);
}
LARGE_INTEGER frequency;
QueryPerformanceFrequency(&frequency);
LARGE_INTEGER currentCounter;
QueryPerformanceCounter(&currentCounter);
LONGLONG diff = currentCounter.QuadPart - s_StartTime.QuadPart;
return double(diff) / double(frequency.QuadPart) * 1000.0;
}
#endif
void Timer::advanceTime()
{
#ifdef USE_ACCURATE_TIMER
double timeMs = getAccurateTimeMs();
#else
int timeMs = getTimeMs();
#endif
if (timeMs - field_4 <= 1000)
{
if (timeMs - field_4 < 0)
{
field_4 = field_8 = timeMs;
}
}
else
{
#ifdef USE_ACCURATE_TIMER
double diff1 = timeMs - field_4;
double diff2 = timeMs - field_8;
#else
int diff1 = timeMs - field_4;
int diff2 = timeMs - field_8;
#endif
field_C += ((float(diff1) / float(diff2)) - field_C) * 0.2f;
}
float diff = float(timeMs) / 1000.0f - field_0;
field_0 = float(timeMs) / 1000.0f;
float x1 = diff * field_C;
if (x1 > 1) x1 = 1;
if (x1 < 0) x1 = 0;
float x2 = field_20 + x1 * field_1C * field_10;
field_14 = int(x2);
field_20 = x2 - field_14;
field_18 = x2 - field_14;
if (field_14 > 10)
field_14 = 10;
}
Timer::Timer()
{
field_0 = 0;
#ifndef USE_ACCURATE_TIMER
field_4 = 0;
field_8 = 0;
#else
field_4 = 0;
field_8 = 0;
#endif
field_C = 1.0f;
field_10 = 20.0f;
field_14 = 0;
field_18 = 0;
field_1C = 1.0f;
field_20 = 0;
field_4 = field_8 = getTimeMs();
}