public Vector3 MapToWorld(PFPosition pfPosition) { float x = pfPosition.x * tileWidth + tileWidth / 2; float y = pfPosition.y * tileHeight + tileHeight / 2; return(new Vector3(x, y)); }
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); } } }
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)); }
public PFTrail(int x, int y, int potential) { position = new PFPosition(x, y); this.potential = potential; }