public static float DistanceFromCenter(Point p, Vector3 worldPosition) { Vector3 localWorldPosition = worldPosition; localWorldPosition = NawakTools.Rotate(localWorldPosition, 0); //-transform.eulerAngles.y*Mathf.PI/180); Vector2 cellCenter = Vector2.zero; cellCenter = new Vector2((int)((localWorldPosition.x + s_tileSize) / (2 * s_tileSize)) , (int)((localWorldPosition.z + s_tileSize) / (2 * s_tileSize))); Vector2 tileposition = new Vector2(((localWorldPosition.x + s_tileSize) / (2 * s_tileSize)) , ((localWorldPosition.z + s_tileSize) / (2 * s_tileSize))); return((tileposition - cellCenter - Vector2.one * 0.5f).magnitude * Mathf.Sqrt(2)); }
public static Point worldPositionToCellCenter(Vector3 worldPosition) { Vector3 localWorldPosition = worldPosition; localWorldPosition = NawakTools.Rotate(localWorldPosition, 0); //-transform.eulerAngles.y*Mathf.PI/180); Vector2 cellCenter = Vector2.zero; cellCenter = new Vector2((int)((localWorldPosition.x + s_tileSize) / (2 * s_tileSize)) , (int)((localWorldPosition.z + s_tileSize) / (2 * s_tileSize))); //Debug.Log(localWorldPosition+" : "+cellCenter); return(new Point(cellCenter)); }
void SelectTilesInSquare(List <Vector3> list) { if (pathfindManager == null) { return; } if (Event.current.control == false) { m_selectecPoints.Clear(); } foreach (PathfindNode node in pathfindManager.CompleteNodeArea.AllNodes) { Vector3 tileCenter = NawakTools.Rotate(NawakTools.cellToWorld(node.Point) , (pathfindManager.transform.rotation.eulerAngles.y) * Mathf.PI / 180); float sign = 0; bool AddTile = true; for (int i = 0; i < list.Count; i++) { Vector3 v1 = list[i] - tileCenter; Vector3 v2 = list[(i + 1) % list.Count] - tileCenter; float crossSign = Vector3.Cross(v1, v2).y; if (sign == 0) { sign = crossSign; continue; } if (sign * crossSign < 0) { AddTile = false; } } if (AddTile) { m_selectecPoints.Add(node); } } OnSelect(); }