private void SetSlider(Slider slider, ImgNode handlePos, GroupNode groupPos) { var hRect = handlePos.rect; var gRect = groupPos.rect; if (gRect.width > gRect.height) { if (hRect.x > gRect.x) { slider.direction = Slider.Direction.LeftToRight; } else { slider.direction = Slider.Direction.RightToLeft; } } else { if (hRect.y > gRect.y) { slider.direction = Slider.Direction.BottomToTop; } else { slider.direction = Slider.Direction.TopToBottom; } } }
private void DrawImages(InputField inputfield, UGUINode node, GroupNode layer) { if (layer.images != null) { for (int i = 0; i < layer.images.Count; i++) { ImgNode image = layer.images[i]; if (image.type == ImgType.Label && MatchAddress(image.Name, rule.titleAddress)) { UnityEngine.UI.Text text = (UnityEngine.UI.Text)inputfield.textComponent;//inputfield.transform.Find("Text").GetComponent<UnityEngine.UI.Text>(); var childNode = CreateNormalNode(text.gameObject, image.rect, node); childNode.anchoType = AnchoType.XStretch | AnchoType.YStretch; PSDImporterUtility.SetPictureOrLoadColor(image, text); } else if (image.type == ImgType.Label && MatchAddress(image.Name, rule.placeAddress)) { UnityEngine.UI.Text text = (UnityEngine.UI.Text)inputfield.placeholder;//.transform.Find("Placeholder").GetComponent<UnityEngine.UI.Text>(); var childNode = CreateNormalNode(text.gameObject, image.rect, node); childNode.anchoType = AnchoType.XStretch | AnchoType.YStretch; PSDImporterUtility.SetPictureOrLoadColor(image, text); } else if (MatchAddress(image.Name, rule.backgroundAddress)) { PSDImporterUtility.SetPictureOrLoadColor(image, inputfield.image); SetRectTransform(image.rect, inputfield.GetComponent <RectTransform>()); } else { ctrl.DrawImage(image, node); } } } }
/// <summary> /// 初始化按扭为text或image /// </summary> /// <param name="image"></param> /// <param name="button"></param> private void InitButton(ImgNode image, UnityEngine.UI.Button button) { if (image.type == ImgType.Label) { var text = button.GetComponent <UnityEngine.UI.Text>(); if (text == null) { text = button.gameObject.AddComponent <UnityEngine.UI.Text>(); button.targetGraphic = text; SetRectTransform(image.rect, text.rectTransform); #if UNITY_EDITOR UnityEditorInternal.ComponentUtility.MoveComponentUp(text); #endif } } else { var img = button.GetComponent <UnityEngine.UI.Image>(); if (img == null) { img = button.gameObject.AddComponent <UnityEngine.UI.Image>(); button.targetGraphic = img; #if UNITY_EDITOR UnityEditorInternal.ComponentUtility.MoveComponentUp(img); #endif } } }
/// <summary> /// 绘制图片 /// </summary> /// <param name="layer"></param> /// <param name="node"></param> /// <param name="background"></param> private void DrawImages(GroupNode layer, UGUINode node, out Graphic background) { background = null; for (int i = 0; i < layer.images.Count; i++) { ImgNode image = layer.images[i]; if (MatchAddress(image.Name, rule.backgroundAddress)) { if (image.type == ImgType.Texture) { background = node.InitComponent <UnityEngine.UI.RawImage>(); } else { background = node.InitComponent <UnityEngine.UI.Image>(); } if (background) { PSDImporterUtility.SetPictureOrLoadColor(image, background); SetRectTransform(image.rect, background.GetComponent <RectTransform>()); background.name = layer.displayName; } } else { ctrl.DrawImage(image, node); } } }
private void DrawImages(List <ImgNode> images, Scrollbar scrollbar, UGUINode node) { for (int i = 0; i < images.Count; i++) { ImgNode image = images[i]; UnityEngine.UI.Image graph = null; if (MatchAddress(image.Name, rule.backgroundAddress)) { graph = scrollbar.GetComponent <UnityEngine.UI.Image>(); SetRectTransform(image.rect, scrollbar.GetComponent <RectTransform>()); } else if (MatchAddress(image.Name, rule.handleAddress)) { graph = scrollbar.handleRect.GetComponent <UnityEngine.UI.Image>(); } else { ctrl.DrawImage(image, node); } if (graph != null) { PSDImporterUtility.SetPictureOrLoadColor(image, graph); } } }
/// <summary> /// 设置图片切换规则 /// </summary> /// <param name="image"></param> /// <param name="button"></param> private void SetSpriteSwipe(ImgNode image, UnityEngine.UI.Button button) { if (MatchAddress(image.Name, rule.normalAddress)) { if (image.type == ImgType.Label) { (button.targetGraphic as UnityEngine.UI.Text).text = image.text; } else { button.image.sprite = image.sprite; } } else if (MatchAddress(image.Name, rule.pressedAddress)) { button.transition = UnityEngine.UI.Selectable.Transition.SpriteSwap; UnityEngine.UI.SpriteState state = button.spriteState; state.pressedSprite = image.sprite; button.spriteState = state; } else if (MatchAddress(image.Name, rule.disableAddress)) { button.transition = UnityEngine.UI.Selectable.Transition.SpriteSwap; UnityEngine.UI.SpriteState state = button.spriteState; state.disabledSprite = image.sprite; button.spriteState = state; } else if (MatchAddress(image.Name, rule.highlightedAddress)) { button.transition = UnityEngine.UI.Selectable.Transition.SpriteSwap; UnityEngine.UI.SpriteState state = button.spriteState; state.highlightedSprite = image.sprite; button.spriteState = state; } }
private void SetSpriteSwipe(ImgNode image, UnityEngine.UI.Button button) { string lowerName = image.Name.ToLower(); if (lowerName.StartsWith("n_")) { button.image.sprite = image.sprite; } else if (lowerName.StartsWith("p_")) { button.transition = UnityEngine.UI.Selectable.Transition.SpriteSwap; UnityEngine.UI.SpriteState state = button.spriteState; state.pressedSprite = image.sprite; button.spriteState = state; } else if (lowerName.StartsWith("d_")) { button.transition = UnityEngine.UI.Selectable.Transition.SpriteSwap; UnityEngine.UI.SpriteState state = button.spriteState; state.disabledSprite = image.sprite; button.spriteState = state; } else if (lowerName.StartsWith("h_")) { button.transition = UnityEngine.UI.Selectable.Transition.SpriteSwap; UnityEngine.UI.SpriteState state = button.spriteState; state.highlightedSprite = image.sprite; button.spriteState = state; } }
/// <summary> /// 快速设置图片的内容 /// </summary> /// <param name="image"></param> /// <param name="graph"></param> public static void SetPictureOrLoadColor(ImgNode image, UnityEngine.UI.Graphic graph) { graph.color = image.color; switch (image.type) { case ImgType.Image: ((UnityEngine.UI.Image)graph).sprite = image.sprite; break; case ImgType.Texture: ((UnityEngine.UI.RawImage)graph).texture = image.texture; break; case ImgType.Label: var myText = (UnityEngine.UI.Text)graph; myText.text = image.text; myText.fontSize = image.fontSize; break; case ImgType.AtlasImage: ((UnityEngine.UI.Image)graph).sprite = image.sprite; break; default: break; } }
public UGUINode DrawLayer(GroupNode layer, UGUINode parent) { UGUINode node = PSDImportUtility.InstantiateItem(GroupType.TOGGLE, layer.Name, parent);// GameObject.Instantiate(temp) as UnityEngine.UI.Toggle; UnityEngine.UI.Toggle toggle = node.InitComponent <UnityEngine.UI.Toggle>(); if (layer.images != null) { for (int imageIndex = 0; imageIndex < layer.images.Count; imageIndex++) { ImgNode image = layer.images[imageIndex]; string lowerName = image.Name.ToLower(); if (lowerName.StartsWith("b_")) { PSDImportUtility.SetPictureOrLoadColor(image, toggle.targetGraphic); PSDImportUtility.SetRectTransform(image, toggle.GetComponent <RectTransform>()); } else if (lowerName.StartsWith("m_")) { PSDImportUtility.SetPictureOrLoadColor(image, toggle.graphic); } else { ctrl.DrawImage(image, node); } } } return(node); }
/// <summary> /// 转换为组 /// </summary> /// <param name="layer"></param> /// <param name="group"></param> /// <param name="OnRetrive"></param> public static void RetriveLayerToSwitchModle(Vector2 rootSize, PsdLayer layer, GroupNode group, bool forceSprite = false) { if (!layer.IsGroup) { return; } else { foreach (var child in layer.Childs) { if (child.IsGroup) { GroupNode childNode = group.InsertChild(GetRectFromLayer(child)).Analyzing(rouleObj, child.Name); if (childNode != null) { group.groups.Add(childNode); RetriveLayerToSwitchModle(rootSize, child, childNode, forceSprite); } } else { ImgNode imgnode = AnalysisLayer(rootSize, child, forceSprite); if (imgnode != null) { group.images.Add(imgnode); } } } } }
private void DrawBackground(ImgNode bg, UGUINode node) { var bgnode = ctrl.DrawImage(bg, node); var graph = bgnode.InitComponent <UnityEngine.UI.Image>(); node.InitComponent <Slider>().targetGraphic = graph; PSDImporterUtility.SetPictureOrLoadColor(bg, graph); }
public override UGUINode DrawImage(ImgNode image, UGUINode parent) { UGUINode node = CreateRootNode(image.Name, AdjustTextRect(image.rect, image.fontSize), parent); UnityEngine.UI.Text myText = node.InitComponent <Text>(); PSDImporterUtility.SetPictureOrLoadColor(image, myText); return(node); }
public override UGUINode DrawImage(ImgNode image, UGUINode parent) { UGUINode node = CreateRootNode(image.Name, image.rect, parent); UnityEngine.UI.RawImage pic = node.InitComponent <UnityEngine.UI.RawImage>(); PSDImporterUtility.SetPictureOrLoadColor(image, pic); return(node); }
private UGUINode DrawRawImage(ImgNode image, UGUINode parent) { UGUINode node = PSDImportUtility.InstantiateItem(GroupType.RawIMAGE, image.sprite.name, parent); UnityEngine.UI.RawImage pic = node.InitComponent <UnityEngine.UI.RawImage>(); PSDImportUtility.SetPictureOrLoadColor(image, pic); PSDImportUtility.SetRectTransform(image, pic.GetComponent <RectTransform>()); return(node); }
public Render Visit(ImgNode node) { recursionLevel += 1; var render = new Render(recursionLevel, "img"); render.Content = node.Content.InnerHtml.ToString(); recursionLevel -= 1; return(render); }
private void DrawFill(ImgNode fill, UGUINode node) { var fillAreaNode = CreateNormalNode(new GameObject("Fill Area", typeof(RectTransform)), fill.rect, node); var fileNode = ctrl.DrawImage(fill, fillAreaNode); fileNode.InitComponent <Image>().type = Image.Type.Tiled; node.InitComponent <Slider>().fillRect = fileNode.InitComponent <RectTransform>(); }
private void DrawOtherLayers(GroupNode layer, UGUINode node) { for (int imageIndex = 0; imageIndex < layer.images.Count; imageIndex++) { ImgNode image = layer.images[imageIndex]; if (!MatchAddress(image.Name, rule.backgroundAddress, rule.maskAddress)) { ctrl.DrawImage(image, node); } } }
public UGUINode DrawLayer(GroupNode layer, UGUINode parent) { UGUINode node = PSDImportUtility.InstantiateItem(GroupType.SCROLLBAR, layer.Name, parent); Scrollbar scrollBar = node.InitComponent <Scrollbar>(); switch (layer.direction) { case Direction.LeftToRight: scrollBar.direction = Scrollbar.Direction.LeftToRight; break; case Direction.BottomToTop: scrollBar.direction = Scrollbar.Direction.BottomToTop; break; case Direction.TopToBottom: scrollBar.direction = Scrollbar.Direction.TopToBottom; break; case Direction.RightToLeft: scrollBar.direction = Scrollbar.Direction.RightToLeft; break; default: break; } for (int i = 0; i < layer.images.Count; i++) { ImgNode image = layer.images[i]; string lowerName = image.Name.ToLower(); UnityEngine.UI.Image graph = null; if (lowerName.StartsWith("b_")) { graph = scrollBar.GetComponent <UnityEngine.UI.Image>(); PSDImportUtility.SetRectTransform(image, scrollBar.GetComponent <RectTransform>()); scrollBar.name = layer.Name; } else if (lowerName.StartsWith("h_")) { graph = scrollBar.handleRect.GetComponent <UnityEngine.UI.Image>(); } if (graph == null) { //忽略Scorllbar其他的artLayer continue; } PSDImportUtility.SetPictureOrLoadColor(image, graph); } return(node); }
public UGUINode DrawImage(ImgNode image, UGUINode parent) { UGUINode node = imgImporterDic[image.type].DrawImage(image, parent); if (node == null) { Debug.Log(image.type); Debug.Log(image); Debug.Log(parent); } return(node); }
void IAstVisitor <ParsingContext> .Visit(ImgNode node, ParsingContext context) { context.Stack.Peek().Inlines.Add(new InlineUIContainer() { Child = new Border() { Height = 20, Width = 20, Background = new SolidColorBrush(Colors.Red) } }); }
public UGUINode DrawImage(ImgNode image, UGUINode parent) { UGUINode node = PSDImportUtility.InstantiateItem(GroupType.TEXT, image.Name, parent); UnityEngine.UI.Text myText = node.InitComponent <Text>(); PSDImportUtility.SetPictureOrLoadColor(image, myText); RectTransform rectTransform = myText.GetComponent <RectTransform>(); AdjustImage(image, myText.fontSize); rectTransform.sizeDelta = new Vector2(image.rect.width, image.rect.height); rectTransform.anchoredPosition = new Vector2(image.rect.x, image.rect.y); return(node); }
private void DrawImages(GroupNode layer, UGUINode node, ScrollRect scrollRect) { for (int i = 0; i < layer.images.Count; i++) { ImgNode image = layer.images[i]; if (MatchAddress(image.Name, rule.backgroundAddress)) { InitScrollViewBackground(node, image, scrollRect); } else { ctrl.DrawImage(image, node); } } }
private void DrawHandle(ImgNode handle, UGUINode node, GroupNode layer) { var slider = node.InitComponent <Slider>(); ImgNode bg = layer.images.Find(x => MatchAddress(x.Name, rule.backgroundAddress)); ImgNode fill = layer.images.Find(x => MatchAddress(x.Name, rule.fillAddress)); var tempRect = fill != null ? fill : bg; var rect = new Rect(tempRect.rect.x, tempRect.rect.y, tempRect.rect.width - handle.rect.width, tempRect.rect.height);//x,y 为中心点的坐标! var handAreaNode = CreateNormalNode(new GameObject("Handle Slide Area", typeof(RectTransform)), rect, node); var handNode = ctrl.DrawImage(handle, handAreaNode); slider.handleRect = handNode.InitComponent <RectTransform>(); ///设置handle最后的锚点类型 switch (layer.direction) { case Direction.LeftToRight: handNode.anchoType = AnchoType.Right | AnchoType.YStretch; break; case Direction.BottomToTop: handNode.anchoType = AnchoType.Up | AnchoType.XStretch; break; case Direction.TopToBottom: handNode.anchoType = AnchoType.Down | AnchoType.XStretch; break; case Direction.RightToLeft: handNode.anchoType = AnchoType.Left | AnchoType.YStretch; break; default: break; } handNode.inversionReprocess += (n) => { //写slider进行关联后,尺寸信息丢失 slider.handleRect.anchoredPosition = Vector3.zero; slider.handleRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, handle.rect.width); slider.handleRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, handle.rect.height); }; }
/// <summary> /// 设置颜色切换规则 /// </summary> /// <param name="image"></param> /// <param name="button"></param> private void SetColorSwipe(ImgNode image, UnityEngine.UI.Button button) { Color color = image.color; if (MatchAddress(image.Name, rule.normalAddress)) { if (image.type == ImgType.Label) { (button.targetGraphic as UnityEngine.UI.Text).text = image.text; } RectTransform rectTransform = button.GetComponent <RectTransform>(); rectTransform.sizeDelta = new Vector2(image.rect.width, image.rect.height); rectTransform.anchoredPosition = new Vector2(image.rect.x, image.rect.y); button.targetGraphic.color = color; button.transition = UnityEngine.UI.Selectable.Transition.ColorTint; UnityEngine.UI.ColorBlock state = button.colors; state.normalColor = color; button.colors = state; } else if (MatchAddress(image.Name, rule.pressedAddress)) { button.transition = UnityEngine.UI.Selectable.Transition.ColorTint; UnityEngine.UI.ColorBlock state = button.colors; state.pressedColor = color; button.colors = state; } else if (MatchAddress(image.Name, rule.disableAddress)) { button.transition = UnityEngine.UI.Selectable.Transition.ColorTint; UnityEngine.UI.ColorBlock state = button.colors; state.disabledColor = color; button.colors = state; } else if (MatchAddress(image.Name, rule.highlightedAddress)) { button.transition = UnityEngine.UI.Selectable.Transition.ColorTint; UnityEngine.UI.ColorBlock state = button.colors; state.highlightedColor = color; button.colors = state; } }
/// <summary> /// 将图层解析为imgNode /// </summary> /// <param name="rootSize"></param> /// <param name="layer"></param> /// <param name="forceSprite"></param> /// <returns></returns> public static ImgNode AnalysisLayer(string baseName, Vector2 rootSize, PsdLayer layer, bool forceSprite = false) { ImgNode data = null; var texture = CreateTexture(layer); var rect = GetRectFromLayer(layer); switch (layer.LayerType) { case LayerType.Normal: data = new ImgNode(baseName, rect, texture).SetIndex(CalcuteLayerID(layer)).Analyzing(ExportUtility.RuleObj, layer.Name); break; case LayerType.Color: if (forceSprite) { data = new ImgNode(baseName, rect, texture).SetIndex(CalcuteLayerID(layer)).Analyzing(ExportUtility.RuleObj, layer.Name); } else { data = new ImgNode(layer.Name, rect, GetLayerColor(layer)).SetIndex(CalcuteLayerID(layer)); } break; case LayerType.Text: var textInfo = layer.Records.TextInfo; var color = new Color(textInfo.color[0], textInfo.color[1], textInfo.color[2], textInfo.color[3]); data = new ImgNode(layer.Name, rect, textInfo.fontName, textInfo.fontSize, textInfo.text, color); break; case LayerType.Complex: if (!RuleObj.forceSprite) { Debug.LogError("you psd have some not supported layer.(defult layer is not supported)! \n make sure your layers is Intelligent object or color lump." + "\n ->Detail:" + layer.Name); } data = new ImgNode(baseName, rect, texture).SetIndex(CalcuteLayerID(layer)).Analyzing(ExportUtility.RuleObj, layer.Name); break; default: break; } return(data); }
/// <summary> /// 绘制所有image /// </summary> /// <param name="node"></param> /// <param name="layer"></param> /// <param name="dropdown"></param> /// <param name="toggle"></param> /// <param name="content"></param> private void DrawImages(UGUINode node, GroupNode layer, Dropdown dropdown, Toggle toggle, RectTransform content) { for (int i = 0; i < layer.images.Count; i++) { ImgNode image = layer.images[i]; if (MatchIDAddress(image.Name, 1, rule.backgroundsFormat)) { PSDImporterUtility.SetPictureOrLoadColor(image, dropdown.image); SetRectTransform(image.rect, dropdown.GetComponent <RectTransform>()); dropdown.name = layer.displayName; } else if (MatchIDAddress(image.Name, 2, rule.backgroundsFormat)) { PSDImporterUtility.SetPictureOrLoadColor(image, dropdown.template.GetComponent <Graphic>()); SetRectTransform(image.rect, dropdown.template); } else if (MatchIDAddress(image.Name, 3, rule.backgroundsFormat)) { UnityEngine.UI.Image itemimage = (UnityEngine.UI.Image)toggle.targetGraphic; PSDImporterUtility.SetPictureOrLoadColor(image, itemimage); content.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, image.rect.height); } else if (MatchIDAddress(image.Name, 1, rule.titlesFormat)) { PSDImporterUtility.SetPictureOrLoadColor(image, dropdown.captionText); } else if (MatchIDAddress(image.Name, 2, rule.titlesFormat)) { PSDImporterUtility.SetPictureOrLoadColor(image, dropdown.itemText); } else if (MatchAddress(image.Name, rule.maskAddress)) { UnityEngine.UI.Image mask = (UnityEngine.UI.Image)toggle.graphic; mask.enabled = true; PSDImporterUtility.SetPictureOrLoadColor(image, mask); } else { ctrl.DrawImage(image, node); } } }
public UGUINode DrawImage(ImgNode image, UGUINode parent) { UGUINode node = null; switch (image.type) { case ImgType.Image: case ImgType.AtlasImage: node = DrawNormalImage(image, parent); break; case ImgType.Texture: node = DrawRawImage(image, parent); break; default: break; } return(node); }
public UGUINode DrawImage(ImgNode image, UGUINode parent) { UGUINode node = null; switch (image.type) { case ImgType.Image: case ImgType.Texture: case ImgType.AtlasImage: node = spriteImport.DrawImage(image, parent); break; case ImgType.Label: node = textImport.DrawImage(image, parent); break; default: break; } return(node); }
/// <summary> /// 将图层解析为imgNode /// </summary> /// <param name="rootSize"></param> /// <param name="layer"></param> /// <param name="forceSprite"></param> /// <returns></returns> public static ImgNode AnalysisLayer(Vector2 rootSize, PsdLayer layer, bool forceSprite = false) { ImgNode data = null; var texture = CreateTexture(layer); var rect = GetRectFromLayer(layer); switch (layer.LayerType) { case LayerType.Normal: data = new ImgNode(rect, texture).Analyzing(PsdExportUtility.rouleObj, layer.Name); break; case LayerType.SolidImage: if (forceSprite) { data = new ImgNode(rect, texture).Analyzing(PsdExportUtility.rouleObj, layer.Name); } else { data = new ImgNode(layer.Name, rect, GetLayerColor(layer)); } break; case LayerType.Text: var textInfo = layer.Records.TextInfo; data = new ImgNode(layer.Name, rect, textInfo.fontName, textInfo.fontSize, textInfo.text, textInfo.color); break; case LayerType.Group: break; case LayerType.Divider: break; default: break; } return(data); }
private void SetColorSwipe(ImgNode image, UnityEngine.UI.Button button) { string lowerName = image.sprite.name.ToLower(); Color color = image.color; if (lowerName.StartsWith("n_")) { RectTransform rectTransform = button.GetComponent <RectTransform>(); rectTransform.sizeDelta = new Vector2(image.rect.width, image.rect.height); rectTransform.anchoredPosition = new Vector2(image.rect.x, image.rect.y); button.image.color = color; button.transition = UnityEngine.UI.Selectable.Transition.ColorTint; UnityEngine.UI.ColorBlock state = button.colors; state.normalColor = color; button.colors = state; } else if (lowerName.StartsWith("p_")) { button.transition = UnityEngine.UI.Selectable.Transition.ColorTint; UnityEngine.UI.ColorBlock state = button.colors; state.pressedColor = color; button.colors = state; } else if (lowerName.StartsWith("d_")) { button.transition = UnityEngine.UI.Selectable.Transition.ColorTint; UnityEngine.UI.ColorBlock state = button.colors; state.disabledColor = color; button.colors = state; } else if (lowerName.StartsWith("h_")) { button.transition = UnityEngine.UI.Selectable.Transition.ColorTint; UnityEngine.UI.ColorBlock state = button.colors; state.highlightedColor = color; button.colors = state; } }
// Nodes are added by moving a single cell. // Edges are initially one length edges. // Post processing can reduce the number of nodes. // // # # # // # X # // # # # // // X = Node checking. // # = Neighbour/Graph Edge checking. // public NavGraph constructGraph() { BasicNavGraph retGraph = new BasicNavGraph(); int nxtNodeID = 0; int nxtEdgeID = 0; Dictionary<string,int> coordToNodeIDMap = new Dictionary<string,int>(); Texture2D mapImg = Resources.Load<Texture2D>(imgPath); if(mapImg != null) { Color[] pixels = mapImg.GetPixels(); for(int r=0; r<mapImg.height; r++) { for(int c=0; c<mapImg.width; c++) { Color tmpPixel = pixels[(r * mapImg.width) + c]; if(tmpPixel.Equals(traversibleColor)) { // Add new node. ImgNode nwNode = new ImgNode(nxtNodeID,1,new int[2] { c,r }); retGraph.addNode(nwNode); coordToNodeIDMap.Add((""+c+"-"+r),nwNode.getNodeID()); nxtEdgeID++; // Get valid neighbourhood pixels. List<Color> neighbourhoodPixels = new List<Color>(); List<int[]> reqNPixCoords = new List<int[]>(); reqNPixCoords.Add(new int[2]{(c-1),(r-1)}); reqNPixCoords.Add(new int[2]{(c),(r-1)}); reqNPixCoords.Add(new int[2]{(c+1),(r-1)}); reqNPixCoords.Add(new int[2]{(c-1),(r)}); List<int> validCoordIndexList = new List<int>(); for(int k=0; k<reqNPixCoords.Count; k++) { int[] tmpCoords = reqNPixCoords[k]; if((tmpCoords[0] >= 0)&&(tmpCoords[0] < mapImg.width) &&(tmpCoords[1] >= 0)&&(tmpCoords[1] < mapImg.height)) { // Valid coords. validCoordIndexList.Add(k); neighbourhoodPixels.Add( pixels[(tmpCoords[1] * mapImg.width) + tmpCoords[0]] ); } } // Check for neighbours and create edges. (NavGraph will handle the internal creation of neighbour references, just run addEdge). for(int k=0; k<validCoordIndexList.Count; k++) { if(neighbourhoodPixels[k].Equals(traversibleColor)) { int[] neighbourCoords = reqNPixCoords[k]; int neighbourID = coordToNodeIDMap[(""+neighbourCoords[0]+"-"+neighbourCoords[1])]; retGraph.addEdge(nwNode.getNodeID(),neighbourID,new NavEdge(new int[2] {nwNode.getNodeID(),neighbourID},1)); } } } } } } return retGraph; }