Add a couple more checks to the 3d collision detection, without

which a click miles above the invisible RH surface of a tower would
sometimes select that tower.

[originally from svn r8833]
This commit is contained in:
Simon Tatham
2010-01-12 18:34:06 +00:00
parent f3d39a0abb
commit 7aefa1110a

View File

@ -1290,10 +1290,11 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
(x - ox >= 0 && x - ox < TILESIZE && (x - ox >= 0 && x - ox < TILESIZE &&
y - oy >= 0 && y - oy < TILESIZE) || y - oy >= 0 && y - oy < TILESIZE) ||
/* in triangle between top-left corners? */ /* in triangle between top-left corners? */
(ox > bx && x >= bx && x <= ox && (ox > bx && x >= bx && x <= ox && y <= by &&
(by-y) * (ox-bx) <= (by-oy) * (x-bx)) || (by-y) * (ox-bx) <= (by-oy) * (x-bx)) ||
/* in triangle between bottom-right corners? */ /* in triangle between bottom-right corners? */
(ox > bx && x >= bx+TILESIZE && x <= ox+TILESIZE && (ox > bx && x >= bx+TILESIZE && x <= ox+TILESIZE &&
y >= oy+TILESIZE &&
(by-y+TILESIZE)*(ox-bx) >= (by-oy)*(x-bx-TILESIZE))) { (by-y+TILESIZE)*(ox-bx) >= (by-oy)*(x-bx-TILESIZE))) {
tx = cx; tx = cx;
ty = cy; ty = cy;