Skip to content

Commit

Permalink
- backend update from Raze.
Browse files Browse the repository at this point in the history
  • Loading branch information
coelckers committed Aug 31, 2021
1 parent fe1514c commit b5294e9
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 34 deletions.
4 changes: 2 additions & 2 deletions src/common/engine/serializer.cpp
Expand Up @@ -1051,8 +1051,8 @@ FSerializer &Serialize(FSerializer &arc, const char *key, double &value, double
auto val = arc.r->FindKey(key);
if (val != nullptr)
{
assert(val->IsDouble());
if (val->IsDouble())
assert(val->IsNumber());
if (val->IsNumber())
{
value = val->GetDouble();
}
Expand Down
6 changes: 6 additions & 0 deletions src/common/filesystem/filesystem.cpp
Expand Up @@ -912,6 +912,12 @@ LumpShortName& FileSystem::GetShortName(int i)
return FileInfo[i].shortName;
}

FString& FileSystem::GetLongName(int i)
{
if ((unsigned)i >= NumEntries) I_Error("GetLongName: Invalid index");
return FileInfo[i].longName;
}

void FileSystem::RenameFile(int num, const char* newfn)
{
if ((unsigned)num >= NumEntries) I_Error("RenameFile: Invalid index");
Expand Down
1 change: 1 addition & 0 deletions src/common/filesystem/filesystem.h
Expand Up @@ -117,6 +117,7 @@ class FileSystem
}

LumpShortName& GetShortName(int i); // may only be called before the hash chains are set up.
FString& GetLongName(int i); // may only be called before the hash chains are set up.
void RenameFile(int num, const char* fn);
bool CreatePathlessCopy(const char* name, int id, int flags);

Expand Down
39 changes: 13 additions & 26 deletions src/common/utility/i_time.cpp
Expand Up @@ -67,22 +67,14 @@ static uint64_t NSToMS(uint64_t ns)
return static_cast<uint64_t>(ns / 1'000'000);
}

static int NSToTic(uint64_t ns)
static int NSToTic(uint64_t ns, double const ticrate)
{
return static_cast<int>(ns * GameTicRate / 1'000'000'000);
return static_cast<int>(ns * ticrate / 1'000'000'000);
}

static int NSToBuildTic(uint64_t ns)
static uint64_t TicToNS(double tic, double const ticrate)
{
return static_cast<int>(ns * 120 / 1'000'000'000);
}
static uint64_t TicToNS(int tic)
{
return static_cast<uint64_t>(tic) * 1'000'000'000 / GameTicRate;
}
static uint64_t BuildTicToNS(int tic)
{
return static_cast<uint64_t>(tic) * 1'000'000'000 / 120;
return static_cast<uint64_t>(tic * 1'000'000'000 / ticrate);
}

void I_SetFrameTime()
Expand Down Expand Up @@ -111,18 +103,18 @@ void I_WaitVBL(int count)
I_SetFrameTime();
}

int I_WaitForTic(int prevtic)
int I_WaitForTic(int prevtic, double const ticrate)
{
// Waits until the current tic is greater than prevtic. Time must not be frozen.

int time;
while ((time = I_GetTime()) <= prevtic)
while ((time = I_GetTime(ticrate)) <= prevtic)
{
// Windows-specific note:
// The minimum amount of time a thread can sleep is controlled by timeBeginPeriod.
// We set this to 1 ms in DoMain.

const uint64_t next = FirstFrameStartTime + TicToNS(prevtic + 1);
const uint64_t next = FirstFrameStartTime + TicToNS(prevtic + 1, ticrate);
const uint64_t now = I_nsTime();

if (next > now)
Expand Down Expand Up @@ -166,21 +158,16 @@ uint64_t I_GetTimeNS()
return CurrentFrameStartTime - FirstFrameStartTime;
}

int I_GetTime()
{
return NSToTic(CurrentFrameStartTime - FirstFrameStartTime);
}

int I_GetBuildTime()
int I_GetTime(double const ticrate)
{
return NSToBuildTic(CurrentFrameStartTime - FirstFrameStartTime);
return NSToTic(CurrentFrameStartTime - FirstFrameStartTime, ticrate);
}

double I_GetTimeFrac()
double I_GetTimeFrac(double const ticrate)
{
int currentTic = NSToTic(CurrentFrameStartTime - FirstFrameStartTime);
uint64_t ticStartTime = FirstFrameStartTime + TicToNS(currentTic);
uint64_t ticNextTime = FirstFrameStartTime + TicToNS(currentTic + 1);
int currentTic = NSToTic(CurrentFrameStartTime - FirstFrameStartTime, ticrate);
uint64_t ticStartTime = FirstFrameStartTime + TicToNS(currentTic, ticrate);
uint64_t ticNextTime = FirstFrameStartTime + TicToNS(currentTic + 1, ticrate);

return (CurrentFrameStartTime - ticStartTime) / (double)(ticNextTime - ticStartTime);
}
Expand Down
9 changes: 3 additions & 6 deletions src/common/utility/i_time.h
Expand Up @@ -9,17 +9,14 @@ extern double TimeScale;
void I_SetFrameTime();

// Called by D_DoomLoop, returns current time in tics.
int I_GetTime();
int I_GetTime(double const ticrate = GameTicRate);
// same, but using nanoseconds
uint64_t I_GetTimeNS();

// Called by Build games in lieu of totalclock, returns current time in tics at ticrate of 120.
int I_GetBuildTime();

double I_GetTimeFrac();
double I_GetTimeFrac(double const ticrate = GameTicRate);

// like I_GetTime, except it waits for a new tic before returning
int I_WaitForTic(int);
int I_WaitForTic(int prevtic, double const ticrate = GameTicRate);

// Freezes tic counting temporarily. While frozen, calls to I_GetTime()
// will always return the same value.
Expand Down
29 changes: 29 additions & 0 deletions src/common/utility/tarray.h
Expand Up @@ -292,6 +292,17 @@ class TArray
return i;
}

bool Contains(const T& item) const
{
unsigned int i;
for(i = 0;i < Count;++i)
{
if(Array[i] == item)
return true;
}
return false;
}

template<class Func>
unsigned int FindEx(Func compare) const
{
Expand Down Expand Up @@ -826,6 +837,18 @@ class TMap
CopyNodes(o.Nodes, o.Size);
}

TMap(TMap &&o)
{
Nodes = o.Nodes;
LastFree = o.LastFree; /* any free position is before this position */
Size = o.Size; /* must be a power of 2 */
NumUsed = o.NumUsed;

o.Size = 0;
o.NumUsed = 0;
o.SetNodeVector(1);
}

TMap &operator= (const TMap &o)
{
NumUsed = 0;
Expand All @@ -835,6 +858,12 @@ class TMap
return *this;
}

TMap &operator= (TMap &&o)
{
TransferFrom(o);
return *this;
}

//=======================================================================
//
// TransferFrom
Expand Down

0 comments on commit b5294e9

Please sign in to comment.