| 168 | } |
| 169 | |
| 170 | void iBoxVecDist(const xBox* box, const xVec3* v, xIsect* isx) |
| 171 | { |
| 172 | if (v->x < box->lower.x) |
| 173 | { |
| 174 | if (v->y < box->lower.y) |
| 175 | { |
| 176 | if (v->z < box->lower.z) |
| 177 | { |
| 178 | isx->norm.x = box->lower.x - v->x; |
| 179 | isx->norm.y = box->lower.y - v->y; |
| 180 | isx->norm.z = box->lower.z - v->z; |
| 181 | isx->flags = isx->flags & ~0x1F000000 | 0x00000000; |
| 182 | isx->flags |= 0x80000000; |
| 183 | } |
| 184 | else if (v->z <= box->upper.z) |
| 185 | { |
| 186 | isx->norm.x = box->lower.x - v->x; |
| 187 | isx->norm.y = box->lower.y - v->y; |
| 188 | isx->norm.z = 0.0f; |
| 189 | isx->flags = isx->flags & ~0x1F000000 | 0x01000000; |
| 190 | isx->flags |= 0x40000000; |
| 191 | } |
| 192 | else |
| 193 | { |
| 194 | isx->norm.x = box->lower.x - v->x; |
| 195 | isx->norm.y = box->lower.y - v->y; |
| 196 | isx->norm.z = box->upper.z - v->z; |
| 197 | isx->flags = isx->flags & ~0x1F000000 | 0x02000000; |
| 198 | isx->flags |= 0x80000000; |
| 199 | } |
| 200 | } |
| 201 | else if (v->y <= box->upper.y) |
| 202 | { |
| 203 | if (v->z < box->lower.z) |
| 204 | { |
| 205 | isx->norm.x = box->lower.x - v->x; |
| 206 | isx->norm.y = 0.0f; |
| 207 | isx->norm.z = box->lower.z - v->z; |
| 208 | isx->flags = isx->flags & ~0x1F000000 | 0x03000000; |
| 209 | isx->flags |= 0x40000000; |
| 210 | } |
| 211 | else if (v->z <= box->upper.z) |
| 212 | { |
| 213 | isx->norm.x = box->lower.x - v->x; |
| 214 | isx->norm.y = 0.0f; |
| 215 | isx->norm.z = 0.0f; |
| 216 | isx->flags = isx->flags & ~0x1F000000 | 0x04000000; |
| 217 | isx->flags |= 0x20000000; |
| 218 | } |
| 219 | else |
| 220 | { |
| 221 | isx->norm.x = box->lower.x - v->x; |
| 222 | isx->norm.y = 0.0f; |
| 223 | isx->norm.z = box->upper.z - v->z; |
| 224 | isx->flags = isx->flags & ~0x1F000000 | 0x05000000; |
| 225 | isx->flags |= 0x40000000; |
| 226 | } |
| 227 | } |
no test coverage detected