#include "model.h" #define MOVE 15.0f #define MOVE_EDGES 25.0f #define NUM_WAVES 1 Bool up; int stop; void initAnimation(Model* model) { /*model->object[0][0].position.x -= MOVE_EDGES; model->object[0][0].position.y -= MOVE_EDGES; model->object[0][0].prevPosition.x -= MOVE_EDGES; model->object[0][0].prevPosition.y -= MOVE_EDGES; model->object[0][0].anchor = TRUE; model->object[GRID_WIDTH - 1][0].position.x += MOVE_EDGES; model->object[GRID_WIDTH - 1][0].position.y -= MOVE_EDGES; model->object[GRID_WIDTH - 1][0].prevPosition.x += MOVE_EDGES; model->object[GRID_WIDTH - 1][0].prevPosition.y -= MOVE_EDGES; model->object[GRID_WIDTH - 1][0].anchor = TRUE; model->object[GRID_WIDTH - 1][GRID_HEIGHT - 1].position.x += MOVE_EDGES; model->object[GRID_WIDTH - 1][GRID_HEIGHT - 1].position.y += MOVE_EDGES; model->object[GRID_WIDTH - 1][GRID_HEIGHT - 1].prevPosition.x += MOVE_EDGES; model->object[GRID_WIDTH - 1][GRID_HEIGHT - 1].prevPosition.y += MOVE_EDGES; model->object[GRID_WIDTH - 1][GRID_HEIGHT - 1].anchor = TRUE; model->object[0][GRID_HEIGHT - 1].position.x -= MOVE_EDGES; model->object[0][GRID_HEIGHT - 1].position.y += MOVE_EDGES; model->object[0][GRID_HEIGHT - 1].prevPosition.x -= MOVE_EDGES; model->object[0][GRID_HEIGHT - 1].prevPosition.y += MOVE_EDGES; model->object[0][GRID_HEIGHT - 1].anchor = TRUE;*/ int j; for (j = 0; j < GRID_HEIGHT; j++) { model->object[0][j].anchor = TRUE; model->object[GRID_WIDTH - 1][j]. anchor = TRUE; } up = TRUE; stop = 0; } void stepAnimation(Model* model) { int j; Bool changeDirection = FALSE, wave = FALSE; float move, maxMove; if (stop >= NUM_WAVES) return; for (j = 0; j < GRID_HEIGHT; j++) { move = MOVE * (2 * j - GRID_HEIGHT) / GRID_HEIGHT; maxMove = 1.0f * POSITION_RANGE * (2 * j - GRID_HEIGHT) / GRID_HEIGHT; if (!up) maxMove *= -1; if (up) model->object[0][j].position.z += move; else model->object[0][j].position.z -= move; if ((!up && move < 0.0f) || (up && move > 0.0f)) { if (model->object[0][j].position.z > maxMove) { model->object[0][j].position.z = maxMove; changeDirection = TRUE; } } else { if (model->object[0][j].position.z < maxMove) { model->object[0][j].position.z = maxMove; changeDirection = TRUE; } if (model->object[0][j].position.z > move / 2 && model->object[0][j].position.z < -move / 2) wave = TRUE; } if (move > 0.0f) { if (model->object[0][j].position.z < move / 2 && model->object[0][j].position.z > -move / 2) wave = TRUE; } else { if (model->object[0][j].position.z > move / 2 && model->object[0][j].position.z < -move / 2) wave = TRUE; } } for (j = 0; j < GRID_HEIGHT; j++) { move = MOVE * (2 * j - GRID_HEIGHT) / GRID_HEIGHT; maxMove = 1.0f * POSITION_RANGE * (2 * j - GRID_HEIGHT) / GRID_HEIGHT; if (up) maxMove *= -1; if (!up) model->object[GRID_WIDTH - 1][j].position.z += move; else model->object[GRID_WIDTH - 1][j].position.z -= move; if ((!up && move > 0.0f) || (up && move < 0.0f)) { if (model->object[GRID_WIDTH - 1][j].position.z > maxMove) { model->object[GRID_WIDTH - 1][j].position.z = maxMove; changeDirection = TRUE; } } else { if (model->object[GRID_WIDTH - 1][j].position.z < maxMove) { model->object[GRID_WIDTH - 1][j].position.z = maxMove; changeDirection = TRUE; } } if (move > 0.0f) { if (model->object[0][j].position.z < move / 2 && model->object[0][j].position.z > -move / 2) wave = TRUE; } else { if (model->object[0][j].position.z > move / 2 && model->object[0][j].position.z < -move / 2) wave = TRUE; } } if (changeDirection && up) up = FALSE; else if (changeDirection && !up) up = TRUE; if (wave) { stop++; if (stop >= NUM_WAVES) { for (j = 0; j < GRID_HEIGHT; j++) { model->object[0][j].anchor = FALSE; model->object[GRID_WIDTH - 1][j].anchor = FALSE; } } } }