82 lines
2.8 KiB
Plaintext
82 lines
2.8 KiB
Plaintext
|
// terrain generation globals
|
||
|
|
||
|
int tg_cols, tg_rows;
|
||
|
int tg_scale = 40;
|
||
|
float tg_t = 0;
|
||
|
float[][] tg_grid;
|
||
|
float tg_speed;
|
||
|
float tg_height;
|
||
|
Star[] tg_stars = new Star[500];
|
||
|
int tg_starfield_speed = 1;
|
||
|
|
||
|
void midi_terrain_generation(int status, int chan, int value)
|
||
|
{
|
||
|
if (status == -80 && chan == 7)
|
||
|
tg_speed = float(value) / float(10);
|
||
|
if (status == -79 && chan == 7)
|
||
|
tg_height = (log(128) - log(128 - value)) * float(1000);
|
||
|
if (status == -78 && chan == 7)
|
||
|
tg_starfield_speed = 1 + value;
|
||
|
}
|
||
|
|
||
|
void setup_terrain_generation()
|
||
|
{
|
||
|
tg_cols = width / tg_scale;
|
||
|
tg_rows = height / tg_scale;
|
||
|
tg_grid = new float[tg_cols + 200][tg_rows + 100];
|
||
|
for (int y = -100; y < tg_rows; y++)
|
||
|
for (int x = -100; x < tg_cols + 100; x++)
|
||
|
{
|
||
|
if (x < width/2 - 100 || x > width / 2 + 100)
|
||
|
tg_grid[x + 100][y + 100] = noise(float(x) / 5, float(y) / 5) * 1000;
|
||
|
else
|
||
|
tg_grid[x + 100][y + 100] = 0;
|
||
|
}
|
||
|
tg_setup_star();
|
||
|
}
|
||
|
|
||
|
void draw_terrain_generation()
|
||
|
{
|
||
|
background(0);
|
||
|
stroke(255, 0, 128);
|
||
|
fill(255, 0, 128);
|
||
|
noFill();
|
||
|
pushMatrix();
|
||
|
translate(0, height /2 + tg_height);
|
||
|
|
||
|
if (tg_height < 4000)
|
||
|
{
|
||
|
pushMatrix();
|
||
|
rotateX(PI / 3);
|
||
|
for (int y = -100; y < tg_rows - 1; y++)
|
||
|
{
|
||
|
beginShape(TRIANGLE_STRIP);
|
||
|
for (int x = -100; x < tg_cols + 100; x++)
|
||
|
{
|
||
|
strokeWeight(1);
|
||
|
if ((x < tg_cols/2 - 4 || x > tg_cols / 2 + 4))
|
||
|
{
|
||
|
stroke(100 * 255 / tg_grid[x + 100][y + 100], 0, 100 * 128 / tg_grid[x + 100][y + 100] + abs(tg_t % 512 - 255));
|
||
|
vertex(x * tg_scale, y * tg_scale, tg_grid[x + 100][y + 100]);
|
||
|
stroke(100 * 255 / tg_grid[x + 100][y + 100], 0, 100 * 128 / tg_grid[x + 100][y + 1 + 100] + abs(tg_t % 512 - 255));
|
||
|
vertex(x * tg_scale,(y + 1) * tg_scale, tg_grid[x + 100][y + 1 + 100]);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
stroke(0, 100 * 255 / tg_grid[x + 100][y + 100], 100 * 128 / tg_grid[x + 100][y + 100] + abs(tg_t % 512 - 255));
|
||
|
vertex(x * tg_scale, y * tg_scale, 0);
|
||
|
stroke(0, 100 * 255 / tg_grid[x + 100][y + 100], 100 * 128 / tg_grid[x + 100][y + 1 + 100] + abs(tg_t % 512 - 255));
|
||
|
vertex(x * tg_scale,(y + 1) * tg_scale, 0);
|
||
|
}
|
||
|
tg_grid[x + 100][y + 100] = noise((float(x)) / 5, (y + tg_t) / 5) * 300;
|
||
|
}
|
||
|
endShape();
|
||
|
}
|
||
|
popMatrix();
|
||
|
}
|
||
|
translate(0, -height * 7.5);
|
||
|
tg_manage_star();
|
||
|
popMatrix();
|
||
|
tg_t -= tg_speed;
|
||
|
}
|