Blame simple/world-gen/main.c

Ivan Mahonin 878d83
Ivan Mahonin 878d83
#include <math.h>
Ivan Mahonin 878d83
#include <stdio.h>
Ivan Mahonin 878d83
#include <stdlib.h>
Ivan Mahonin 878d83
#include <string.h>
Ivan Mahonin 878d83
Ivan Mahonin 878d83
#define GL_GLEXT_PROTOTYPES
Ivan Mahonin 878d83
#include <GL/gl.h>
Ivan Mahonin 878d83
#include <GL/glext.h>
Ivan Mahonin 878d83
#include <GL/glu.h>
Ivan Mahonin 878d83
Ivan Mahonin 878d83
#include <helianthus.h>
Ivan Mahonin 878d83
Ivan Mahonin 878d83
Ivan Mahonin 878d83
#include "gl3d.inc.c"
Ivan Mahonin 878d83
#include "hmap.inc.c"
Ivan Mahonin 878d83
#include "water.inc.c"
Ivan Mahonin 878d83
Ivan Mahonin 878d83
Ivan Mahonin 878d83
double mx, my;
Ivan Mahonin 878d83
HMap hmap, wmap;
Ivan Mahonin 878d83
Water water;
Ivan Mahonin 878d83
Ivan Mahonin 878d83
Ivan Mahonin 878d83
void generate() {
Ivan Mahonin 878d83
  hmapGenerate(&hmap);
Ivan Mahonin 878d83
  for(int i = 0; i < HMAP_SIZE; ++i)
Ivan Mahonin 878d83
    for(int j = 0; j < HMAP_SIZE; ++j)
Ivan Mahonin 878d83
      wmap.map[i][j] = hmap.map[i][j] + 0.1;
Ivan Mahonin 878d83
  for(int i = 0; i < 100; ++i)
Ivan Mahonin 878d83
    waterCycle(&water, 1, 0.8, 0.0);
Ivan Mahonin 878d83
  hmapCalcNormals(&hmap);
Ivan Mahonin 878d83
  hmapCalcNormals(&wmap);
Ivan Mahonin 878d83
  hmapBuildBuf(&hmap);
Ivan Mahonin 878d83
  hmapBuildBuf(&wmap);
Ivan Mahonin 878d83
}
Ivan Mahonin 878d83
Ivan Mahonin 878d83
Ivan Mahonin 878d83
void init() {
Ivan Mahonin 878d83
  hmapInit(&hmap, 1, 1, 1, 1, 1, 1);
Ivan Mahonin 878d83
  hmapInit(&wmap, 1, 1, 0, 0, 1, 0.25);
Ivan Mahonin 878d83
  waterInit(&water, &hmap, &wmap);
Ivan Mahonin 878d83
  generate();
Ivan Mahonin 878d83
Ivan Mahonin 878d83
  background(COLOR_BLACK);
Ivan Mahonin 878d83
}
Ivan Mahonin 878d83
Ivan Mahonin 878d83
Ivan Mahonin 878d83
void deinit() {
Ivan Mahonin 878d83
  hmapDeinit(&hmap);
Ivan Mahonin 878d83
  hmapDeinit(&wmap);
Ivan Mahonin 878d83
}
Ivan Mahonin 878d83
Ivan Mahonin 878d83
Ivan Mahonin 878d83
void draw() {
Ivan Mahonin 878d83
  double pmx = mx, pmy = my;
Ivan Mahonin 878d83
  mx = mouseX();
Ivan Mahonin 878d83
  my = mouseY();
Ivan Mahonin 878d83
  double dmx = mx - pmx;
Ivan Mahonin 878d83
  double dmy = my - pmy;
Ivan Mahonin 878d83
Ivan Mahonin 878d83
  if (keyWentDown("space"))
Ivan Mahonin 878d83
    generate();
Ivan Mahonin 878d83
Ivan Mahonin 878d83
  if (mouseDown("left")) {
Ivan Mahonin 878d83
    cameraRot[1] += dmx;
Ivan Mahonin 878d83
    cameraRot[0] += dmy;
Ivan Mahonin 878d83
  }
Ivan Mahonin 878d83
Ivan Mahonin 878d83
  if (mouseDown("right")) {
Ivan Mahonin 878d83
    cameraPos[2] *= pow(1.01, dmy);
Ivan Mahonin 878d83
    if (cameraPos[2] > -2) cameraPos[2] = -2;
Ivan Mahonin 878d83
  }
Ivan Mahonin 878d83
Ivan Mahonin 878d83
  begin3d();
Ivan Mahonin 878d83
  cubeDraw(1);
Ivan Mahonin 878d83
  hmapDraw(&hmap);
Ivan Mahonin 878d83
Ivan Mahonin 878d83
  glDepthMask(GL_FALSE);
Ivan Mahonin 878d83
  glPushMatrix();
Ivan Mahonin 878d83
  glTranslated(0, 0, -0.01);
Ivan Mahonin 878d83
  for(int i = 0; i < 1; ++i) {
Ivan Mahonin 878d83
    hmapDraw(&wmap);
Ivan Mahonin 878d83
    glTranslated(0, 0, 0.5);
Ivan Mahonin 878d83
  }
Ivan Mahonin 878d83
  glPopMatrix();
Ivan Mahonin 878d83
  glDepthMask(GL_TRUE);
Ivan Mahonin 878d83
Ivan Mahonin 878d83
  end3d();
Ivan Mahonin 878d83
}
Ivan Mahonin 878d83
Ivan Mahonin 878d83
Ivan Mahonin 878d83
int main() {
Ivan Mahonin 878d83
  windowSetResizable(TRUE);
Ivan Mahonin 878d83
  windowSetVariableFrameRate();
Ivan Mahonin 878d83
  windowSetInit(&init);
Ivan Mahonin 878d83
  windowSetDeinit(&deinit);
Ivan Mahonin 878d83
  windowSetDraw(&draw);
Ivan Mahonin 878d83
  windowRun();
Ivan Mahonin 878d83
  return 0;
Ivan Mahonin 878d83
}