Fix bug in update

This commit is contained in:
shylie 2026-04-18 12:21:04 -04:00
parent f9caf21322
commit ec5c6b2bec
2 changed files with 35 additions and 15 deletions

View File

@ -7,29 +7,46 @@
#include <SDL3/SDL_video.h>
#include <sand.h>
constexpr uint16_t WIDTH = 128;
constexpr uint16_t HEIGHT = 128;
constexpr uint16_t WIDTH = 256;
constexpr uint16_t HEIGHT = 256;
constexpr int WINDOW_WIDTH = 1024;
constexpr int WINDOW_HEIGHT = 1024;
uint8_t lookup[][3]
= { { 0, 0, 0 }, { 50, 0, 0 }, { 100, 100, 100 }, { 200, 200, 200 } };
= { { 0, 0, 0 }, { 50, 0, 0 }, { 100, 100, 100 }, { 100, 100, 100 } };
int main(int argc, char** argv)
{
auto rb = sand::TypeBuilder()
.add_type("offgrid")
.add_type("air")
.add_type("stone1")
.add_type("stone2")
.add_type("stone1", "stone2")
.add_type("stone2", "stone1")
.finish();
rb.add_rule("air", "stone1")
rb.add_rule("air", "stone2")
.top_middle([](const auto& t) { return t == "stone1"; });
rb.add_rule("air", "stone1")
.top_middle([](const auto& t) { return t == "stone2"; });
rb.add_rule("air", "stone2")
.top_right([](const auto& t) { return t == "stone1"; })
.middle_right([](const auto& t) { return t != "air"; });
rb.add_rule("air", "stone1")
.top_left([](const auto& t) { return t == "stone2"; })
.middle_left([](const auto& t) { return t != "air"; });
rb.add_rule("stone1", "air")
.bottom_middle([](const auto& t) { return t == "air"; });
rb.add_rule("stone1", "air")
.bottom_left([](const auto& t) { return t == "air"; })
.bottom_middle([](const auto& t) { return t != "air"; });
rb.add_rule("stone2", "air")
.bottom_middle([](const auto& t) { return t == "air"; });
rb.add_rule("stone2", "air")
.bottom_right([](const auto& t) { return t == "air"; })
.bottom_middle([](const auto& t) { return t != "air"; });
auto s = rb.build(WIDTH, HEIGHT, "air");
@ -60,17 +77,22 @@ int main(int argc, char** argv)
float x, y;
int state;
if (time > 0.008 && (state = SDL_GetMouseState(&x, &y)))
if (time > 1 / 1000.0f)
{
time = 0;
s.update();
if ((state = SDL_GetMouseState(&x, &y)))
{
int ix = x * WIDTH / WINDOW_WIDTH;
int iy = y * HEIGHT / WINDOW_HEIGHT;
if (ix >= 0 && ix < WIDTH && iy >= 0 && iy < HEIGHT)
{
time = 0;
s.set(ix, iy, state == 1 ? "stone1" : "stone2");
}
}
}
SDL_LockSurface(surface);
for (int i = 0; i < WIDTH; i++)
@ -85,8 +107,6 @@ int main(int argc, char** argv)
SDL_BlitSurfaceScaled(surface, nullptr, SDL_GetWindowSurface(window),
nullptr, SDL_SCALEMODE_NEAREST);
SDL_UpdateWindowSurface(window);
s.update();
}
SDL_DestroySurface(surface);

View File

@ -291,7 +291,7 @@ void Sand::update()
if (i < width - 1 && j > 0)
{
neighbors += get(i + 1, j);
neighbors += get(i + 1, j - 1);
}
neighbors <<= 16;