Beispiel #1
0
static bool IsObjectVertexCollidingPoly(PHYSICS_BOX_DATA * pbox, const EERIEPOLY & ep) {

	Vec3f pol[3];
	pol[0] = ep.v[0].p;
	pol[1] = ep.v[1].p;
	pol[2] = ep.v[2].p;

	if(ep.type & POLY_QUAD) {

		if(IsObjectVertexCollidingTriangle(pbox, pol)) {
			return true;
		}

		pol[1] = ep.v[2].p;
		pol[2] = ep.v[3].p;

		if(IsObjectVertexCollidingTriangle(pbox, pol)) {
			return true;
		}

		return false;
	}

	if(IsObjectVertexCollidingTriangle(pbox, pol)) {
		return true;
	}

	return false;
}
//*************************************************************************************
//*************************************************************************************
BOOL IsObjectVertexCollidingPoly(EERIE_3DOBJ * obj, EERIEPOLY * ep, long k, long * validd)
{
	EERIE_3D pol[3];
	Vector_Copy(&pol[0], (EERIE_3D *)&ep->v[0]);
	Vector_Copy(&pol[1], (EERIE_3D *)&ep->v[1]);
	Vector_Copy(&pol[2], (EERIE_3D *)&ep->v[2]);
	float mul = 1.3f;
	pol[0].x = (pol[0].x - ep->center.x) * mul + ep->center.x;
	pol[0].y = (pol[0].y - ep->center.y) * mul + ep->center.y;
	pol[0].z = (pol[0].z - ep->center.z) * mul + ep->center.z;

	if (ep->type & POLY_QUAD)
	{
		if (IsObjectVertexCollidingTriangle(obj, (EERIE_3D *)&pol, k, validd)) return TRUE;

		Vector_Copy(&pol[0], (EERIE_3D *)&ep->v[2]);
		Vector_Copy(&pol[1], (EERIE_3D *)&ep->v[3]);
		Vector_Copy(&pol[2], (EERIE_3D *)&ep->v[0]);

		if (IsObjectVertexCollidingTriangle(obj, (EERIE_3D *)&pol, k, validd)) return TRUE;

		return FALSE;
	}

	if (IsObjectVertexCollidingTriangle(obj, (EERIE_3D *)&pol, k, validd)) return TRUE;

	return FALSE;
}