Browse Source

cygnet-test stuff

feature/replace-renderer
Martin Dørum 3 years ago
parent
commit
374c7b428f
1 changed files with 48 additions and 21 deletions
  1. 48
    21
      src/cygnet-test.cc

+ 48
- 21
src/cygnet-test.cc View File

@@ -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);

Loading…
Cancel
Save