|
|
@@ -1,6 +1,7 @@ |
|
|
|
#include <cygnet/Context.h> |
|
|
|
#include <cygnet/Window.h> |
|
|
|
#include <cygnet/Renderer.h> |
|
|
|
#include <cygnet/ResourceManager.h> |
|
|
|
#include <swan-common/constants.h> |
|
|
|
|
|
|
|
#include <time.h> |
|
|
@@ -15,23 +16,23 @@ double getTime() { |
|
|
|
return tv.tv_sec + tv.tv_nsec / 1000000000.0; |
|
|
|
} |
|
|
|
|
|
|
|
void addTile(Cygnet::Renderer &rnd, const char *path) { |
|
|
|
void addTile(Cygnet::ResourceBuilder &builder, const char *path) { |
|
|
|
static size_t id = 0; |
|
|
|
SDL_Surface *surf = IMG_Load(path); |
|
|
|
rnd.registerTileTexture(id++, surf->pixels, surf->pitch * surf->h); |
|
|
|
builder.addTile(id++, surf->pixels); |
|
|
|
SDL_FreeSurface(surf); |
|
|
|
} |
|
|
|
|
|
|
|
Cygnet::RenderSprite loadSprite(Cygnet::Renderer &rnd, const char *path, int fh) { |
|
|
|
Cygnet::RenderSprite loadSprite(Cygnet::ResourceBuilder &builder, const char *path, int fh) { |
|
|
|
SDL_Surface *surf = IMG_Load(path); |
|
|
|
auto sprite = rnd.createSprite(surf->pixels, surf->w, surf->h, fh); |
|
|
|
auto sprite = builder.addSprite(path, surf->pixels, surf->w, surf->h, fh); |
|
|
|
SDL_FreeSurface(surf); |
|
|
|
return sprite; |
|
|
|
} |
|
|
|
|
|
|
|
Cygnet::RenderSprite loadSprite(Cygnet::Renderer &rnd, const char *path) { |
|
|
|
Cygnet::RenderSprite loadSprite(Cygnet::ResourceBuilder &builder, const char *path) { |
|
|
|
SDL_Surface *surf = IMG_Load(path); |
|
|
|
auto sprite = rnd.createSprite(surf->pixels, surf->w, surf->h); |
|
|
|
auto sprite = builder.addSprite(path, surf->pixels, surf->w, surf->h); |
|
|
|
SDL_FreeSurface(surf); |
|
|
|
return sprite; |
|
|
|
} |
|
|
@@ -41,6 +42,7 @@ int main() { |
|
|
|
IMG_Init(IMG_INIT_PNG); |
|
|
|
Cygnet::Window win("Cygnet Test", 680, 680); |
|
|
|
Cygnet::Renderer rnd; |
|
|
|
Cygnet::ResourceBuilder rbuilder(rnd); |
|
|
|
|
|
|
|
for (auto path: { |
|
|
|
"core.mod/assets/tile/dirt.png", |
|
|
@@ -49,10 +51,26 @@ int main() { |
|
|
|
"core.mod/assets/tile/stone.png", |
|
|
|
"core.mod/assets/tile/torch.png", |
|
|
|
"core.mod/assets/tile/tree-trunk.png", |
|
|
|
}) addTile(rnd, path); |
|
|
|
rnd.uploadTileTexture(); |
|
|
|
}) addTile(rbuilder, path); |
|
|
|
|
|
|
|
unsigned char animTexture[32*32*4*3]; |
|
|
|
for (size_t i = 0; i < 3; ++i) { |
|
|
|
int col = 100 * i + 50;; |
|
|
|
for (size_t y = 0; y < 32; ++y) { |
|
|
|
for (size_t x = 0; x < 32; ++x) { |
|
|
|
animTexture[i * 32 * 32 * 4 + y * 32 * 4 + x * 4 + 0] = col; |
|
|
|
animTexture[i * 32 * 32 * 4 + y * 32 * 4 + x * 4 + 1] = col; |
|
|
|
animTexture[i * 32 * 32 * 4 + y * 32 * 4 + x * 4 + 2] = col; |
|
|
|
animTexture[i * 32 * 32 * 4 + y * 32 * 4 + x * 4 + 3] = 255; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
rbuilder.addTile(10, animTexture, 3); |
|
|
|
|
|
|
|
Cygnet::RenderSprite playerSprite = loadSprite(rnd, "core.mod/assets/entity/player-still.png", 64); |
|
|
|
Cygnet::RenderSprite playerSprite = loadSprite( |
|
|
|
rbuilder, "core.mod/assets/entity/player-still.png", 64); |
|
|
|
|
|
|
|
Cygnet::ResourceManager resources(std::move(rbuilder)); |
|
|
|
|
|
|
|
Cygnet::RenderChunk chunk; |
|
|
|
{ |
|
|
@@ -61,6 +79,12 @@ int main() { |
|
|
|
tiles[0] = 1; |
|
|
|
tiles[1] = 2; |
|
|
|
tiles[2] = 3; |
|
|
|
for (int y = 0; y < 8; ++y) { |
|
|
|
for (int x = 0; x < 8; ++x) { |
|
|
|
tiles[y * SwanCommon::CHUNK_WIDTH + x] = 10; |
|
|
|
} |
|
|
|
} |
|
|
|
tiles[10] = 10; |
|
|
|
chunk = rnd.createChunk(tiles); |
|
|
|
} |
|
|
|
|
|
|
@@ -70,11 +94,12 @@ int main() { |
|
|
|
.zoom = 1, |
|
|
|
}; |
|
|
|
|
|
|
|
float lol = 0; |
|
|
|
float animAcc = 0; |
|
|
|
|
|
|
|
bool keys[512] = { 0 }; |
|
|
|
|
|
|
|
double acc = 0; |
|
|
|
double tileAnimAcc = 0; |
|
|
|
double fpsAcc = 0; |
|
|
|
double prevTime = getTime() - 1/60.0; |
|
|
|
int frames = 0; |
|
|
|
float x = 0, y = 0; |
|
|
@@ -83,15 +108,22 @@ int main() { |
|
|
|
double currTime = getTime(); |
|
|
|
double dt = currTime - prevTime; |
|
|
|
prevTime = currTime; |
|
|
|
acc += dt; |
|
|
|
animAcc += dt; |
|
|
|
|
|
|
|
fpsAcc += dt; |
|
|
|
frames += 1; |
|
|
|
if (acc >= 2) { |
|
|
|
if (fpsAcc >= 2) { |
|
|
|
std::cerr << "FPS: " << (frames / 2.0) << '\n'; |
|
|
|
acc -= 2; |
|
|
|
fpsAcc -= 2; |
|
|
|
frames = 0; |
|
|
|
} |
|
|
|
|
|
|
|
tileAnimAcc += dt; |
|
|
|
if (tileAnimAcc >= 0.5) { |
|
|
|
resources.tick(); |
|
|
|
tileAnimAcc -= 0.5; |
|
|
|
} |
|
|
|
|
|
|
|
SDL_Event evt; |
|
|
|
while (SDL_PollEvent(&evt)) { |
|
|
|
switch (evt.type) { |
|
|
@@ -134,15 +166,10 @@ int main() { |
|
|
|
y += 1 * dt; |
|
|
|
} |
|
|
|
|
|
|
|
lol += 1 * dt; |
|
|
|
rnd.modifyChunk(chunk, { 0, 0 }, (int)lol % 6); |
|
|
|
rnd.modifyChunk(chunk, { 4, 4 }, ((int)(lol / 2) + 3) % 6); |
|
|
|
rnd.modifyChunk(chunk, { 3, 2 }, ((int)(lol * 1.5) + 7) % 6); |
|
|
|
|
|
|
|
rnd.drawChunk(chunk, { 0, 0 }); |
|
|
|
|
|
|
|
rnd.drawSprite(playerSprite, { x, y }, (int)lol % 2); |
|
|
|
cam.pos = { x, y }; |
|
|
|
rnd.drawSprite(playerSprite, { x, y }, (int)animAcc % 2); |
|
|
|
cam.pos = { x + 0.5f, y + 0.5f }; |
|
|
|
|
|
|
|
win.clear(); |
|
|
|
rnd.draw(cam); |