예제 #1
0
    /// <summary>
    /// When you click a square this code is called. Code checks if a square contains a piece you have or if a square clicked is an allowed move.
    /// </summary>
    /// <param name="square"></param>
    public void SquareClicked(SquareBehaviour square)
    {
        if (square.Square.PieceContainer != null && square.Square.PieceContainer.Propietary.Equals(GameController.Instance.ActualPlayer) &&
            (activeSquare == null || activeSquare.Square.PieceContainer.Propietary.Equals(square.Square.PieceContainer.Propietary)) &&
            square.Square.PieceContainer.Propietary.Type == Player.PlayerType.HUMAN)
        {
            ResetMoves();
            activeSquare        = square;
            possibleMovesActive = activeSquare.Square.PieceContainer.PossibleMoves;
            for (int i = 0; i < possibleMovesActive.Count; i++)
            {
                possibleMovesActive[i].Square.RelatedBehaviour.MarkPossible();
            }
        }

        else if (activeSquare != null && square.BlockColor)
        {
            activeSquare.Square.PieceContainer.Move(square);
            GetMoveFromPossibles(square.Square).RunCallback();
            activeSquare = null;
            ResetMoves();
            GameController.Instance.ChangeTurns();
            GameController.Instance.EvaluatePlayers();
        }
    }
예제 #2
0
 private void CommanderEnteredHandler(SquareBehaviour s, Commander c)
 {
     if (s.getSerialNr() > highestNr)
     {
         highestNr = s.getSerialNr();
     }
 }
예제 #3
0
 public virtual void Move(SquareBehaviour destiny)
 {
     this.Move(destiny.Square);
     if (behaviour != null)
     {
         this.behaviour.transform.DOMove(new Vector3(destiny.transform.position.x, this.behaviour.transform.position.y, destiny.transform.position.z), 1);
     }
 }
예제 #4
0
    //to be called by level builder to make sure each new square connects to the previous
    public void LinkToPrevious(SquareBehaviour prev)
    {
        // we need to match our entrance with the previous exit:
        Vector3 move = prev.exit.position - this.entrance.position;

        //now move the whole square
        this.transform.position += move;
    }
예제 #5
0
    private SquareBehaviour GenerateSquare()
    {
        SquareBehaviour result = Instantiate <SquareBehaviour>(prefabs[prefabIndex++]);

        result.transform.SetParent(this.transform);
        result.CommanderEnteredEvent += CommanderEnteredHandler;
        result.LinkToPrevious(connectSquare);
        BuildFollowers(result.transform);
        return(result);
    }
예제 #6
0
 public void AddSquareFromTutorial(SquareBehaviour s)
 {
     if (s.getSerialNr() < connectSquare.getSerialNr())
     {
         Debug.LogError("squares from tutorial have been added in the wrong sequence; this would have them destroyed in the wrong order");
     }
     else
     {
         this.connectSquare = s;
     }
     s.CommanderEnteredEvent += CommanderEnteredHandler;
     levels.Enqueue(s);
 }
예제 #7
0
    private void Update()
    {
        while (connectSquare.getSerialNr() < (highestNr + SquaresAhead))
        {
            connectSquare = GenerateSquare();
            levels.Enqueue(connectSquare);
        }

        while (levels.Count > SquaresTotal)
        {
            SquareBehaviour trail = levels.Dequeue();
            trail.Dissolve();
            levels.Peek().CloseStart();
        }
    }
예제 #8
0
    private void Start()
    {
        levels = new Queue <SquareBehaviour>();
        //connectSquare = Instantiate<SquareBehaviour>(prefabs[Random.Range(0, prefabs.Length)]);
        //connectSquare.transform.position = Vector3.zero;
        SquareBehaviour lastSquare = connectSquare;

        for (int i = 0; i < fixedSequence.Length; ++i)
        {
            var             t = fixedSequence[i];
            SquareBehaviour n = Instantiate <SquareBehaviour>(t);
            n.transform.SetParent(this.transform);
            n.LinkToPrevious(lastSquare);
            BuildFollowers(n.transform, ((float)fixedSequence.Length) / i, i);
            levels.Enqueue(n);
            lastSquare = n;
        }
    }
예제 #9
0
    /// <summary>
    /// Instantiate a Piece of the given Type in a given square of the board.
    /// </summary>
    /// <param name="type"></param>
    /// <param name="squareBehaviour"></param>
    /// <param name="player"></param>
    public void InstantiatePiece(PieceType type, SquareBehaviour squareBehaviour, Player player)
    {
        GameObject prefab = null;

        switch (type)
        {
        case PieceType.PAWN:
            prefab = pawnPrefab;
            break;

        case PieceType.QUEEN:
            prefab = queenPrefab;
            break;

        case PieceType.ROOK:
            prefab = rookPrefab;
            break;

        case PieceType.KNIGHT:
            prefab = knightPrefab;
            break;

        case PieceType.KING:
            prefab = kingPrefab;
            break;

        case PieceType.BISHOP:
            prefab = bishopPrefab;
            break;
        }


        var piece = ((GameObject)Instantiate(prefab)).GetComponent <PieceBehaviour>();

        piece.InitGraphics(player.ID);
        piece.ChangeMaterial(player.AsignedMaterial);
        piece.transform.position = new Vector3(squareBehaviour.transform.position.x, piece.transform.position.y, squareBehaviour.transform.position.z);
        squareBehaviour.Square.SetNewPiece(piece.Piece);
        piece.Piece.SetPropietary(player);
    }
예제 #10
0
 public override void Move(SquareBehaviour destiny)
 {
     base.Move(destiny);
     positionInitial = false;
 }
예제 #11
0
 public override void Move(SquareBehaviour destiny)
 {
     base.Move(destiny);
     isMoved = true;
 }