Browse Source

cygnet stuff

feature/replace-renderer
Martin Dørum 3 years ago
parent
commit
65c3ddfa9f
3 changed files with 20 additions and 42 deletions
  1. 1
    1
      CMakeLists.txt
  2. 1
    1
      libswan/CMakeLists.txt
  3. 18
    40
      src/cygnet-test.cc

+ 1
- 1
CMakeLists.txt View File

@@ -65,8 +65,8 @@ target_include_directories(swan-common

add_subdirectory(third-party)
add_subdirectory(tracy-tools)
add_subdirectory(libcygnet)
add_subdirectory(libswan)
add_subdirectory(libcygnet)
add_subdirectory(core.mod)

add_executable(swan

+ 1
- 1
libswan/CMakeLists.txt View File

@@ -22,7 +22,7 @@ target_include_directories(libswan
PUBLIC "include"
PRIVATE "include/swan")
set_target_properties(libswan PROPERTIES OUTPUT_NAME swan)
target_link_libraries(libswan swan-common libcygnet ${libraries})
target_link_libraries(libswan swan-common ${libraries})

install(TARGETS libswan DESTINATION swan/libswan)


+ 18
- 40
src/cygnet-test.cc View File

@@ -1,7 +1,6 @@
#include <cygnet/Context.h>
#include <cygnet/Window.h>
#include <cygnet/Renderer.h>
#include <cygnet/ResourceManager.h>
#include <swan-common/constants.h>

#include <time.h>
@@ -16,23 +15,23 @@ double getTime() {
return tv.tv_sec + tv.tv_nsec / 1000000000.0;
}

void addTile(Cygnet::ResourceBuilder &builder, const char *path) {
void addTile(Cygnet::Renderer &rnd, const char *path) {
static size_t id = 0;
SDL_Surface *surf = IMG_Load(path);
builder.addTile(id++, surf->pixels);
rnd.registerTileTexture(id++, surf->pixels, surf->pitch * surf->h);
SDL_FreeSurface(surf);
}

Cygnet::RenderSprite loadSprite(Cygnet::ResourceBuilder &builder, const char *path, int fh) {
Cygnet::RenderSprite loadSprite(Cygnet::Renderer &rnd, const char *path, int fh) {
SDL_Surface *surf = IMG_Load(path);
auto sprite = builder.addSprite(path, surf->pixels, surf->w, surf->h, fh);
auto sprite = rnd.createSprite(surf->pixels, surf->w, surf->h, fh);
SDL_FreeSurface(surf);
return sprite;
}

Cygnet::RenderSprite loadSprite(Cygnet::ResourceBuilder &builder, const char *path) {
Cygnet::RenderSprite loadSprite(Cygnet::Renderer &rnd, const char *path) {
SDL_Surface *surf = IMG_Load(path);
auto sprite = builder.addSprite(path, surf->pixels, surf->w, surf->h);
auto sprite = rnd.createSprite(surf->pixels, surf->w, surf->h);
SDL_FreeSurface(surf);
return sprite;
}
@@ -42,7 +41,6 @@ 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",
@@ -51,26 +49,10 @@ int main() {
"core.mod/assets/tile/stone.png",
"core.mod/assets/tile/torch.png",
"core.mod/assets/tile/tree-trunk.png",
}) addTile(rbuilder, path);

unsigned char lolTexture[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) {
lolTexture[i * 32 * 32 * 4 + y * 32 * 4 + x * 4 + 0] = col;
lolTexture[i * 32 * 32 * 4 + y * 32 * 4 + x * 4 + 1] = col;
lolTexture[i * 32 * 32 * 4 + y * 32 * 4 + x * 4 + 2] = col;
lolTexture[i * 32 * 32 * 4 + y * 32 * 4 + x * 4 + 3] = 255;
}
}
}
rbuilder.addTile(10, lolTexture, 3);

Cygnet::RenderSprite playerSprite = loadSprite(
rbuilder, "core.mod/assets/entity/player-still.png", 64);
}) addTile(rnd, path);
rnd.uploadTileTexture();

Cygnet::ResourceManager resources(std::move(rbuilder));
Cygnet::RenderSprite playerSprite = loadSprite(rnd, "core.mod/assets/entity/player-still.png", 64);

Cygnet::RenderChunk chunk;
{
@@ -79,7 +61,6 @@ int main() {
tiles[0] = 1;
tiles[1] = 2;
tiles[2] = 3;
tiles[10] = 10;
chunk = rnd.createChunk(tiles);
}

@@ -93,8 +74,7 @@ int main() {

bool keys[512] = { 0 };

double tileAnimAcc = 0;
double fpsAcc = 0;
double acc = 0;
double prevTime = getTime() - 1/60.0;
int frames = 0;
float x = 0, y = 0;
@@ -103,22 +83,15 @@ int main() {
double currTime = getTime();
double dt = currTime - prevTime;
prevTime = currTime;
lol += dt;
acc += dt;

fpsAcc += dt;
frames += 1;
if (fpsAcc >= 2) {
if (acc >= 2) {
std::cerr << "FPS: " << (frames / 2.0) << '\n';
fpsAcc -= 2;
acc -= 2;
frames = 0;
}

tileAnimAcc += dt;
if (tileAnimAcc >= 0.5) {
resources.tick();
tileAnimAcc -= 0.5;
}

SDL_Event evt;
while (SDL_PollEvent(&evt)) {
switch (evt.type) {
@@ -161,6 +134,11 @@ 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);

Loading…
Cancel
Save