static Bool OnProximitySensor2D(GF_SensorHandler *sh, Bool is_over, Bool is_cancel, GF_Event *ev, GF_Compositor *compositor) { M_ProximitySensor2D *ps = (M_ProximitySensor2D *)sh->sensor; Prox2DStack *stack = (Prox2DStack *) gf_node_get_private(sh->sensor); assert(ps->enabled); if (is_over) { stack->last_time = gf_node_get_scene_time(sh->sensor); if (is_cancel) return 0; if (prox2D_is_in_sensor(stack, ps, compositor->hit_local_point.x, compositor->hit_local_point.y)) { ps->position_changed.x = compositor->hit_local_point.x; ps->position_changed.y = compositor->hit_local_point.y; gf_node_event_out(sh->sensor, 4/*"position_changed"*/); if (!ps->isActive) { ps->isActive = 1; gf_node_event_out(sh->sensor, 3/*"isActive"*/); ps->enterTime = stack->last_time; gf_node_event_out(sh->sensor, 6/*"enterTime"*/); } return 1; } } /*either we're not over the shape or we're not in sensor*/ if (ps->isActive) { ps->exitTime = stack->last_time; gf_node_event_out(sh->sensor, 7/*"exitTime"*/); ps->isActive = 0; gf_node_event_out(sh->sensor, 3/*"isActive"*/); return 1; } return 0; }
static void OnProximitySensor2D(SensorHandler *sh, Bool is_over, GF_Event *ev, RayHitInfo *hit_info) { M_ProximitySensor2D *ps = (M_ProximitySensor2D *)sh->owner; Prox2DStack *stack = (Prox2DStack *) gf_node_get_private(sh->owner); assert(ps->enabled); if (is_over) { stack->last_time = gf_node_get_scene_time(sh->owner); if (prox2D_is_in_sensor(stack, ps, hit_info->local_point.x, hit_info->local_point.y)) { ps->position_changed.x = hit_info->local_point.x; ps->position_changed.y = hit_info->local_point.y; gf_node_event_out_str(sh->owner, "position_changed"); if (!ps->isActive) { ps->isActive = 1; gf_node_event_out_str(sh->owner, "isActive"); ps->enterTime = stack->last_time; gf_node_event_out_str(sh->owner, "enterTime"); } return; } } /*either we're not over the shape or we're not in sensor*/ if (ps->isActive) { ps->exitTime = stack->last_time; gf_node_event_out_str(sh->owner, "exitTime"); ps->isActive = 0; gf_node_event_out_str(sh->owner, "isActive"); } }