Beispiel #1
0
    public void AutoEatSpecialBlock()
    {
        SpecialBlockEffect eff = new SpecialBlockEffect(this, GameState.GAMEOVER);

        for (int row = 0; row < width; ++row)
        {
            for (int col = 0; col < height; ++col)
            {
                Block block = listBlocks[row, col];
                if (Block.IsSpecialBlock(block.type))
                {
                    eff.AddSpecialBlock(block);
                }
            }
        }

        if (eff.specialBlocks.Count > 0)
        {
            eff.Effect(eff.specialBlocks.Dequeue());
        }
        else
        {
            UnSelectBlockOnPath();

            foreach (Block block in suggetionMove.searchPath)
            {
                block.SetState(BlockState.Normal);
            }
            GameManager.instance.SetGameState(GameState.GAMEOVER);
        }
    }
Beispiel #2
0
    public void SetRun()
    {
        GameManager.instance.SetGameState(GameState.EFFECT);

        eff = new SpecialBlockEffect(BoardManager.instance);
        List <Block> blocks = new List <Block> ();

        int row = Random.Range(0, BoardManager.instance.height);
        int col = Random.Range(0, BoardManager.instance.width);

        Vector3 position = BoardManager.instance.GetBlock(row, col).transform.position;

        position.y        += Block.diff;
        position.x        += 0.4f * Block.diff;
        position.z         = -3;
        transform.position = position;

        Block block;

        for (int i = row - 1; i <= row + 1; ++i)
        {
            for (int j = col - 1; j <= col + 1; ++j)
            {
                if (i >= 0 && j >= 0 && j < BoardManager.instance.width && i < BoardManager.instance.height)
                {
                    if (i == row - 1 && j == col - 1 || i == row + 1 && j == col - 1 || i == row - 1 && j == col + 1 || i == row + 1 && j == col + 1)
                    {
                        continue;
                    }
                    block = BoardManager.instance.GetBlock(i, j);
                    if (!Block.IsSpecialBlock(block))
                    {
                        blocks.Add(block);
                    }
                    else
                    {
                        eff.AddSpecialBlock(block);
                    }
                    block.SetState(BlockState.Selected);
                }
            }
        }

        for (int i = 0; i < blocks.Count; ++i)
        {
            if (!BoardManager.instance.GetPath().Contains(blocks[i]))
            {
                BoardManager.instance.GetPath().Add(blocks[i]);
            }
        }

        gameObject.SetActive(true);
        if (SoundManager.instance != null)
        {
            SoundManager.instance.PlaySFX(SFX.BUNHIN);
        }
    }
Beispiel #3
0
 public void SetRun(SpecialBlockEffect effect)
 {
     parent             = transform.parent.gameObject.GetComponent <Block>();
     start              = BoardManager.instance.GetBlock(parent.y, 0).transform.position;
     transform.position = start;
     end         = BoardManager.instance.GetBlock(parent.y, BoardManager.instance.width - 1).transform.position;
     running     = true;
     this.effect = effect;
     blocks      = BoardManager.instance.GetRow(effect.block.y);
 }
Beispiel #4
0
    public override void SetRun()
    {
        GameManager.instance.SetGameState(GameState.EFFECT);
        int row = Random.Range(0, BoardManager.instance.height - 1);

        start = BoardManager.instance.GetBlock(row, 0).transform.position;
        end   = BoardManager.instance.GetBlock(row, BoardManager.instance.width - 1).transform.position;
        transform.position = start;
        isRunning          = true;
        gameObject.SetActive(true);

        //
        if (SoundManager.instance != null)
        {
            SoundManager.instance.PlaySFX(SFX.MAYCAY);
        }

        eff = new SpecialBlockEffect(BoardManager.instance);
        List <Block> blocks = new List <Block>();

        Block block;

        for (int col = 0; col < BoardManager.instance.width; ++col)
        {
            block = BoardManager.instance.GetBlock(row, col);
            if (!Block.IsSpecialBlock(block))
            {
                blocks.Add(block);
            }
            else
            {
                eff.AddSpecialBlock(block);
            }
            block.SetState(BlockState.Selected);
        }

        for (int i = 0; i < blocks.Count; ++i)
        {
            if (!BoardManager.instance.GetPath().Contains(blocks[i]))
            {
                BoardManager.instance.GetPath().Add(blocks[i]);
            }
        }
    }
Beispiel #5
0
 public void StartEffect(SpecialBlockEffect effect)
 {
     count       = 0;
     this.effect = effect;
 }
Beispiel #6
0
    void Update()
    {
        if (GameManager.instance.gameState == GameState.PLAYING)
        {
            if (Input.GetMouseButtonDown(0))
            {
                Vector2      worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                RaycastHit2D hit        = Physics2D.Raycast(worldPoint, Vector2.zero);

                //If something was hit, the RaycastHit2D.collider will not be null.
                if (hit.collider != null)
                {
                    if (hit.collider.tag == "BlockingMaterial")
                    {
                        return;
                    }
                    Block block = hit.collider.gameObject.GetComponent <Block>();
                    if (block == null)
                    {
                        Debug.Log("Get component Block false");
                        return;
                    }


                    if (hit.collider.tag == "SpecialBlock")
                    {
                        SpecialBlockEffect eff = new SpecialBlockEffect(BoardManager.instance);
                        block.SetState(BlockState.Selected);
                        eff.Effect(block);
                    }
                }
            }

            if (Input.GetMouseButton(0))
            {
                Vector2      worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                RaycastHit2D hit        = Physics2D.Raycast(worldPoint, Vector2.zero);

                //If something was hit, the RaycastHit2D.collider will not be null.
                if (hit.collider != null)
                {
                    if (hit.collider.tag == "BlockingMaterial")
                    {
                        return;
                    }
                    Block block = hit.collider.gameObject.GetComponent <Block>();
                    if (block == null)
                    {
                        Debug.Log("Get component NormalBlock false");
                        return;
                    }

                    if (hit.collider.tag == "NormalBlock")
                    {
                        BoardManager.instance.AddBlockToPath(block);
                    }
                }
            }

            if (Input.GetMouseButtonUp(0))
            {
                Block.observers.Clear();


                if (BoardManager.instance.CheckSameTypeInPath() == true)
                {
                    ItemEffect.instance.type = BoardManager.instance.GetPath()[0].type;
                    Block.observers.Add(ItemEffect.instance);
                }
                else
                {
                    Block.observers.Add(GameManager.instance);
                }


                //Block.numBlock = 0;
                //Block.numHandled = 0;
                Block.PrepareEatBlock();
                BoardManager.instance.EatBlocks();
            }
        }
    }