public void DrawPatrolMap(List <PatrolManager.PatrolGraphNode> graph) { for (int i = 0; i < graph.Count; i++) { PatrolManager.PatrolGraphNode node = graph[i]; Vector3 from = new Vector3(node.pos.x, 1.0f, node.pos.z); foreach (KeyValuePair <PatrolManager.PatrolGraphNode, float> item in node.besideNodes) { if ((hasInPatrol.ContainsKey(node.pos) && hasInPatrol[node.pos].Contains(item.Key.pos)) || (hasInPatrol.ContainsKey(item.Key.pos) && hasInPatrol[item.Key.pos].Contains(node.pos))) { continue; } Vector3 to = new Vector3(item.Key.pos.x, 1.5f, item.Key.pos.z); patrolLine[0].enabled = true; patrolLine[0].SetPosition(0, from); patrolLine[0].SetPosition(1, to); patrolLine.RemoveAt(0); if (!hasInPatrol.ContainsKey(node.pos)) { hasInPatrol.Add(node.pos, new List <Vector3>()); } hasInPatrol[node.pos].Add(item.Key.pos); if (!hasInPatrol.ContainsKey(item.Key.pos)) { hasInPatrol.Add(item.Key.pos, new List <Vector3>()); } hasInPatrol[item.Key.pos].Add(node.pos); } //height += 1.0f; } }
public void DrawEnemyPatrol(PatrolPath path) { List <LineRenderer> patrolPathLines = new List <LineRenderer>(); for (int i = 0; i < path.pathPatrolGraphNode.Count - 1; i++) { PatrolManager.PatrolGraphNode node = path.pathPatrolGraphNode[i]; Vector3 from = new Vector3(path.pathPatrolGraphNode[i].pos.x, 3.0f, path.pathPatrolGraphNode[i].pos.z); Vector3 to = new Vector3(path.pathPatrolGraphNode[i + 1].pos.x, 3.0f, path.pathPatrolGraphNode[i + 1].pos.z); patrolLine[0].material = enemyPatrolMat; patrolLine[0].enabled = true; patrolLine[0].SetPosition(0, from); patrolLine[0].SetPosition(1, to); patrolPathLines.Add(patrolLine[0]); patrolLine.RemoveAt(0); if (!hasInPatrol.ContainsKey(path.pathPatrolGraphNode[i].pos)) { hasInPatrol.Add(path.pathPatrolGraphNode[i].pos, new List <Vector3>()); } hasInPatrol[path.pathPatrolGraphNode[i].pos].Add(path.pathPatrolGraphNode[i + 1].pos); if (!hasInPatrol.ContainsKey(path.pathPatrolGraphNode[i + 1].pos)) { hasInPatrol.Add(path.pathPatrolGraphNode[i + 1].pos, new List <Vector3>()); } hasInPatrol[path.pathPatrolGraphNode[i + 1].pos].Add(path.pathPatrolGraphNode[i].pos); } patrolPathLineDic.Add(path, patrolPathLines); }
void OnDrawGizmos() { Gizmos.DrawWireCube(transform.position, new Vector3(gridWorldSize.x, 1, gridWorldSize.y)); if (grid != null && displayGridGizmos) { foreach (Node n in grid) { if (drawType == DrawType.Weight) { //Gizmos.color = Color.Lerp(Color.white, Color.black, Mathf.InverseLerp(penaltyMin, penaltyMax, n.movementPenalty)); //Gizmos.color = (n.walkable) ? Gizmos.color : Color.red; Gizmos.color = (n.walkable) ? Color.white : Color.red; } else if (drawType == DrawType.BeforeSpread) { if (!n.walkable) { //Gizmos.color = Color.black; Gizmos.color = Color.red; //Gizmos.DrawCube(n.worldPosition, Vector3.one * (nodeDiameter)); continue; } Gizmos.color = Color.white; //Debug.Log(n.locNmae + " " + n.Direction); if (n.Direction == 11) { Gizmos.color = new Color(1, 0, 0); } else if (n.Direction == 12) { Gizmos.color = new Color(0, 0, 1); } else if (n.Direction == 13) { Gizmos.color = new Color(0, 1, 0); } else if (n.Direction == 14) { Gizmos.color = new Color(0.5f, 0, 0); } else if (n.Direction == 23) { Gizmos.color = new Color(1, 0, 1); } else if (n.Direction == 24) { Gizmos.color = new Color(1, 1, 0); } else if (n.Direction == 26) { Gizmos.color = new Color(0.6f, 0, 0.8f); } else if (n.Direction == 27) { Gizmos.color = new Color(0.6f, 0.8f, 0f); } if (patrolManager.choosenNodeDic.ContainsKey(new Vector2Int(n.gridX, n.gridY))) { Gizmos.color = new Color(0, 1, 1); } //if (n.Direction == 11) Gizmos.color = Color.cyan; //else if (n.Direction == 12) Gizmos.color = Color.cyan; //else if (n.Direction == 13) Gizmos.color = Color.cyan; //else if (n.Direction == 14) Gizmos.color = Color.cyan; //else if (n.Direction == 23) Gizmos.color = Color.cyan; //else if (n.Direction == 24) Gizmos.color = Color.cyan; //else if (n.Direction == 26) Gizmos.color = Color.cyan; //else if (n.Direction == 27) Gizmos.color = Color.cyan; } else if (drawType == DrawType.AfterSpread) { Gizmos.color = Color.white; if (!n.walkable) { Gizmos.color = Color.black; } if (patrolManager.spreadGrid[n.gridX, n.gridY].current) { Gizmos.color = Color.gray; if (patrolManager.spreadGrid[n.gridX, n.gridY].dir == new Vector2Int(0, 1)) { Gizmos.color = new Color(1, 0, 0); } else if (patrolManager.spreadGrid[n.gridX, n.gridY].dir == new Vector2Int(-1, 0)) { Gizmos.color = new Color(0, 0, 1); } else if (patrolManager.spreadGrid[n.gridX, n.gridY].dir == new Vector2Int(1, 0)) { Gizmos.color = new Color(0, 1, 0); } else if (patrolManager.spreadGrid[n.gridX, n.gridY].dir == new Vector2Int(0, -1)) { Gizmos.color = new Color(0.5f, 0, 0); } else if (patrolManager.spreadGrid[n.gridX, n.gridY].dir == new Vector2Int(-1, 1)) { Gizmos.color = new Color(1, 0, 1); } else if (patrolManager.spreadGrid[n.gridX, n.gridY].dir == new Vector2Int(1, 1)) { Gizmos.color = new Color(1, 1, 0); } else if (patrolManager.spreadGrid[n.gridX, n.gridY].dir == new Vector2Int(-1, -1)) { Gizmos.color = new Color(0.6f, 0, 0.8f); } else if (patrolManager.spreadGrid[n.gridX, n.gridY].dir == new Vector2Int(1, -1)) { Gizmos.color = new Color(0.6f, 0.8f, 0f); } } //if (patrolManager.spreadGrid[n.gridX, n.gridY].close) Gizmos.color = Color.black; if (patrolManager.choosenNodeDic.ContainsKey(new Vector2Int(n.gridX, n.gridY))) { if (patrolManager.choosenNodeDic.ContainsKey(new Vector2Int(n.gridX, n.gridY))) { Gizmos.color = new Color(0, 1, 1); } //if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count > 2) //{ // if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count == 3) Gizmos.color = new Color(1, 0, 1); // else if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count == 4) Gizmos.color = new Color(0.5f, 0, 0); // else if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count == 5) Gizmos.color = new Color(0, 0, 0.5f); // else if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count == 6) Gizmos.color = new Color(0.2f, 0.2f, 0.2f); // else Gizmos.color = new Color(0, 0, 0); //} //else { // if(patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count == 2) Gizmos.color = new Color(0, 1, 1); // else if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count == 1) Gizmos.color = new Color(0, 0.5f, 0); // else if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count == 0) Gizmos.color = new Color(0, 0.3f, 0); //} } //if (patrolManager.confirmGraphNodeDic.ContainsKey(new Vector2Int(n.gridX, n.gridY))) //{ // if (patrolManager.confirmGraphNodeDic[new Vector2Int(n.gridX, n.gridY)].crossNode) Gizmos.color = new Color(1, 0, 1); // else Gizmos.color = Color.red; //} } else if (drawType == DrawType.GraphConnect) { Gizmos.color = Color.white; if (!n.walkable) { Gizmos.color = Color.black; } //if (patrolManager.spreadGrid[n.gridX, n.gridY].choosen) Gizmos.color = Color.gray; if (patrolManager.choosenNodeDic.ContainsKey(new Vector2Int(n.gridX, n.gridY))) { if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count <= 0) { Gizmos.color = Color.grey; } else { Gizmos.color = new Color(0, 1, 1); } if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].crossNode || patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].beenMerged) { Gizmos.color = new Color(1, 0, 1); } else if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].turnNode) { Gizmos.color = new Color(0.9f, 0.9f, .0f); } else if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].endNode) { Gizmos.color = Color.blue; } //else if (patrolManager.choosenNodeDic[new Vector2Int(n.gridX, n.gridY)].neighbor.Count < 2) Gizmos.color = Color.green; } //if (patrolManager.confirmGraphNodeDic.ContainsKey(new Vector2Int(n.gridX, n.gridY))) //{ // Gizmos.color = Color.red; //} if (patrolManager.connectNeighbor != null && n.gridX == patrolManager.connectNeighbor.pos.x && n.gridY == patrolManager.connectNeighbor.pos.y) { Gizmos.color = Color.gray; } } Gizmos.DrawCube(n.worldPosition, Vector3.one * (nodeDiameter)); Gizmos.color = new Color(0, 0, 0); //Gizmos.DrawWireCube(n.worldPosition, Vector3.one * (nodeDiameter)); } } //return; if (patrolManager != null) { float height = 5; Dictionary <Vector3, Vector3> exist = new Dictionary <Vector3, Vector3>(); height += 1.0f; for (int i = 0; i < patrolManager.ConfirmGraph.Count; i++) { Gizmos.color = Color.red; PatrolManager.PatrolGraphNode node = patrolManager.ConfirmGraph[i]; Vector3 from = new Vector3(node.pos.x, height, node.pos.z); foreach (KeyValuePair <PatrolManager.PatrolGraphNode, float> item in node.besideNodes) { //if (exist.ContainsKey(node.pos) && exist[node.pos] == item.Key.pos) continue; Vector3 to = new Vector3(item.Key.pos.x, height, item.Key.pos.z); Gizmos.DrawLine(from, to); } //height += 1.0f; } for (int i = 0; i < patrolManager.patrolPathes.Count; i++) { Gizmos.color = Color.cyan; for (int j = 1; j < patrolManager.patrolPathes[i].CurrentPath.lookPoints.Length; j++) { Vector3 from = new Vector3(patrolManager.patrolPathes[i].CurrentPath.lookPoints[j].x, height, patrolManager.patrolPathes[i].CurrentPath.lookPoints[j].z); Vector3 to = new Vector3(patrolManager.patrolPathes[i].CurrentPath.lookPoints[j - 1].x, height, patrolManager.patrolPathes[i].CurrentPath.lookPoints[j - 1].z); Gizmos.DrawLine(from, to); if (!exist.ContainsKey(from)) { exist.Add(from, to); } if (j == 1 && patrolManager.patrolPathes[i].LookAroundPoints(0) > 0) { Gizmos.DrawSphere(to, 0.5f); } if (patrolManager.patrolPathes[i].LookAroundPoints(j) > 0) { Gizmos.DrawSphere(from, 0.5f); } } //height += 1.0f; } } }