remove procgen, use stb_perlin
This commit is contained in:
parent
6ec72db2d4
commit
14a9915ce9
@ -48,7 +48,6 @@ set(TOWNENGINE_SOURCE_FILES
|
|||||||
townengine/text.c townengine/text.h
|
townengine/text.c townengine/text.h
|
||||||
townengine/camera.c townengine/camera.h
|
townengine/camera.c townengine/camera.h
|
||||||
townengine/textures/textures.c
|
townengine/textures/textures.c
|
||||||
townengine/procgen/perlin2d.c
|
|
||||||
|
|
||||||
${SYSTEM_SOURCE_FILES}
|
${SYSTEM_SOURCE_FILES}
|
||||||
)
|
)
|
||||||
|
@ -44,7 +44,7 @@ void game_tick(void) {
|
|||||||
input_bind_action_scancode(&ctx.input, "ui_accept", SDL_SCANCODE_RETURN);
|
input_bind_action_scancode(&ctx.input, "ui_accept", SDL_SCANCODE_RETURN);
|
||||||
|
|
||||||
input_add_action(&ctx.input, "mouse_capture_toggle");
|
input_add_action(&ctx.input, "mouse_capture_toggle");
|
||||||
input_bind_action_scancode(&ctx.input, "mouse_capture_toggle", SDL_SCANCODE_END);
|
input_bind_action_scancode(&ctx.input, "mouse_capture_toggle", SDL_SCANCODE_ESCAPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct state *state = ctx.udata;
|
struct state *state = ctx.udata;
|
||||||
|
@ -3,6 +3,10 @@
|
|||||||
#include "scene.h"
|
#include "scene.h"
|
||||||
|
|
||||||
#include "townengine/game_api.h"
|
#include "townengine/game_api.h"
|
||||||
|
#include "townengine/tabela.h"
|
||||||
|
|
||||||
|
#define STB_PERLIN_IMPLEMENTATION
|
||||||
|
#include <stb_perlin.h>
|
||||||
|
|
||||||
|
|
||||||
static void ingame_tick(struct state *state) {
|
static void ingame_tick(struct state *state) {
|
||||||
@ -82,12 +86,14 @@ static void ingame_tick(struct state *state) {
|
|||||||
|
|
||||||
set_camera(&cam);
|
set_camera(&cam);
|
||||||
|
|
||||||
for (int y = 64; y--;)
|
#define TERRAIN_FREQUENCY 0.1f
|
||||||
|
|
||||||
|
for (int y = 64; y--;) {
|
||||||
for (int x = 64; x--;) {
|
for (int x = 64; x--;) {
|
||||||
float d0 = sample_perlin_2d((t_fvec2){x, y}, 0.2, 5) * 8 - 6;
|
float d0 = stb_perlin_noise3((float)x * TERRAIN_FREQUENCY, (float)y * TERRAIN_FREQUENCY, 0, 0, 0, 0) * 10 - 6;
|
||||||
float d1 = sample_perlin_2d((t_fvec2){x + 1, y}, 0.2, 5) * 8 - 6;
|
float d1 = stb_perlin_noise3((float)(x + 1) * TERRAIN_FREQUENCY, (float)y * TERRAIN_FREQUENCY, 0, 0, 0, 0) * 10 - 6;
|
||||||
float d2 = sample_perlin_2d((t_fvec2){x + 1, y - 1}, 0.2, 5) * 8 - 6;
|
float d2 = stb_perlin_noise3((float)(x + 1) * TERRAIN_FREQUENCY, (float)(y - 1) * TERRAIN_FREQUENCY, 0, 0, 0, 0) * 10 - 6;
|
||||||
float d3 = sample_perlin_2d((t_fvec2){x, y - 1}, 0.2, 5) * 8 - 6;
|
float d3 = stb_perlin_noise3((float)x * TERRAIN_FREQUENCY, (float)(y - 1) * TERRAIN_FREQUENCY, 0, 0, 0, 0) * 10 - 6;
|
||||||
|
|
||||||
unfurl_triangle("/assets/grass.gif",
|
unfurl_triangle("/assets/grass.gif",
|
||||||
(t_fvec3){ x, d0, y },
|
(t_fvec3){ x, d0, y },
|
||||||
@ -106,6 +112,7 @@ static void ingame_tick(struct state *state) {
|
|||||||
(t_shvec2){ 0, 768 });
|
(t_shvec2){ 0, 768 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void ingame_end(struct state *state) {
|
static void ingame_end(struct state *state) {
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#include "rendering.h"
|
#include "rendering.h"
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "procgen.h"
|
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
|
|
||||||
/* application provided */
|
/* application provided */
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
#ifndef PROCGEN_H
|
|
||||||
#define PROCGEN_H
|
|
||||||
|
|
||||||
#include "procgen/perlin.h"
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,10 +0,0 @@
|
|||||||
#ifndef PROCGEN_PERLIN_H
|
|
||||||
#define PROCGEN_PERLIN_H
|
|
||||||
|
|
||||||
#include "../vec.h"
|
|
||||||
|
|
||||||
void set_perlin_2d_seed(uint32_t seed);
|
|
||||||
|
|
||||||
float sample_perlin_2d(t_fvec2 position, float frequency, uint8_t octaves);
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,70 +0,0 @@
|
|||||||
#include "perlin.h"
|
|
||||||
#include "../vec.h"
|
|
||||||
|
|
||||||
static uint32_t seed = 0;
|
|
||||||
|
|
||||||
static const uint8_t hash[] = { 208,34,231,213,32,248,233,56,161,78,24,140,71,48,140,254,245,255,247,247,40,
|
|
||||||
185,248,251,245,28,124,204,204,76,36,1,107,28,234,163,202,224,245,128,167,204,
|
|
||||||
9,92,217,54,239,174,173,102,193,189,190,121,100,108,167,44,43,77,180,204,8,81,
|
|
||||||
70,223,11,38,24,254,210,210,177,32,81,195,243,125,8,169,112,32,97,53,195,13,
|
|
||||||
203,9,47,104,125,117,114,124,165,203,181,235,193,206,70,180,174,0,167,181,41,
|
|
||||||
164,30,116,127,198,245,146,87,224,149,206,57,4,192,210,65,210,129,240,178,105,
|
|
||||||
228,108,245,148,140,40,35,195,38,58,65,207,215,253,65,85,208,76,62,3,237,55,89,
|
|
||||||
232,50,217,64,244,157,199,121,252,90,17,212,203,149,152,140,187,234,177,73,174,
|
|
||||||
193,100,192,143,97,53,145,135,19,103,13,90,135,151,199,91,239,247,33,39,145,
|
|
||||||
101,120,99,3,186,86,99,41,237,203,111,79,220,135,158,42,30,154,120,67,87,167,
|
|
||||||
135,176,183,191,253,115,184,21,233,58,129,233,142,39,128,211,118,137,139,255,
|
|
||||||
114,20,218,113,154,27,127,246,250,1,8,198,250,209,92,222,173,21,88,102,219 };
|
|
||||||
|
|
||||||
void set_perlin_2d_seed(uint32_t s) {
|
|
||||||
seed = s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t noise2(int x, int y)
|
|
||||||
{
|
|
||||||
int tmp = hash[(y + seed) % 256];
|
|
||||||
return hash[(tmp + x) % 256];
|
|
||||||
}
|
|
||||||
|
|
||||||
static float lin_inter(float x, float y, float s)
|
|
||||||
{
|
|
||||||
return x + s * (y-x);
|
|
||||||
}
|
|
||||||
|
|
||||||
static float smooth_inter(float x, float y, float s)
|
|
||||||
{
|
|
||||||
return lin_inter(x, y, s * s * (3-2*s));
|
|
||||||
}
|
|
||||||
|
|
||||||
static float noise2d(float x, float y)
|
|
||||||
{
|
|
||||||
int32_t x_int = (int32_t)x;
|
|
||||||
int32_t y_int = (int32_t)y;
|
|
||||||
float x_frac = x - (float)x_int;
|
|
||||||
float y_frac = y - (float)y_int;
|
|
||||||
int32_t s = noise2(x_int, y_int);
|
|
||||||
int32_t t = noise2(x_int + 1, y_int);
|
|
||||||
int32_t u = noise2(x_int, y_int + 1);
|
|
||||||
int v = noise2(x_int + 1, y_int + 1);
|
|
||||||
float low = smooth_inter((float)s, (float)t, x_frac);
|
|
||||||
float high = smooth_inter((float)u, (float)v, x_frac);
|
|
||||||
return smooth_inter(low, high, y_frac);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* https://gist.github.com/nowl/828013 */
|
|
||||||
float sample_perlin_2d(t_fvec2 position, float frequency, uint8_t octaves) {
|
|
||||||
t_fvec2 a = m_vec_scale(position, frequency);
|
|
||||||
float amp = 1.0;
|
|
||||||
float fin = 0;
|
|
||||||
float div = 0.0;
|
|
||||||
|
|
||||||
for(uint8_t i = 0; i < octaves; i++)
|
|
||||||
{
|
|
||||||
div += 256 * amp;
|
|
||||||
fin += noise2d(a.x, a.y) * amp;
|
|
||||||
amp /= 2;
|
|
||||||
a = m_vec_scale(a, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
return fin/div;
|
|
||||||
}
|
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef UTIL_H
|
#ifndef UTIL_H
|
||||||
#define UTIL_H
|
#define UTIL_H
|
||||||
|
|
||||||
#include "vec.h"
|
#include "townengine/vec.h"
|
||||||
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <physfs.h>
|
#include <physfs.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user