mirror of
https://git.shylie.info/shylie/glerminal.git
synced 2025-10-02 13:10:10 +00:00
Fix a bug with glerminal_layer_scale that caused unintended behavior
This commit is contained in:
@@ -24,11 +24,11 @@ namespace
|
||||
time = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 40; i++)
|
||||
for (int i = 0; i < GRID_WIDTH; i++)
|
||||
{
|
||||
for (int j = 0; j < 25; j++)
|
||||
for (int j = 0; j < GRID_HEIGHT; j++)
|
||||
{
|
||||
for (int k = 0; k < 256; k++)
|
||||
for (int k = 0; k < LAYER_COUNT; k++)
|
||||
{
|
||||
glerminal_set(i, j, k, rand() % 4);
|
||||
glerminal_offset(i, j, k, (rand() * rand()) % 64 - 32, (rand() * rand()) % 64 - 32);
|
||||
|
@@ -7,32 +7,28 @@ namespace
|
||||
void init()
|
||||
{
|
||||
glerminal_load_sprites_file("resources/basic.png");
|
||||
|
||||
for (int i = 0; i < GRID_WIDTH; i++)
|
||||
{
|
||||
for (int j = 0; j < GRID_HEIGHT; j++)
|
||||
{
|
||||
glerminal_set(i, j, 0, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mainloop(float dt)
|
||||
{
|
||||
static float time = 1;
|
||||
static float time = 0;
|
||||
|
||||
time += dt;
|
||||
time = fmodf(time, 3.1415926f * 2);
|
||||
|
||||
if (time < 0.2f)
|
||||
for (int i = 0; i < GRID_WIDTH; i++)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
time = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 40; i++)
|
||||
{
|
||||
for (int j = 0; j < 25; j++)
|
||||
for (int j = 0; j < GRID_HEIGHT; j++)
|
||||
{
|
||||
for (int k = 0; k < 256; k++)
|
||||
{
|
||||
glerminal_set(i, j, k, rand() % 3 == 0);
|
||||
glerminal_offset(i, j, k, (rand() * rand()) % 64 - 32, (rand() * rand()) % 64 - 32);
|
||||
}
|
||||
glerminal_offset(i, j, 0, cosf(time - i / 3.1415f), sinf(time - j / 3.1415f));
|
||||
}
|
||||
}
|
||||
|
||||
|
3
examples/resources/rogue.png
Normal file
3
examples/resources/rogue.png
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8a4d4e778300d34287688779faefbff8114bf20fd3519368fe250b6f8d2c1313
|
||||
size 173
|
87
examples/rogue.cpp
Normal file
87
examples/rogue.cpp
Normal file
@@ -0,0 +1,87 @@
|
||||
#include <glerminal.h>
|
||||
|
||||
#include <cmath>
|
||||
|
||||
namespace
|
||||
{
|
||||
enum : unsigned char
|
||||
{
|
||||
empty,
|
||||
player,
|
||||
floor,
|
||||
wall
|
||||
};
|
||||
|
||||
constexpr unsigned int WALL_LAYERS = LAYER_COUNT - 1;
|
||||
|
||||
void init()
|
||||
{
|
||||
glerminal_load_sprites_file("resources/rogue.png");
|
||||
|
||||
for (int i = 0; i < WALL_LAYERS; i++)
|
||||
{
|
||||
const unsigned char v = (i + 1) * (256 / WALL_LAYERS) - 1;
|
||||
const unsigned int j = (0xFF << 24) | (v << 16) | (v << 8) | v;
|
||||
glerminal_layer_color(i, j);
|
||||
|
||||
glerminal_layer_scale(i, (i / static_cast<float>(WALL_LAYERS)) + 1);
|
||||
}
|
||||
|
||||
for (int i = 0; i < GRID_WIDTH; i++)
|
||||
{
|
||||
for (int j = 0; j < GRID_HEIGHT; j++)
|
||||
{
|
||||
for (int k = 0; k < WALL_LAYERS; k++)
|
||||
{
|
||||
if (i == 0 || j == 0 || i == GRID_WIDTH - 1 || j == GRID_HEIGHT - 1)
|
||||
{
|
||||
glerminal_set(i, j, k, floor);
|
||||
}
|
||||
else
|
||||
{
|
||||
glerminal_set(i, j, k, wall);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mainloop(float dt)
|
||||
{
|
||||
static float time = 0;
|
||||
time += dt;
|
||||
|
||||
const float cx = GRID_WIDTH / 2.0f * cosf(time / 2) + GRID_WIDTH / 2.0f;
|
||||
const float cy = GRID_HEIGHT / 2.0f * sinf(time / 2) + GRID_HEIGHT / 2.0f;
|
||||
|
||||
for (int i = 0; i < GRID_WIDTH; i++)
|
||||
{
|
||||
for (int j = 0; j < GRID_HEIGHT; j++)
|
||||
{
|
||||
for (int k = 0; k < WALL_LAYERS; k++)
|
||||
{
|
||||
const float dx = (i - cx);
|
||||
const float dy = (j - cy);
|
||||
const float dist = sqrtf(dx * dx + dy * dy);
|
||||
const float angle = atan2f(dy, dx);
|
||||
|
||||
const float ox = dist * k / WALL_LAYERS * cosf(angle);
|
||||
const float oy = dist * k / WALL_LAYERS * sinf(angle);
|
||||
|
||||
glerminal_offset(i, j, k, ox * 2, oy * 2);
|
||||
}
|
||||
|
||||
glerminal_set(i, j, WALL_LAYERS, empty);
|
||||
}
|
||||
}
|
||||
|
||||
glerminal_set(cx, cy, WALL_LAYERS, player);
|
||||
|
||||
glerminal_flush();
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
glerminal_run(init, mainloop);
|
||||
}
|
@@ -9,20 +9,20 @@ namespace
|
||||
{
|
||||
glerminal_load_sprites_file("resources/towers.png");
|
||||
|
||||
for (int i = 0; i < 256; i++)
|
||||
for (int i = 0; i < LAYER_COUNT; i++)
|
||||
{
|
||||
constexpr unsigned char c = 0;
|
||||
const unsigned char v = (255 - c) * powf((i - 1) / 256.0f, 2.0f) + c;
|
||||
const unsigned int j = (0x7F << 24) | (v << 16) | (v << 8) | v;
|
||||
constexpr unsigned char c = 16;
|
||||
const unsigned char v = (255 - c) * powf((256 / LAYER_COUNT * i - 1) / 256.0f, 2.0f) + c;
|
||||
const unsigned int j = (0xFF << 24) | (v << 16) | (v << 8) | v;
|
||||
glerminal_layer_color(i, j);
|
||||
glerminal_layer_scale(i, i / 256.0f + 1);
|
||||
glerminal_layer_scale(i, i / static_cast<float>(LAYER_COUNT) + 1);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 40; i++)
|
||||
for (int i = 0; i < GRID_WIDTH; i++)
|
||||
{
|
||||
for (int j = 0; j < 25; j++)
|
||||
for (int j = 0; j < GRID_HEIGHT; j++)
|
||||
{
|
||||
const int c = rand() % 224 + 32;
|
||||
const int c = rand() % (LAYER_COUNT * 3 / 4) + LAYER_COUNT / 4;
|
||||
for (int k = 0; k < c; k++)
|
||||
{
|
||||
glerminal_set(i, j, k, 1);
|
||||
@@ -37,18 +37,20 @@ namespace
|
||||
|
||||
time += dt;
|
||||
|
||||
const float cx = 20.0f * cosf(time / 3.1415f) + 20.0f;
|
||||
const float cy = 12.5f * sinf(time / 3.1415f) + 12.5f;
|
||||
const float cx = (GRID_WIDTH / 2.0f) * cosf(time / 3.1415f) + (GRID_WIDTH / 2.0f);
|
||||
const float cy = (GRID_HEIGHT / 2.0f) * sinf(time / 3.1415f) + (GRID_HEIGHT / 2.0f);
|
||||
|
||||
for (int i = 0; i < 40; i++)
|
||||
for (int i = 0; i < GRID_WIDTH; i++)
|
||||
{
|
||||
for (int j = 0; j < 25; j++)
|
||||
for (int j = 0; j < GRID_WIDTH; j++)
|
||||
{
|
||||
for (int k = 0; k < 256; k++)
|
||||
for (int k = 0; k < LAYER_COUNT; k++)
|
||||
{
|
||||
const float ox = 0.01f * k * (i - cx);
|
||||
const float oy = 0.01f * k * (j - cy);
|
||||
glerminal_offset(i, j, k, ox + (1 + 0.004f * k) * cosf(i + k * 6.2832f / 128.0f + 3.1415f * time), oy + (1 + 0.004f * k) * sinf(j + k * 6.2832f / 128.0f + 3.1415f * time));
|
||||
const float ox = (256.0f / LAYER_COUNT) * 0.0025f * k * (i - cx);
|
||||
const float oy = (256.0f / LAYER_COUNT) * 0.0025f * k * (j - cy);
|
||||
const float sx = (1 + (256.0f / LAYER_COUNT) * 0.002f * k) * cosf(i + k * 6.2832f / 128.0f + 3.1415f * time / 1.5f);
|
||||
const float sy = (1 + (256.0f / LAYER_COUNT) * 0.002f * k) * sinf(j + k * 6.2832f / 128.0f + 3.1415f * time / 1.5f);
|
||||
glerminal_offset(i, j, k, ox + sx, oy + sy);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user