public void TestIfBarierSuitableToHide( UnitCore unit, Vector3 precalculated_toEnemyVector, ref float global_min, ref Barier barier ) { var unit_position = unit.transform.position; //!!! CAUTION !!! // only work with 4 side points and 4 conner points !!!! float local_min = global_min; bool min_changed = false; Vector3 closest = Vector3.zero; Vector3 tmp; tmp = side_points[0].value - unit_position; if ( tmp.magnitude < global_min ) { closest = side_points[0].value; global_min = tmp.magnitude; min_changed = true; } foreach (var r in side_points[0].closest_conner_points) { tmp = r - unit_position; if ( tmp.magnitude < local_min ) { closest = r; local_min = tmp.magnitude; min_changed = true; } } tmp = side_points[2].value - unit_position; if ( tmp.magnitude < local_min ) { closest = side_points[2].value; local_min = tmp.magnitude; min_changed = true; } foreach (var r in side_points[2].closest_conner_points) { tmp = r - unit_position; if ( tmp.magnitude < local_min ) { closest = r; local_min = tmp.magnitude; min_changed = true; } } //!!! END CAUTION !!! if (min_changed) { if ( Physics.Linecast(closest, unit.transform.position, walls_mask) ) return; // if we must run over enemy to reach the barier then no if (Vector3.Angle (precalculated_toEnemyVector, closest -unit_position) > 50f) { barier = this; global_min = local_min; } } }
void Start() { bar = Barier.GetComponent <Barier> (); spawn = Spawn.GetComponent <Spawner> (); myBody = GetComponent <Rigidbody2D> (); }
public bool TryGettingAvailableBarier() { var b = GetClosestBarier (); if (b != null) { selected_barier = b; } return false; }