Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
        }
    }