rendered paste body#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;
}
}
}
}