// Följande startar hela uträkningen för vart en pjäs kan gå: public void MarblePicked(GameObject marble, GameObject position, bool jumpOnly, Minimax node, NpcBehaviour npcPlayerToLookAt) { currentMarble = marble; List <PossibleMove> firstLegalMoves = new List <PossibleMove>(); List <NewTileScript> legalMoves = new List <NewTileScript>(); marblePickedUp = true; currentPosition = position; neighbours = currentPosition.GetComponent <NewTileScript>().myNeighbours; for (int i = 0; i < neighbours.Count; i++) { if (!neighbours[i].GetComponent <NewTileScript>().taken) { if (!jumpOnly) { if (playerState == PlayerState.Player) { neighbours[i].GetComponent <NewTileScript>().moveHere = true; possibleMoves.Add(neighbours[i]); Behaviour halo = (Behaviour)neighbours[i].GetComponent("Halo"); halo.enabled = true; } else if (playerState == PlayerState.Npc || playerState == PlayerState.NpcMinimax) { // Här sätts närliggande positioner som npc kan gå till: legalMoves.Add(neighbours[i].GetComponent <NewTileScript>()); firstLegalMoves.Add(new PossibleMove(marble.GetComponent <MarbleScript>(), neighbours[i].GetComponent <NewTileScript>())); possibleMoves.Add(neighbours[i]); if (node != null && i == neighbours.Count - 1 && legalMoves != null && legalMoves.Count > 0) { node.AllMoves(legalMoves); } if (firstLegalMoves != null && firstLegalMoves.Count > 0) { npcPlayerToLookAt.FirstLegalMoves = firstLegalMoves; } } } } // Hoppa: else { string direction = currentPosition.GetComponent <NewTileScript>().directions[i]; StartCoroutine(CalculateNeighbours(neighbours[i], false, direction, marble, node, legalMoves, jumpOnly, firstLegalMoves, npcPlayerToLookAt)); } } }
public IEnumerator CalculateNeighbours (GameObject tile, bool instantiateBoard, string direction, GameObject marble, Minimax node, List <NewTileScript> legalMoves, bool jumpOnly, List <PossibleMove> firstLegalMoves, NpcBehaviour npcPlayerToLookAt) { if (!GetComponent <InstantiateBoard>().allTilesInstantiated) { yield return(new WaitUntil(() => GetComponent <InstantiateBoard>().allTilesInstantiated)); } allTiles = GetComponent <InstantiateBoard>().allTiles; directions.Clear(); xValues.Clear(); yValues.Clear(); int tileX = tile.GetComponent <NewTileScript>().x; int tileY = tile.GetComponent <NewTileScript>().y; #region Calculate Neighbours: if (tile.GetComponent <NewTileScript>().everyOtherRow) { //Upp höger: xValues.Add(tileX); yValues.Add(tileY + 1); directions.Add("UpRight"); //Upp vänster: xValues.Add(tileX - 1); yValues.Add(tileY + 1); directions.Add("UpLeft"); //Ner höger: xValues.Add(tileX); yValues.Add(tileY - 1); directions.Add("DownRight"); //Ner vänster: xValues.Add(tileX - 1); yValues.Add(tileY - 1); directions.Add("DownLeft"); } else { //Upp höger: xValues.Add(tileX + 1); yValues.Add(tileY + 1); directions.Add("UpRight"); //Upp vänster: xValues.Add(tileX); yValues.Add(tileY + 1); directions.Add("UpLeft"); //Ner höger: xValues.Add(tileX + 1); yValues.Add(tileY - 1); directions.Add("DownRight"); //Ner vänster: xValues.Add(tileX); yValues.Add(tileY - 1); directions.Add("DownLeft"); } //Vänster: xValues.Add(tileX - 1); yValues.Add(tileY); directions.Add("Left"); //Höger: xValues.Add(tileX + 1); yValues.Add(tileY); directions.Add("Right"); #endregion for (int i = 0; i < allTiles.Count; i++) { for (int q = 0; q < xValues.Count; q++) { if (xValues[q] == allTiles[i].GetComponent <NewTileScript>().x&& yValues[q] == allTiles[i].GetComponent <NewTileScript>().y) { if (instantiateBoard) { tile.GetComponent <NewTileScript>().SetMyNeighbours(allTiles[i], directions[q]); } // Hoppa: else { if (!allTiles[i].GetComponent <NewTileScript>().taken) { if (directions[q] == direction) { allTiles[i].GetComponent <NewTileScript>().jumpPosition = true; if (playerState == PlayerState.Player) { allTiles[i].GetComponent <NewTileScript>().moveHere = true; possibleMoves.Add(allTiles[i]); Behaviour halo = (Behaviour)allTiles[i].GetComponent("Halo"); halo.enabled = true; } else if (playerState == PlayerState.Npc || playerState == PlayerState.NpcMinimax) { // Här sätts hopp-positioner för npc: legalMoves.Add(allTiles[i].GetComponent <NewTileScript>()); firstLegalMoves.Add(new PossibleMove(marble.GetComponent <MarbleScript>(), allTiles[i].GetComponent <NewTileScript>())); possibleMoves.Add(allTiles[i]); } } } } } } } if (node != null) { if (jumpOnly) { node.Jump(legalMoves); } else { node.AllMoves(legalMoves); } } if (firstLegalMoves != null && firstLegalMoves.Count > 0) { npcPlayerToLookAt.FirstLegalMoves = firstLegalMoves; } }