vec2f px_to_coords(platform_window* window, double x, double y); bool world_map_location_is_in_sun(vec2f px_pos); static void update_render_path(world* world, boat_route *route) { boat_route_point prev_point = route->points[route->current_point]; boat_route_point next_point = route->points[route->current_point + (route->reversed ? -1 : 1)]; float dist = sqrt(pow(prev_point.x - next_point.x, 2) + pow(prev_point.y - next_point.y, 2)); float time_between_points = (dist*1000000.0f); float percentage = route->current_point_duration/time_between_points; vec2f start_pos = {area.x/zoom + (prev_point.x*area.w), area.y/zoom + (prev_point.y*area.h)}; vec2f end_pos = {area.x/zoom + (next_point.x*area.w), area.y/zoom + (next_point.y*area.h)}; float currx = start_pos.x - (start_pos.x - end_pos.x)*percentage; float curry = start_pos.y - (start_pos.y - end_pos.y)*percentage; vec2f map_pos = {currx*zoom+camera_x, curry*zoom+camera_y}; float rad = atan2(end_pos.y-start_pos.y, end_pos.x-start_pos.x); gl_render_set_rotation(-rad); float boatsize = 3*zoom; renderer->render_image(img_boat, map_pos.x-boatsize/2, map_pos.y-boatsize/2, boatsize, boatsize); gl_render_set_rotation(0.0f); if (!world_map_location_is_in_sun(map_pos)) { float dotsize = 4*zoom; renderer->render_image_tint(img_locationdot, map_pos.x-dotsize/2, map_pos.y-dotsize/2, dotsize, dotsize, rgba(255,255,0,10)); } route->current_point_duration += (frame_delta*1000.0f)*world->simulation_speed; if (route->current_point_duration > time_between_points) { if (!route->reversed) route->current_point++; else route->current_point--; route->current_point_duration = 0; } if (!route->reversed && route->current_point >= route->count-1) route->reversed = true; if (route->reversed && route->current_point <= 0) route->reversed = false; } void update_render_scenery(world* world) { renderer->render_set_scissor(main_window, area.x,area.y,area.w,area.h); for (s32 i = 0; i < world->boat_routes.length; i++) { boat_route* route = array_at(&world->boat_routes, i); update_render_path(world, route); } renderer->render_reset_scissor(); #if 0 if (is_left_clicked()) { vec2f coords = px_to_coords(main_window, _global_mouse.x, _global_mouse.y); printf("Location: \"latitude\": %f, \"longitude\":%f\n", coords.y, coords.x); } #endif #if 0 static s32 count = 0; if (is_left_down() && count++ % 10 == 0) { printf("%f, %f,\n", (_global_mouse.x-area.x)/(float)area.w, (_global_mouse.y-area.y)/(float)area.h); } #endif }