123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #include <cygnet/Context.h>
- #include <cygnet/Window.h>
- #include <cygnet/Renderer.h>
- #include <swan-common/constants.h>
-
- #include <time.h>
- #include <stdint.h>
- #include <iostream>
- #include <SDL_image.h>
- #include <SDL.h>
-
- double getTime() {
- struct timespec tv;
- clock_gettime(CLOCK_MONOTONIC, &tv);
- return tv.tv_sec + tv.tv_nsec / 1000000000.0;
- }
-
- void addTile(Cygnet::Renderer &rnd, const char *path) {
- static size_t id = 0;
- SDL_Surface *surf = IMG_Load(path);
- rnd.registerTileTexture(id++, surf->pixels, surf->pitch * surf->h);
- SDL_FreeSurface(surf);
- }
-
- int main() {
- Cygnet::Context ctx;
- IMG_Init(IMG_INIT_PNG);
- Cygnet::Window win("Cygnet Test", 680, 680);
- Cygnet::Renderer rnd;
-
- for (auto path: {
- "core.mod/assets/tile/dirt.png",
- "core.mod/assets/tile/grass.png",
- "core.mod/assets/tile/leaves.png",
- "core.mod/assets/tile/stone.png",
- "core.mod/assets/tile/torch.png",
- "core.mod/assets/tile/tree-trunk.png",
- }) addTile(rnd, path);
- rnd.uploadTileTexture();
-
- Cygnet::RenderChunk chunk;
- {
- uint16_t tiles[SwanCommon::CHUNK_WIDTH * SwanCommon::CHUNK_HEIGHT];
- memset(tiles, 0, sizeof(tiles));
- tiles[0] = 1;
- tiles[1] = 2;
- tiles[2] = 3;
- chunk = rnd.createChunk(tiles);
- }
-
- Cygnet::RenderCamera cam = {
- .pos = { 0, 0 },
- .zoom = 1,
- };
-
- float lol = 0;
-
- bool keys[512] = { 0 };
-
- double acc = 0;
- double prevTime = getTime() - 1/60.0;
- int frames = 0;
-
- while (true) {
- double currTime = getTime();
- double dt = currTime - prevTime;
- prevTime = currTime;
- acc += dt;
-
- frames += 1;
- if (acc >= 2) {
- std::cerr << "FPS: " << (frames / 2.0) << '\n';
- acc -= 2;
- frames = 0;
- }
-
- SDL_Event evt;
- while (SDL_PollEvent(&evt)) {
- switch (evt.type) {
- case SDL_QUIT:
- goto exit;
-
- case SDL_WINDOWEVENT:
- switch (evt.window.event) {
- case SDL_WINDOWEVENT_SIZE_CHANGED:
- win.onResize(evt.window.data1, evt.window.data2);
- break;
- }
- break;
-
- case SDL_MOUSEWHEEL:
- cam.zoom += evt.wheel.y * 0.1 * cam.zoom;
- break;
-
- case SDL_KEYDOWN:
- keys[evt.key.keysym.scancode] = true;
- break;
-
- case SDL_KEYUP:
- keys[evt.key.keysym.scancode] = false;
- break;
- }
- }
-
- if (keys[SDL_SCANCODE_A]) {
- cam.pos.x -= 1 * dt;
- }
- if (keys[SDL_SCANCODE_D]) {
- cam.pos.x += 1 * dt;
- }
- if (keys[SDL_SCANCODE_W]) {
- cam.pos.y -= 1 * dt;
- }
- if (keys[SDL_SCANCODE_S]) {
- cam.pos.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({0, 0}, chunk);
-
- win.clear();
- rnd.draw(cam);
- win.flip();
- }
-
- exit:
- IMG_Quit();
- }
|