Example #1
0
    public void RemoveField(PFField field)
    {
        CalculateField(field, -1);
        LogMatrix();

        if (shouldDrawHighlight)
        {
            Draw();
        }
    }
Example #2
0
    private void CalculateField(PFField field, int multiplier)
    {
        PFPosition pos = WorldToMap(field.position);

        int minX = Mathf.Max(0, pos.x - field.boundsHalfWidth);
        int maxX = Mathf.Min(width - 1, pos.x + field.boundsHalfWidth);
        int minY = Mathf.Max(0, pos.y - field.boundsHalfHeight);
        int maxY = Mathf.Min(height - 1, pos.y + field.boundsHalfHeight);

        for (int x = minX; x <= maxX; x++)
        {
            for (int y = minY; y <= maxY; y++)
            {
                _map[x][y] += multiplier * field.GetLocalPotential(x - pos.x, y - pos.y);
            }
        }
    }
Example #3
0
    private void PlantTarget(Vector3 pos)
    {
        if (_target != null)
        {
            _pfMap.RemoveField(_target);
            Destroy(_target.gameObject);
        }

        PFField field;

        if (isSimulating)
        {
            field = (PFField)Instantiate(target, pos, Quaternion.identity);
        }
        else
        {
            field = (PFField)Instantiate(targetField, pos, Quaternion.identity);
        }

        _target = field;
        _pfMap.AddField(field);
    }