Color GetColorWalk(PathfindNode node) { Color GizmoColor = NotWalkableColor; PathfindNodeGroupParameter param = node.GetParameter(drawWalkType); if (param.Enable) { GizmoColor = WalkableColor; } return(GizmoColor); }
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); }
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); }
// 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); }
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); }
//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); } }