639 {
640
642 return true;
643
644 if (CfgGameplayHandler.GetDisableIsBaseViableCheck())
645 return true;
646
647
648
651
654
657
660
661 vector contact_pos_left_close;
662 vector contact_pos_right_close;
663 vector contact_pos_left_far;
664 vector contact_pos_right_far;
665 vector contact_dir_left_close;
666 vector contact_dir_right_close;
667 vector contact_dir_left_far;
668 vector contact_dir_right_far;
669 int contact_component_left_close;
670 int contact_component_right_close;
671 int contact_component_left_far;
672 int contact_component_right_far;
673 set<Object> results_left_close = new set<Object>;
674 set<Object> results_right_close = new set<Object>;
675 set<Object> results_left_far = new set<Object>;
676 set<Object> results_right_far = new set<Object>;
681
682
683 DayZPhysics.RaycastRV(from_left_close, to_left_close_down, contact_pos_left_close, contact_dir_left_close, contact_component_left_close, results_left_close, null,
m_Projection,
false,
false, ObjIntersectFire);
684 if (results_left_close.Count() > 0)
685 obj_left_close = results_left_close[results_left_close.Count() - 1];
686
687 DayZPhysics.RaycastRV(from_right_close, to_right_close_down, contact_pos_right_close, contact_dir_right_close, contact_component_right_close, results_right_close, null,
m_Projection,
false,
false, ObjIntersectFire);
688 if (results_right_close.Count() > 0)
689 obj_right_close = results_right_close[results_right_close.Count() - 1];
690
691 DayZPhysics.RaycastRV(from_left_far, to_left_far_down, contact_pos_left_far, contact_dir_left_far, contact_component_left_far, results_left_far, null,
m_Projection,
false,
false, ObjIntersectFire);
692 if (results_left_far.Count() > 0)
693 obj_left_far = results_left_far[results_left_far.Count() - 1];
694
695 DayZPhysics.RaycastRV(from_right_far, to_right_far_down, contact_pos_right_far, contact_dir_right_far, contact_component_right_far, results_right_far, null,
m_Projection,
false,
false, ObjIntersectFire);
696 if (results_right_far.Count() > 0)
697 obj_right_far = results_right_far[results_right_far.Count() - 1];
698
699 return IsBaseIntact(obj_left_close, obj_right_close, obj_left_far, obj_right_far ) &&
IsBaseStatic( obj_left_close ) &&
IsBaseFlat( contact_pos_left_close, contact_pos_right_close, contact_pos_left_far, contact_pos_right_far);
700 }
bool IsBaseIntact(Object under_left_close, Object under_right_close, Object under_left_far, Object under_right_far)
vector GetLeftFarProjectionVector()
const vector PLACEMENT_RC_START_OFFSET
vector GetRightFarProjectionVector()
const vector PLACEMENT_RC_END_OFFSET
vector GetLeftCloseProjectionVector()
vector GetRightCloseProjectionVector()
bool IsBaseFlat(vector contact_pos_left_close, vector contact_pos_right_close, vector contact_pos_left_far, vector contact_pos_right_far)
bool IsBaseStatic(Object objectToCheck)