Exemplo n.º 1
0
        Color GetColorWalk(PathfindNode node)
        {
            Color GizmoColor = NotWalkableColor;
            PathfindNodeGroupParameter param = node.GetParameter(drawWalkType);

            if (param.Enable)
            {
                GizmoColor = WalkableColor;
            }
            return(GizmoColor);
        }
Exemplo n.º 2
0
        Color GetColorGroup(PathfindNode node)
        {
            Color GizmoColor = Color.white;

            GizmoColor.a = 0;
            PathfindNodeGroupParameter param = node.GetParameter(drawWalkType);

            if (param.Enable)
            {
                GizmoColor = GetColorFromGoupID(param.Group);
                if (param.GroupBridge.Count > 0)
                {
                    GizmoColor = Color.white;
                }
            }
            return(GizmoColor);
        }
Exemplo n.º 3
0
        private bool HasLinkBetween(int startGroup, int endGroup, WalkType walkType, ref List <int> linkedGroups)
        {
            bool HasNewGroups = false;

            for (int bri = instance.Bridges.Count - 1; bri >= 0; bri--)
            {
                PathfindNode bridge = instance.Bridges [bri];
                PathfindNodeGroupParameter groupParameter = bridge.GetParameter(walkType);
                bool containsPreviousGroup = linkedGroups.Contains(groupParameter.Group);
                for (int i = 0; i < groupParameter.GroupBridge.Count; i++)
                {
                    int bridgeGroup = groupParameter.GroupBridge [i];
                    if (linkedGroups.Contains(bridgeGroup))
                    {
                        containsPreviousGroup = true;
                    }
                }

                if (containsPreviousGroup)
                {
                    if (linkedGroups.Contains(groupParameter.Group) == false)
                    {
                        HasNewGroups = true;
                        linkedGroups.Add(groupParameter.Group);
                    }
                    for (int i = 0; i < groupParameter.GroupBridge.Count; i++)
                    {
                        int bridgeGroup = groupParameter.GroupBridge [i];
                        if (linkedGroups.Contains(bridgeGroup) == false)
                        {
                            HasNewGroups = true;
                            linkedGroups.Add(bridgeGroup);
                        }
                    }
                }
            }
            if (HasNewGroups)
            {
                return(HasLinkBetween(startGroup, endGroup, walkType, ref linkedGroups));
            }
            else
            {
                return(linkedGroups.Contains(endGroup));
            }
            return(false);
        }
Exemplo n.º 4
0
//		public void BuildParameter()
//		{
//			CreateParameter();
//			if(Walkable == false)
//			{
//				int t=0;
//				t++;
//			}
//			GetParameter((int)WalkType.Walk).Enable = Walkable;
//			GetParameter((int)WalkType.Fly).Enable = Flyable;
//
//			GetParameter((int)WalkType.Walk).Group = Group;
//			GetParameter((int)WalkType.Fly).Group = 0;
//		}
        public PathfindNodeGroupParameter GetParameter(WalkType type)
        {
            if (listParameters == null)
            {
                CreateParameter();
            }

            foreach (PathfindNodeGroupParameter param in listParameters)
            {
                if (param.WalkType == type)
                {
                    return(param);
                }
            }
            PathfindNodeGroupParameter newparam = new PathfindNodeGroupParameter(type);

            listParameters.Add(newparam);

            return(newparam);
        }
Exemplo n.º 5
0
        static List <PathfindNode> GetAllBridges(int from, int to, WalkType walkType)
        {
            List <PathfindNode> tmpIntermediate = new List <PathfindNode>();

            for (int bri = instance.Bridges.Count - 1; bri >= 0; bri--)
            {
                PathfindNode bridge = instance.Bridges [bri];
                PathfindNodeGroupParameter groupParameter = bridge.GetParameter(walkType);
                if (groupParameter.Group == from || groupParameter.Group == to)
                {
                    for (int i = 0; i < groupParameter.GroupBridge.Count; i++)
                    {
                        int bridgeGroup = groupParameter.GroupBridge [i];
                        if (bridgeGroup == to || bridgeGroup == from)
                        {
                            tmpIntermediate.Add(bridge);
                        }
                    }
                }
            }
            return(tmpIntermediate);
        }
Exemplo n.º 6
0
        //return succes
        private static bool GetIntermediatesPoint(int startGroup, int endGroup, WalkType walkType, ref List <int> WalkedGroup, ref List <PathfindNode> intermediate, PathfindNode targetPoint)
        {
            List <PathfindNode> tmpIntermediate  = new List <PathfindNode>();
            List <PathfindNode> stepIntermediate = new List <PathfindNode>();

            for (int bri = instance.Bridges.Count - 1; bri >= 0; bri--)
            {
                PathfindNode bridge = instance.Bridges [bri];
                PathfindNodeGroupParameter groupParameter = bridge.GetParameter(walkType);
                if (groupParameter.Group == startGroup || groupParameter.Group == endGroup)
                {
                    for (int i = 0; i < groupParameter.GroupBridge.Count; i++)
                    {
                        int bridgeGroup = groupParameter.GroupBridge [i];
                        if (bridgeGroup == endGroup || bridgeGroup == startGroup)
                        {
                            groupParameter.GroupBridge [i] = endGroup;
                            groupParameter.Group           = startGroup;
                            tmpIntermediate.Add(bridge);
                        }
                    }
                }
            }
            if (tmpIntermediate.Count > 0)
            {
                int bestBridge = GetBestBridgeIn(walkType, tmpIntermediate, intermediate [intermediate.Count - 1], targetPoint);
                intermediate.Add(tmpIntermediate [bestBridge]);
                PathfindNodeGroupParameter NextPointIntermediate = tmpIntermediate [bestBridge].GetParameter(walkType);
                return(true);
            }
            else
            {
                WalkedGroup.Add(startGroup);
                for (int bri = instance.Bridges.Count - 1; bri >= 0; bri--)
                {
                    PathfindNode bridge = instance.Bridges [bri];
                    PathfindNodeGroupParameter groupParameter = bridge.GetParameter(walkType);
                    List <int> bridgeGroups = new List <int>(groupParameter.GroupBridge);
                    bridgeGroups.Add(groupParameter.Group);
                    if (bridgeGroups.Contains(startGroup))
                    {
                        for (int i = 0; i < bridgeGroups.Count; i++)
                        {
                            if (WalkedGroup.Contains(bridgeGroups[i]) == false)
                            {
                                int newGroupIndex = bridgeGroups[i];
                                List <PathfindNode> localBridges = GetAllBridges(bridgeGroups[i], startGroup, walkType);
                                int          bestBridgeIndex     = GetBestBridgeIn(walkType, localBridges, intermediate [intermediate.Count - 1], targetPoint);
                                PathfindNode bestBridge          = null;
                                if (bestBridgeIndex >= 0)
                                {
                                    bestBridge = localBridges[bestBridgeIndex];
                                }
                                else
                                {
                                    Debug.Log("can't find bestbrige");
                                    Debug.Break();
                                }
                                intermediate.Add(bestBridge);
                                if (GetIntermediatesPoint(bridgeGroups[i], endGroup, walkType, ref WalkedGroup, ref intermediate, targetPoint))
                                {
                                    return(true);
                                }
                                else
                                {
                                    intermediate.Remove(bestBridge);
                                }
                            }
                        }
                    }
                }
                return(false);
            }
        }