private ContextMap ObstructionAvoidanceMap() { ContextMap map = new ContextMap(_steer.DirectionsCount); Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, VisionRadius, _danger_mask); foreach (Collider2D collider in colliders) { if (DangerIdentification(collider)) { RaycastHit2D[] hits = Physics2D.LinecastAll(transform.position, collider.transform.position); float distance = Vector2.Distance(transform.position, hits[hits.Length - 1].point); float weight = (VisionRadius - distance) / VisionRadius; if (weight < 0) { continue; } Vector2 danger = collider.transform.position - transform.position; map.AddInterestToVectorWithDesirableDot(-danger, weight, 0.65f); map.AddDangerToVectorWithThreshold(danger, weight, 0.65f); } } return(map); }
private void Update() { Vector2 pos = _camera.ScreenToWorldPoint(Input.mousePosition); if (Input.GetMouseButtonDown(0)) { GameObject obj = Instantiate(_intereset_prefab, pos, Quaternion.identity); _interesets.Add(obj.transform); obj.SetActive(true); } else if (Input.GetMouseButtonDown(1)) { GameObject obj = Instantiate(_danger_prefab, pos, Quaternion.identity); _dangers.Add(obj.transform); obj.SetActive(true); } _steer.SetNewMapUp(); ContextMap interest_map = new ContextMap(_direction_number); foreach (Transform danger in _dangers) { float weight = (_vision_radius - danger.position.magnitude) / _vision_radius; interest_map.AddInterestToVectorWithDesirableDot(-danger.position, weight, _desirable_dot); interest_map.AddDangerToVectorWithThreshold(danger.position, weight, _threshold); } _steer.ApplyContextMap(interest_map); ContextMap danger_map = new ContextMap(_direction_number); foreach (Transform interest in _interesets) { float weight = (_vision_radius - interest.position.magnitude) / _vision_radius; danger_map.AddInterestToVector(interest.position, weight); } }