Пример #1
0
bool Map_Manager::isSolid(Vector3f pos) {
	rmp_block_info* block = GetBlock(pos);
	if (!block) return false;

	int block_type = (block->block_type & 0xF);
	int slope_type = (block->block_type >> 4) & 0x7F;

	//No collision with air
	if (block_type == 0) return false;

	//slope_type 0 doesnt need checks
	/*if (slope_type == 0) {
		return true;
	}*/

	Vector3f lpos = pos - Vector3f(floor(pos.x),floor(pos.y),floor(pos.z));

	bool faceAway = true;
	if (block->tex_left > 0)	faceAway = faceAway && checkFace(lpos,0,slope_type);
	if (block->tex_right > 0)	faceAway = faceAway && checkFace(lpos,1,slope_type);
	if (block->tex_top > 0)		faceAway = faceAway && checkFace(lpos,2,slope_type);
	if (block->tex_bottom > 0)	faceAway = faceAway && checkFace(lpos,3,slope_type);
	if (block->tex_lid > 0)		faceAway = faceAway && checkFace(lpos,4,slope_type);

	return faceAway;
}
Пример #2
0
void checkModel (Model *m)
/******************************************************************************
checkModel - check Model
*******************************************************************************
Input:
m	pointer to Model
*******************************************************************************
Author:  Dave Hale, Colorado School of Mines, 07/09/90
******************************************************************************/
{
	Face *f;
	/* printf("model %d\n",m); */
	if (m->f->m!=m) badModel();
	f = m->f;
	do {
		if (f->m!=m) badModel();
		checkFace(f);
		f = f->fNext;
	} while (f!=m->f);
}