Revision 1049
Robots now draw in correct location.
gtk_environment_view.c | ||
---|---|---|
367 | 367 |
double upy = world->win.p1.x; |
368 | 368 |
double xwidth = world->win.p2.x - leftx; |
369 | 369 |
double yheight = world->win.p2.y - upy; |
370 |
|
|
371 |
|
|
372 | 370 |
int width, height; |
373 | 371 |
gdk_drawable_get_size(drawable, &width, &height); |
374 |
|
|
375 | 372 |
if (xwidth / width < yheight / height) |
376 | 373 |
width = (int)(height / yheight * xwidth); |
377 | 374 |
else |
... | ... | |
412 | 409 |
} |
413 | 410 |
|
414 | 411 |
static void draw_robot(GdkDrawable* drawable, GdkGC* gc, |
415 |
float x, float y, float angle)
|
|
412 |
float x, float y, float angle) |
|
416 | 413 |
{ |
417 | 414 |
if (!drawable || !gc) |
418 | 415 |
return; |
416 |
|
|
417 |
double leftx = world.win.p1.x; |
|
418 |
double upy = world.win.p1.x; |
|
419 |
double xwidth = world.win.p2.x - leftx; |
|
420 |
double yheight = world.win.p2.y - upy; |
|
421 |
int width, height; |
|
422 |
gdk_drawable_get_size(drawable, &width, &height); |
|
423 |
if (xwidth / width < yheight / height) |
|
424 |
width = (int)(height / yheight * xwidth); |
|
425 |
else |
|
426 |
height = (int)(width / xwidth * yheight); |
|
427 |
|
|
428 |
x = ((x - leftx) / xwidth * width); |
|
429 |
y = ((y - upy) / yheight * height); |
|
419 | 430 |
int x_c = (int)x - ENVIRONMENT_ROBOT_DIAMETER / 2; |
420 | 431 |
int y_c = (int)y - ENVIRONMENT_ROBOT_DIAMETER / 2; |
421 | 432 |
|
... | ... | |
423 | 434 |
ENVIRONMENT_ROBOT_DIAMETER, ENVIRONMENT_ROBOT_DIAMETER, |
424 | 435 |
0, 360*64); |
425 | 436 |
|
437 |
//TODO: scale radius |
|
426 | 438 |
gdk_draw_line(drawable, gc, x, y, |
427 | 439 |
x + (ENVIRONMENT_ROBOT_DIAMETER - 10) * cos(-angle), |
428 | 440 |
y - (ENVIRONMENT_ROBOT_DIAMETER - 10) * sin(-angle)); |
Also available in: Unified diff