public void RemoveField(PFField field) { CalculateField(field, -1); LogMatrix(); if (shouldDrawHighlight) { Draw(); } }
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); } } }
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); }