All pastes #468725 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-05-03 09:47 UTC
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;
			}
		}
	}
}