588 {
589
591 return true;
592
593 if (CfgGameplayHandler.GetDisableIsBaseViableCheck())
594 return true;
595
596
597
600
603
606
609
610 vector contact_pos_left_close;
611 vector contact_pos_right_close;
612 vector contact_pos_left_far;
613 vector contact_pos_right_far;
614 vector contact_dir_left_close;
615 vector contact_dir_right_close;
616 vector contact_dir_left_far;
617 vector contact_dir_right_far;
618 int contact_component_left_close;
619 int contact_component_right_close;
620 int contact_component_left_far;
621 int contact_component_right_far;
622 set<Object> results_left_close = new set<Object>;
623 set<Object> results_right_close = new set<Object>;
624 set<Object> results_left_far = new set<Object>;
625 set<Object> results_right_far = new set<Object>;
630
631
632 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);
633 if (results_left_close.Count() > 0)
634 obj_left_close = results_left_close[results_left_close.Count() - 1];
635
636 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);
637 if (results_right_close.Count() > 0)
638 obj_right_close = results_right_close[results_right_close.Count() - 1];
639
640 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);
641 if (results_left_far.Count() > 0)
642 obj_left_far = results_left_far[results_left_far.Count() - 1];
643
644 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);
645 if (results_right_far.Count() > 0)
646 obj_right_far = results_right_far[results_right_far.Count() - 1];
647
648 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);
649 }
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)
proto native CGame GetGame()