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; }
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); }