MCPcopy Create free account
hub / github.com/OGSR/OGSR-Engine / ValidateWalkOnMesh

Method ValidateWalkOnMesh

ogsr_engine/xrGame/PHSimpleCharacter.cpp:789–903  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

787 return b_clamb_jump;
788}
789bool CPHSimpleCharacter::ValidateWalkOnMesh()
790{
791 Fvector AABB, AABB_forbid, center, center_forbid, accel_add, accel;
792
793 AABB.x = m_radius;
794 AABB.y = m_radius;
795 AABB.z = m_radius;
796
797 AABB_forbid.set(AABB);
798 // AABB_forbid.x*=0.7f;
799 // AABB_forbid.z*=0.7f;
800 AABB_forbid.y += m_radius;
801 AABB_forbid.mul(CHWON_AABB_FB_FACTOR);
802
803 accel_add.set(m_acceleration);
804 float mag = accel_add.magnitude();
805 if (!(mag > 0.f))
806 return true;
807 accel_add.mul(CHWON_ACCLEL_SHIFT / mag);
808 accel.set(accel_add);
809 accel.div(CHWON_ACCLEL_SHIFT);
810 AABB.mul(CHWON_AABB_FACTOR);
811 GetPosition(center);
812 center.add(accel_add);
813 center_forbid.set(center);
814 center_forbid.y += CHWON_CALL_FB_HIGHT;
815 center.y += m_radius + CHWON_CALL_UP_SHIFT;
816
817 // perform single query / two usages
818 Fbox query, tmp;
819 Fvector q_c, q_d;
820 query.set(center_forbid, center_forbid);
821 query.grow(AABB_forbid);
822 tmp.set(center, center);
823 tmp.grow(AABB);
824 query.merge(tmp);
825 query.get_CD(q_c, q_d);
826
827 XRC.box_query(0, Level().ObjectSpace.GetStaticModel(), q_c, q_d);
828 // Fvector fv_dir;fv_dir.mul(accel,1.f/mag);
829 Fvector sd_dir;
830 sd_dir.set(-accel.z, 0, accel.x);
831 Fvector obb_fb;
832 obb_fb.set(m_radius * 0.5f, m_radius * 2.f, m_radius * 0.7f);
833 Fvector obb;
834 obb.set(m_radius * 0.5f, m_radius, m_radius * 0.7f);
835#ifdef DEBUG
836 if (ph_dbg_draw_mask.test(phDbgCharacterControl))
837 {
838 Fmatrix m;
839 m.identity();
840 m.i.set(sd_dir);
841 m.k.set(accel);
842 m.c.set(center);
843 DBG_DrawOBB(m, obb, D3DCOLOR_XRGB(0, 255, 0));
844 m.c.set(center_forbid);
845 DBG_DrawOBB(m, obb_fb, D3DCOLOR_XRGB(255, 0, 0));
846 }

Callers

nothing calls this directly

Calls 15

DBG_DrawOBBFunction · 0.85
__aabb_triFunction · 0.85
test_sidesFunction · 0.85
DBG_DrawTriFunction · 0.85
get_CDMethod · 0.80
box_queryMethod · 0.80
r_endMethod · 0.80
PointClass · 0.50
setMethod · 0.45
mulMethod · 0.45
magnitudeMethod · 0.45
divMethod · 0.45

Tested by

no test coverage detected