Original Post
Before I can do anything more on my game, I need to get my collision code working.
My game is a lot like subspace: top down, rectangular tiles, asteroids style physics... However, I am having trouble with my collision code. The ships just don''t bounce off the tiles, or at least... they don''t bounce off in the right way.
I''m wondering if I''m going about it the right way, or if I''ve just messed up in my programming.
This is my code:
void Tile_Ship_Collide(int counter)
{
int count, count2, count3;
int tiletype;
int tiles_height = 8;
int tiles_width = 8;
int top_pos_x = Ships[counter].x / 16 - 4;
int top_pos_y = Ships[counter].y / 16 - 4;
int pos_x = top_pos_x * 16;
int pos_y = top_pos_y * 16;
int collx[8], colly[8];
collx[1] = Ships[counter].x - 12;
colly[1] = Ships[counter].y - 14;
collx[2] = Ships[counter].x + 12;
colly[2] = Ships[counter].y - 14;
collx[3] = Ships[counter].x + 14;
colly[3] = Ships[counter].y - 12;
collx[4] = Ships[counter].x + 14;
colly[4] = Ships[counter].y + 12;
collx[5] = Ships[counter].x + 12;
colly[5] = Ships[counter].y + 14;
collx[6] = Ships[counter].x - 12;
colly[6] = Ships[counter].y + 14;
collx[7] = Ships[counter].x - 14;
colly[7] = Ships[counter].y + 12;
collx[8] = Ships[counter].x - 14;
colly[8] = Ships[counter].y - 12;
for(count = 1; count < 9; count++)
Draw_Pixel(collx[count] - view_x, colly[count] - view_y, 125, back_buffer, back_lpitch);
for(count2 = top_pos_y; count2 < top_pos_y + tiles_height; count2++)
{
pos_x = top_pos_x * 16;
for(count = top_pos_x; count < top_pos_x + tiles_width; count++)
{
tiletype = abs(Walls[count][count2].type);
if(tiletype != 0)// && pos_x > -1 && pos_x < 1024 * map_size && pos_y > -1 && pos_y < 768 * map_size)
{//Check it against 8 points
if(collx[1] > pos_x && collx[1] < pos_x + 16 && colly[1] > pos_y && colly[1] < pos_y + 16)
Ships[counter].yv = 0 - (Ships[counter].yv);
if(collx[2] > pos_x && collx[2] < pos_x + 16 && colly[2] > pos_y && colly[3] < pos_y + 16)
Ships[counter].yv = 0 - (Ships[counter].yv);
if(collx[3] > pos_x && collx[3] < pos_x + 16 && colly[3] > pos_y && colly[3] < pos_y + 16)
Ships[counter].xv = 0 - (Ships[counter].xv);
if(collx[4] > pos_x && collx[4] < pos_x + 16 && colly[4] > pos_y && colly[4] < pos_y + 16)
Ships[counter].xv = 0 - (Ships[counter].xv);
if(collx[5] > pos_x && collx[5] < pos_x + 16 && colly[5] > pos_y && colly[5] < pos_y + 16)
Ships[counter].yv = 0 - (Ships[counter].yv);
if(collx[6] > pos_x && collx[6] < pos_x + 16 && colly[6] > pos_y && colly[6] < pos_y + 16)
Ships[counter].yv = 0 - (Ships[counter].yv);
if(collx[7] > pos_x && collx[7] < pos_x + 16 && colly[7] > pos_y && colly[7] < pos_y + 16)
Ships[counter].xv = 0 - (Ships[counter].xv);
if(collx[8] > pos_x && collx[8] < pos_x + 16 && colly[8] > pos_y && colly[8] < pos_y + 16)
Ships[counter].xv = 0 - (Ships[counter].xv);
}
pos_x += 16;
}
pos_y += 16;
}
}
Any help would be appreciated.