Revenge of the Mouse
Dependencies: 4DGL-uLCD-SE EthernetInterface Game_Synchronizer LCD_fonts MMA8452 SDFileSystem mbed-rtos mbed wave_player
Fork of 2035_Tanks_Shell by
Diff: bullet.cpp
- Revision:
- 15:4b27a3a95772
diff -r 36c306e26317 -r 4b27a3a95772 bullet.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bullet.cpp Mon Oct 26 04:12:35 2015 +0000 @@ -0,0 +1,55 @@ +#include "bullet.h" +#include "game_synchronizer.h" +#include "globals.h" +#include "math.h" + +extern Game_Synchronizer sync; + +Bullet::Bullet(Tank* t) { + tank = t; + speed = 30; + in_flight = false; +} +void Bullet::shoot(void) { + if(in_flight) {return;} + time = 0; + tank->barrel_end(x0, y0); + x = x0; y = y0; + vx0 = speed*cos(tank->barrel_theta); + vy0 = speed*sin(tank->barrel_theta); + in_flight = true; +} + +int Bullet::time_step(float dt) { + if(!in_flight) {return 0;} + time += dt; + int new_x = x0 + vx0*time; + int new_y = y0 + vy0*time + 0.5*(-9.81)*time*time; + + if(new_x == x && new_y == y) { // Didn't move! + return 0; + } + + if(new_x < 0 || new_x > 128 || new_y < 0 || new_y > 128) { + in_flight = false; + return 0; + } + + int col = sync.read_pixel(new_x, new_y); + if(col != CONVERT_24_TO_16_BPP(SKY_COLOR)) { + sync.pixel(x, y, SKY_COLOR); + sync.filled_circle(new_x, new_y, 4, SKY_COLOR); + in_flight = false; + + if(col == CONVERT_24_TO_16_BPP(TANK_BLUE)) { + return 1; + } + return 0; + } + sync.pixel(x, y, SKY_COLOR); + + x = new_x; + y = new_y; + sync.pixel(x, y, BLACK); + return 0; +}