18,11 → 18,11 |
|
/** |
------------ |
CVS : $Id: ball.c,v 1.2 2003-05-01 19:43:16 pj Exp $ |
CVS : $Id: ball.c,v 1.3 2003-05-05 09:21:55 pj Exp $ |
|
File: $File$ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2003-05-01 19:43:16 $ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-05-05 09:21:55 $ |
------------ |
**/ |
|
46,7 → 46,7 |
*/ |
|
/*--------------------------------------------------------------*/ |
/* SIMULATION OF JUMPING BALLS */ |
/* SIMULATION OF JUMPING BALLS */ |
/*--------------------------------------------------------------*/ |
|
#include "demo.h" |
53,25 → 53,35 |
#include <kernel/func.h> |
#include <stdlib.h> |
|
#define R 8 /* dimension of a ball */ |
#define G 9.8 /* acceleration of gravity */ |
#define R 8 /* dimension of a ball */ |
#define G 9.8 /* acceleration of gravity */ |
|
static int ballexit = 0; |
static int npc = 0; /* number of tasks created */ |
static int npc = 0; /* number of tasks created */ |
|
/*--------------------------------------------------------------*/ |
/* Periodic task for ball simulation */ |
/* Delay function for jumping balls */ |
/*--------------------------------------------------------------*/ |
|
TASK palla(int i) |
void my_delay(void) |
{ |
int x, y; /* coordinate grafiche pallina */ |
int ox, oy; /* vecchia posizione pallina */ |
int x0, y0; /* posizione iniziale X pallina */ |
float vx, vy; /* velocitÂ… della pallina */ |
int xxx; |
for (xxx=0; xxx<BALL_DELAY; xxx++); |
} |
|
/*--------------------------------------------------------------*/ |
/* Periodic task for ball simulation */ |
/*--------------------------------------------------------------*/ |
|
TASK palla(int i) |
{ |
int x, y; /* coordinate grafiche pallina */ |
int ox, oy; /* vecchia posizione pallina */ |
int x0, y0; /* posizione iniziale X pallina */ |
float vx, vy; /* velocitÂ… della pallina */ |
float vy0; /* velocita' pallina al primo rimbalzo */ |
float ty, tx; /* variabile temporale */ |
float dt; /* incremento temporale */ |
float ty, tx; /* variabile temporale */ |
float dt; /* incremento temporale */ |
|
y = oy = y0 = BALL_HEIGHT; |
x = ox = x0 = BALL_XMIN; |
88,17 → 98,17 |
x = x0 + vx * tx; |
|
if (y < 0) { |
y = 0; |
y = 0; |
|
if (vy == 0.0) |
vy = vy0; |
else if (vy < BALL_VYMIN) |
vy = vy0 * (1.0 - myrand(50)/100.0); |
else |
vy = 0.9 * vy; |
if (vy == 0.0) |
vy = vy0; |
else if (vy < BALL_VYMIN) |
vy = vy0 * (1.0 - myrand(50)/100.0); |
else |
vy = 0.9 * vy; |
|
ty = 0.0; |
y0 = 0; |
y0 = 0; |
} |
|
if (x > BALL_XMAX) { |
117,23 → 127,21 |
|
mutex_lock(&mutex); |
grx_disc(ox, oy, R, 0); |
ox = x; |
oy = BALL_Y - y; |
ox = x; |
oy = BALL_Y - y; |
mutex_unlock(&mutex); |
|
if (ballexit && i!=0xFFFF) { |
npc--; |
return 0; |
} |
if (ballexit && i!=0xFFFF) { |
npc--; |
return 0; |
} |
|
mutex_lock(&mutex); |
grx_disc(ox, oy, R, i); |
mutex_unlock(&mutex); |
|
{ |
int xxx; |
for (xxx=0; xxx<10000; xxx++); |
} |
my_delay(); |
|
ty += dt; |
tx += dt; |
task_endcycle(); |
205,7 → 213,7 |
|
|
/*--------------------------------------------------------------*/ |
/* MAIN process */ |
/* MAIN process */ |
/*--------------------------------------------------------------*/ |
|
void scenario_ball() |
215,7 → 223,7 |
//grx_line(0,BALL_Y-BALL_HEIGHT-6,383,BALL_Y-BALL_HEIGHT-6,red); |
|
grx_rect(BALL_XMIN-R-1, BALL_Y-BALL_HEIGHT-R-1, |
BALL_XMAX+R+1, BALL_Y+R+1, rgb16(0,200,0)); |
BALL_XMAX+R+1, BALL_Y+R+1, rgb16(0,200,0)); |
} |
|
void init_ball(void) |