68 lines
2.1 KiB
C
68 lines
2.1 KiB
C
|
/* ************************************************************************** */
|
||
|
/* */
|
||
|
/* ::: :::::::: */
|
||
|
/* csg_diff.c :+: :+: :+: */
|
||
|
/* +:+ +:+ +:+ */
|
||
|
/* By: ntrahy <marvin@42.fr> +#+ +:+ +#+ */
|
||
|
/* +#+#+#+#+#+ +#+ */
|
||
|
/* Created: 2017/01/02 22:05:54 by ntrahy #+# #+# */
|
||
|
/* Updated: 2017/01/07 12:16:18 by scebula ### ########.fr */
|
||
|
/* */
|
||
|
/* ************************************************************************** */
|
||
|
|
||
|
#include "rt.h"
|
||
|
|
||
|
static int positive_condition_diff(t_research *r, t_research *rp)
|
||
|
{
|
||
|
if ((r->c.c1 || r->c.c4 || r->c.c5 || r->c.c6) && r->c.p1)
|
||
|
{
|
||
|
r->modified_ray = rp->modified_ray;
|
||
|
r->current_obj = rp->current_obj;
|
||
|
r->dist[2] = rp->dist[0];
|
||
|
return (1);
|
||
|
}
|
||
|
if (((r->c.c1 || r->c.c6) && r->c.p2)
|
||
|
|| ((r->c.c2 || r->c.c4) && r->c.p2 && r->c.neg_behind))
|
||
|
{
|
||
|
r->modified_ray = rp->modified_ray;
|
||
|
r->current_obj = rp->current_obj;
|
||
|
r->dist[2] = rp->dist[1];
|
||
|
return (1);
|
||
|
}
|
||
|
return (0);
|
||
|
}
|
||
|
|
||
|
static int negative_condition_diff(t_research *r, t_research *rn)
|
||
|
{
|
||
|
if (((r->c.c4 || r->c.c5) && r->c.neg_front && r->c.p2)
|
||
|
|| (r->c.c6 && r->c.p2))
|
||
|
{
|
||
|
r->modified_ray = rn->modified_ray;
|
||
|
r->current_obj = rn->current_obj;
|
||
|
r->dist[2] = rn->dist[0];
|
||
|
return (1);
|
||
|
}
|
||
|
if ((r->c.c2 && (r->c.p1 || r->c.in_neg))
|
||
|
|| (r->c.c4 && r->c.in_neg))
|
||
|
{
|
||
|
r->modified_ray = rn->modified_ray;
|
||
|
r->current_obj = rn->current_obj;
|
||
|
r->dist[2] = rn->dist[1];
|
||
|
return (1);
|
||
|
}
|
||
|
return (0);
|
||
|
}
|
||
|
|
||
|
int check_diff(t_research *r, t_research *rp, t_research *rn)
|
||
|
{
|
||
|
if (positive_condition_diff(r, rp))
|
||
|
return (1);
|
||
|
else if (negative_condition_diff(r, rn))
|
||
|
return (1);
|
||
|
else
|
||
|
{
|
||
|
r->dist[2] = 0;
|
||
|
return (1);
|
||
|
}
|
||
|
}
|