| 1789 | } |
| 1790 | |
| 1791 | void xEntCollideWalls(xEnt* p, xScene* sc, F32 dt) |
| 1792 | { |
| 1793 | xCollis* coll; |
| 1794 | xEnt* cent; |
| 1795 | U8 idx, sidx; |
| 1796 | F32 sbr; |
| 1797 | |
| 1798 | if (p->bound.type == XBOUND_TYPE_SPHERE) |
| 1799 | { |
| 1800 | sbr = p->bound.sph.r; |
| 1801 | } |
| 1802 | else |
| 1803 | { |
| 1804 | sbr = 0.7f; |
| 1805 | } |
| 1806 | |
| 1807 | if (p->collis->pen & 0x8) |
| 1808 | { |
| 1809 | idx = p->collis->npc_eidx; |
| 1810 | sidx = p->collis->npc_sidx; |
| 1811 | |
| 1812 | while (sidx < idx) |
| 1813 | { |
| 1814 | coll = &p->collis->colls[sidx]; |
| 1815 | cent = (xEnt*)coll->optr; |
| 1816 | |
| 1817 | if (!(coll->flags & 0x2) && coll->dist < sbr && |
| 1818 | ((p->collis->depenq) ? p->collis->depenq(p, cent, sc, dt, coll) : |
| 1819 | cent->penby & p->collType)) |
| 1820 | { |
| 1821 | if (0.0f != coll->depen.x || 0.0f != coll->depen.z) |
| 1822 | { |
| 1823 | coll->depen.y = 0.0f; |
| 1824 | } |
| 1825 | |
| 1826 | xEntAddToPos(p, &coll->depen); |
| 1827 | } |
| 1828 | |
| 1829 | sidx++; |
| 1830 | } |
| 1831 | } |
| 1832 | |
| 1833 | if (p->collis->pen & 0x4) |
| 1834 | { |
| 1835 | idx = p->collis->dyn_eidx; |
| 1836 | sidx = p->collis->dyn_sidx; |
| 1837 | |
| 1838 | while (sidx < idx) |
| 1839 | { |
| 1840 | coll = &p->collis->colls[sidx]; |
| 1841 | cent = (xEnt*)coll->optr; |
| 1842 | |
| 1843 | if (!(coll->flags & 0x2) && coll->dist < sbr && |
| 1844 | ((p->collis->depenq) ? p->collis->depenq(p, cent, sc, dt, coll) : |
| 1845 | cent->penby & p->collType)) |
| 1846 | { |
| 1847 | coll->depen.y = 0.0f; |
| 1848 |
no test coverage detected