Fix nan error on fcam for picking npcs

main
parent 59de84431c
commit 01bbe6a244

@ -6995,36 +6995,39 @@ ISANERROR("Don't know how to do this stuff on this platform.")
draw_quad((DrawParams){quad_at(V2(0.0, screen_size().y/2.0f), MulV2F(screen_size(), 0.1f)), IMG(state.outline_pass_image), WHITE, .layer = LAYER_UI_FG}); draw_quad((DrawParams){quad_at(V2(0.0, screen_size().y/2.0f), MulV2F(screen_size(), 0.1f)), IMG(state.outline_pass_image), WHITE, .layer = LAYER_UI_FG});
Vec3 view_cam_pos = MulM4V4(InvGeneralM4(view), V4(0,0,0,1)).xyz; Vec3 view_cam_pos = MulM4V4(InvGeneralM4(view), V4(0,0,0,1)).xyz;
Vec3 world_mouse = screenspace_point_to_camera_point(mouse_pos); if(view_cam_pos.y >= 0.050f) // causes nan if not true... not good...
Vec3 mouse_ray = NormV3(SubV3(world_mouse, view_cam_pos));
Vec3 marker = ray_intersect_plane(view_cam_pos, mouse_ray, V3(0,0,0), V3(0,1,0));
Vec2 mouse_on_floor = point_plane(marker);
Overlapping mouse_over = get_overlapping(aabb_centered(mouse_on_floor, V2(1,1)));
BUFF_ITER(Entity*, &mouse_over)
{ {
dbgcol(PINK) Vec3 world_mouse = screenspace_point_to_camera_point(mouse_pos);
Vec3 mouse_ray = NormV3(SubV3(world_mouse, view_cam_pos));
Vec3 marker = ray_intersect_plane(view_cam_pos, mouse_ray, V3(0,0,0), V3(0,1,0));
Vec2 mouse_on_floor = point_plane(marker);
Overlapping mouse_over = get_overlapping(aabb_centered(mouse_on_floor, V2(1,1)));
BUFF_ITER(Entity*, &mouse_over)
{ {
dbgplanerect(entity_aabb(*it)); dbgcol(PINK)
{
dbgplanerect(entity_aabb(*it));
// debug draw memories of hovered // debug draw memories of hovered
Entity *to_view = *it; Entity *to_view = *it;
Vec2 start_at = V2(0,300); Vec2 start_at = V2(0,300);
Vec2 cur_pos = start_at; Vec2 cur_pos = start_at;
AABB bounds = draw_text((TextParams){false, MD_S8Fmt(frame_arena, "--Memories for %s--", characters[to_view->npc_kind].name), cur_pos, WHITE, 1.0});
cur_pos.y -= aabb_size(bounds).y;
for(Memory *cur = to_view->memories_first; cur; cur = cur->next) AABB bounds = draw_text((TextParams){false, MD_S8Fmt(frame_arena, "--Memories for %s--", characters[to_view->npc_kind].name), cur_pos, WHITE, 1.0});
if(cur->speech.text_length > 0)
{
MD_String8 to_text = cur->context.talking_to_kind != NPC_nobody ? MD_S8Fmt(frame_arena, " to %s ", characters[cur->context.talking_to_kind].name) : MD_S8Lit("");
MD_String8 text = MD_S8Fmt(frame_arena, "%s%s%.*s: %.*s", to_view->npc_kind == cur->context.author_npc_kind ? "(Me) " : "", characters[cur->context.author_npc_kind].name, MD_S8VArg(to_text), cur->speech.text_length, cur->speech);
AABB bounds = draw_text((TextParams){false, text, cur_pos, WHITE, 1.0});
cur_pos.y -= aabb_size(bounds).y; cur_pos.y -= aabb_size(bounds).y;
for(Memory *cur = to_view->memories_first; cur; cur = cur->next)
if(cur->speech.text_length > 0)
{
MD_String8 to_text = cur->context.talking_to_kind != NPC_nobody ? MD_S8Fmt(frame_arena, " to %s ", characters[cur->context.talking_to_kind].name) : MD_S8Lit("");
MD_String8 text = MD_S8Fmt(frame_arena, "%s%s%.*s: %.*s", to_view->npc_kind == cur->context.author_npc_kind ? "(Me) " : "", characters[cur->context.author_npc_kind].name, MD_S8VArg(to_text), cur->speech.text_length, cur->speech);
AABB bounds = draw_text((TextParams){false, text, cur_pos, WHITE, 1.0});
cur_pos.y -= aabb_size(bounds).y;
}
}
break;
} }
} }
break;
}
Vec2 pos = V2(0.0, screen_size().Y); Vec2 pos = V2(0.0, screen_size().Y);
int num_entities = 0; int num_entities = 0;

Loading…
Cancel
Save