Пример #1
0
    // 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));
            }
        }
    }
Пример #2
0
    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;
        }
    }