コード例 #1
0
    public Vector3 MapToWorld(PFPosition pfPosition)
    {
        float x = pfPosition.x * tileWidth + tileWidth / 2;
        float y = pfPosition.y * tileHeight + tileHeight / 2;

        return(new Vector3(x, y));
    }
コード例 #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);
            }
        }
    }
コード例 #3
0
    public Vector3 GetTargetPosition()
    {
        PFStaticMap map   = _staticMaps[0];
        PFPosition  pfPos = map.WorldToMap(transform.position);

        int minX = Mathf.Max(0, pfPos.x - 1);
        int maxX = Mathf.Min(map.width - 1, pfPos.x + 1);
        int minY = Mathf.Max(0, pfPos.y - 1);
        int maxY = Mathf.Min(map.height - 1, pfPos.y + 1);

        PFPosition pfTargetPos  = pfPos;
        int        maxPotential = -100;

        // looping through the neibouring and the current grids
        for (int x = minX; x <= maxX; x++)
        {
            for (int y = minY; y <= maxY; y++)
            {
                int potential = GetStaticPotentialSum(x, y) + GetTrailPotentialSum(x, y);
                if (potential > maxPotential)
                {
                    maxPotential = potential;
                    pfTargetPos  = new PFPosition(x, y);
                }
            }
        }

        if (trailLength > 0)
        {
            _trail.Insert(0, new PFTrail(pfTargetPos.x, pfTargetPos.y, trailPotential));
            if (_trail.Count > trailLength)
            {
                _trail.RemoveAt(trailLength - 1);
            }
        }

        return(map.MapToWorld(pfTargetPos));
    }
コード例 #4
0
 public PFTrail(int x, int y, int potential)
 {
     position       = new PFPosition(x, y);
     this.potential = potential;
 }