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);
    }
Exemple #3
0
        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;
                }
            }
        }