Adds iClock interface and its implementations.

This commit is contained in:
falsycat 2021-08-24 13:13:04 +09:00
parent b6c35e84a9
commit 1518e429b4
6 changed files with 118 additions and 5 deletions

13
Game.h
View File

@ -6,6 +6,8 @@
#include "iDrawable.h" #include "iDrawable.h"
#include "iWritable.h" #include "iWritable.h"
#include "Logger.h" #include "Logger.h"
#include "OffsetClock.h"
#include "SystemClock.h"
#include "Texture.h" #include "Texture.h"
@ -22,7 +24,8 @@ class Game : public iDrawable, public iWritable {
Game& operator=(const Game&) = delete; Game& operator=(const Game&) = delete;
Game(iAllocator* alloc, uint32_t w, uint32_t h) : Game(iAllocator* alloc, uint32_t w, uint32_t h) :
alloc_(alloc), w_(w), h_(h), logger_(h), test_(Colorbuffer(alloc, 1, 1)) { alloc_(alloc), uptime_(&SystemClock::instance()),
w_(w), h_(h), logger_(h), test_(Colorbuffer(alloc, 1, 1)) {
Colorbuffer temp(alloc_, 5, 5); Colorbuffer temp(alloc_, 5, 5);
float* ptr = temp.ptr(); float* ptr = temp.ptr();
for (size_t i = 0; i < 25; ++i) ptr[i] = i%2*.3+.7; for (size_t i = 0; i < 25; ++i) ptr[i] = i%2*.3+.7;
@ -30,11 +33,10 @@ class Game : public iDrawable, public iWritable {
} }
void Update() { void Update() {
static int i = 0; const uint64_t i = uptime_.now();
++i; if (i%1000 == 0) logger_.Print(L"すべての人類は死滅する: "+std::to_wstring(i));
if (i%100 == 0) logger_.Print(L"すべての人類は死滅する: "+std::to_wstring(i));
double t = i%200/200.; double t = i%2000/2000.;
t = 1 - t; t = 1 - t;
mat3 m = mat3{ {.2, 0, 0},{0, .2, 0},{0, 0, 1} }; mat3 m = mat3{ {.2, 0, 0},{0, .2, 0},{0, 0, 1} };
@ -55,6 +57,7 @@ class Game : public iDrawable, public iWritable {
private: private:
iAllocator* alloc_; iAllocator* alloc_;
OffsetClock uptime_;
uint32_t w_, h_; uint32_t w_, h_;
Logger logger_; Logger logger_;

View File

@ -150,13 +150,16 @@
<ClInclude Include="Game.h" /> <ClInclude Include="Game.h" />
<ClInclude Include="iDrawable.h" /> <ClInclude Include="iDrawable.h" />
<ClInclude Include="iLogger.h" /> <ClInclude Include="iLogger.h" />
<ClInclude Include="iClock.h" />
<ClInclude Include="iWritable.h" /> <ClInclude Include="iWritable.h" />
<ClInclude Include="Logger.h" /> <ClInclude Include="Logger.h" />
<ClInclude Include="OffsetClock.h" />
<ClInclude Include="Rasterbuffer.h" /> <ClInclude Include="Rasterbuffer.h" />
<ClInclude Include="iConsole.h" /> <ClInclude Include="iConsole.h" />
<ClInclude Include="iAllocator.h" /> <ClInclude Include="iAllocator.h" />
<ClInclude Include="LinearAllocator.h" /> <ClInclude Include="LinearAllocator.h" />
<ClInclude Include="StackAllocator.h" /> <ClInclude Include="StackAllocator.h" />
<ClInclude Include="SystemClock.h" />
<ClInclude Include="Text.h" /> <ClInclude Include="Text.h" />
<ClInclude Include="Texture.h" /> <ClInclude Include="Texture.h" />
<ClInclude Include="thirdparty\linalg.h" /> <ClInclude Include="thirdparty\linalg.h" />

View File

@ -80,5 +80,14 @@
<ClInclude Include="Texture.h"> <ClInclude Include="Texture.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="iClock.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SystemClock.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="OffsetClock.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>

38
OffsetClock.h Normal file
View File

@ -0,0 +1,38 @@
#pragma once
#include <cstdint>
#define NOMINMAX
#include <windows.h>
#undef NOMINMAX
#include "iClock.h"
namespace gj {
class OffsetClock : public iClock {
public:
OffsetClock(OffsetClock&&) = default;
OffsetClock(const OffsetClock&) = default;
OffsetClock& operator=(OffsetClock&&) = default;
OffsetClock& operator=(const OffsetClock&) = default;
OffsetClock(const iClock* parent, uint64_t offset) :
parent_(parent), offset_(offset) {
}
OffsetClock(const iClock* parent) : OffsetClock(parent, parent->now()) {
}
uint64_t now() const override {
return parent_->now() - offset_;
}
private:
const iClock* parent_;
uint64_t offset_;
};
}

35
SystemClock.h Normal file
View File

@ -0,0 +1,35 @@
#pragma once
#include <cstdint>
#define NOMINMAX
#include <windows.h>
#undef NOMINMAX
#include "iClock.h"
namespace gj {
class SystemClock : public iClock {
public:
static const SystemClock& instance() {
static const SystemClock instance_;
return instance_;
}
SystemClock() = default;
SystemClock(SystemClock&&) = default;
SystemClock(const SystemClock&) = default;
SystemClock& operator=(SystemClock&&) = default;
SystemClock& operator=(const SystemClock&) = default;
uint64_t now() const override {
return GetTickCount64();
}
};
}

25
iClock.h Normal file
View File

@ -0,0 +1,25 @@
#pragma once
#include <cstdint>
namespace gj {
class iClock {
public:
iClock() = default;
iClock(iClock&&) = default;
iClock(const iClock&) = default;
iClock& operator=(iClock&&) = default;
iClock& operator=(const iClock&) = default;
virtual ~iClock() = default;
virtual uint64_t now() const = 0;
};
}