Ejemplo n.º 1
0
 void gameStart()
 {
     isPause               = false;
     isGameOver            = false;
     oryorCharge           = 0;
     oryorGauge.fillAmount = 0f;
     levelController.Reset();
     ProductFactory.GetInstance().GenerateProduct();
 }
Ejemplo n.º 2
0
 void gameReset()
 {
     isPause               = false;
     isGameOver            = false;
     oryorCharge           = 0;
     oryorGauge.fillAmount = 0f;
     levelController.Reset();
     TileGenerator.GetTileList().ForEach(t => t.Reset());
     ProductFactory.GetInstance().DestroyLastGenerated();
     slot.DestroyDeposit();
 }
Ejemplo n.º 3
0
 public void StartDrag(Selectable product)
 {
     selectedProduct = product;
     if (product == ProductFactory.GetInstance().GetLastGeneratedProduct())
     {
         ProductFactory.GetInstance().UseLastGeneratedProduct();
     }
     else
     {
         slot.UseDeposit();
     }
     slot.SetHilight(true);
 }
Ejemplo n.º 4
0
    private void swapProductBackToFactory()
    {
        if (ProductFactory.GetInstance().GetLastGeneratedProduct() == null)
        {
            return;
        }
        var withdrawProduct = ProductFactory.GetInstance().SwapProdcut(selectedProduct);

        selectedProduct = null;
        slot.SetHilight(false);
        if (withdrawProduct != null)
        {
            withdrawProduct.transform.parent        = slot.transform;
            withdrawProduct.transform.localPosition = Vector3.zero;
            withdrawProduct.transform.localScale    = Vector3.one;
            slot.AddDeposit(withdrawProduct);
        }
    }
Ejemplo n.º 5
0
    private void swapProduct()
    {
        var withdrawProduct = slot.SwapProdcut(selectedProduct);

        selectedProduct = null;
        slot.SetHilight(false);
        if (withdrawProduct != null)
        {
            withdrawProduct.transform.parent        = ProductFactory.GetInstance().transform;
            withdrawProduct.transform.localPosition = Vector3.zero;
            withdrawProduct.transform.localScale    = Vector3.one;
            ProductFactory.GetInstance().AddLastGeneratedProduct(withdrawProduct);
        }
        else if (ProductFactory.GetInstance().GetLastGeneratedProduct() == null)
        {
            ProductFactory.GetInstance().UseLastGeneratedProduct();
            ProductFactory.GetInstance().GenerateProduct(TileGenerator.GetTileList().Any(t => t.GetBadGuy() != null));
        }
    }
Ejemplo n.º 6
0
    private void cancelSelected()
    {
        selectedProduct.transform.localPosition = Vector3.zero;
        if (selectedProduct == ProductFactory.GetInstance().GetLastGeneratedProduct())
        {
            ProductFactory.GetInstance().AddLastGeneratedProduct(selectedProduct);
        }
        else
        {
            slot.AddDeposit(selectedProduct);
        }
        selectedProduct = null;
        slot.SetHilight(false);

        if (selectedTile != null)
        {
            selectedTile.SetHighlight(false, true);
        }

        setTileHint(false, true);

        selectedTile = null;
    }
Ejemplo n.º 7
0
    private IEnumerator nextTurn()
    {
        levelController.AddTurn();

        var tileList = TileGenerator.GetTileList();

        var ratTile = tileList.FindAll(t => t.GetBadGuy() is Rat).OrderBy(t => t.GetBadGuy().Life());

        foreach (var ratT in ratTile)
        {
            if (ratT.GetBadGuy().DecreaseLife() <= 0)
            {
                Debug.Log("Deduct User Life");

                var throwingProduct = sherDog.GetThrowableObject();
                throwingProduct.SetActive(true);
                throwingProduct.transform.position = new Vector3(ratT.transform.position.x, ratT.transform.position.y, throwingProduct.transform.position.z);
                yield return(StartCoroutine(Util.SmoothMovement(throwingProduct.transform, sherDog.GetThrowingPosition(), 10f)));

                throwingProduct.SetActive(false);
                sherDog.Hit();
                var ranSound     = Random.Range(0, 20);
                var hitSoundname = (ranSound) > 10?"hit":"hit2";
                MainSoundSrc.PlaySound(hitSoundname);

                gController.mDecreaseLifeGuage();
                gController.mBrokeCombo();

                yield return(new WaitForSeconds(1f));

                //Destroy( ratT.RemoveBadGuy().gameObject );
                ratT.GetBadGuy().SetLife(levelController.GetRatTurns());
            }

            var availableTileList = ratT.GetCrossBuildableTileList();
            if (availableTileList.Count() == 0)
            {
                continue;
            }
            var selectedIndex = (int)Random.Range(0f, availableTileList.Count() - 0.01f);
            var rat           = ratT.RemoveBadGuy();
            availableTileList[selectedIndex].AddBadGuy(rat);
        }


        var moleTile = tileList.FindAll(t => t.GetBadGuy() is Mole);
        var moleList = moleTile.Select(mt => mt.RemoveBadGuy() as Mole).OrderBy(m => m.Life());

        var buildableTile  = tileList.FindAll(t => t.IsBuildAble());
        var buildableCount = buildableTile.Count;

        foreach (var mole in moleList)
        {
            if (mole.DecreaseLife() <= 0)
            {
                Debug.Log("Deduct User Life");

                var throwingProduct = sherDog.GetThrowableObject();
                throwingProduct.SetActive(true);
                throwingProduct.transform.position = new Vector3(mole.transform.position.x, mole.transform.position.y, throwingProduct.transform.position.z);
                yield return(StartCoroutine(Util.SmoothMovement(throwingProduct.transform, sherDog.GetThrowingPosition(), 10f)));

                throwingProduct.SetActive(false);
                sherDog.Hit();
                var ranSound     = Random.Range(0, 20);
                var hitSoundname = (ranSound) > 10?"hit":"hit2";
                MainSoundSrc.PlaySound(hitSoundname);

                gController.mDecreaseLifeGuage();
                gController.mBrokeCombo();

                yield return(new WaitForSeconds(1f));

                //Destroy( mole.gameObject );
                mole.SetLife(levelController.GetMoleTurns());
            }

            var newHomeIndex = (int)Random.Range(0f, buildableCount - 0.01f);
            buildableTile[newHomeIndex].AddBadGuy(mole);
            buildableCount--;
            buildableTile.RemoveAt(newHomeIndex);
        }

        //Create Mole
        var moleChance = levelController.GetMoleChance(tileList.Count(t => t.GetBadGuy() is Mole));
        var ratChance  = levelController.GetRatChance(tileList.Count(t => t.GetBadGuy() is Rat));
        var chance     = Random.Range(0, 100);

        if (buildableCount > 0 && chance < moleChance + ratChance)
        {
            BadGuy bg = null;

            if (chance < ratChance)
            {
                bg = Instantiate(ratPrefab) as BadGuy;
                bg.SetLife(levelController.GetRatTurns());
            }
            else
            {
                bg = Instantiate(molePrefab) as BadGuy;
                bg.SetLife(levelController.GetMoleTurns());
            }

            var newHomeIndex = (int)Random.Range(0f, buildableCount - 0.01f);
            buildableTile[newHomeIndex].AddBadGuy(bg, true);
            buildableCount--;
            buildableTile.RemoveAt(newHomeIndex);
        }

        yield return(new WaitForSeconds(0.5f));

        if (buildableCount <= 0)
        {
            //Game Over
            Debug.Log("Game Over");
            gController.mGameOver();
        }
        else
        {
            var tileLeft = (float)buildableCount / TileGenerator.TotalSize;
            if (tileLeft <= 0.4f || gController.GetLife() == 1)
            {
                sherDog.SetTired(true);
            }
            else
            {
                sherDog.SetTired(false);
            }
        }

        //Check Game State
        if (!isGameOver)
        {
            if (oryorCharge < 100)
            {
                ProductFactory.GetInstance().GenerateProduct(tileList.Any(t => t.GetBadGuy() != null));
            }
            else
            {
                oryorCharge           = 0;
                oryorGauge.fillAmount = 0;
                ProductFactory.GetInstance().GenerateOryor();
                MainSoundSrc.PlaySound("oryorready");
            }
        }
    }
Ejemplo n.º 8
0
    IEnumerator finishMove(Tile target, itemType it = itemType.None)
    {
        Tile[] similarTiles      = null;
        var    highestMatchLevel = 0;

        if (it == itemType.Magnifier)
        {
            var highLevel = target.GetCrossBuildingHighLevel();

            foreach (var level in highLevel)
            {
                similarTiles = target.GetSimilarTile(level);
                if (similarTiles != null && similarTiles.Length >= 2)
                {
                    highestMatchLevel = level;
                    break;
                }
            }
        }
        else if (it == itemType.Oryor)
        {
            var temp = new List <Tile>();
            temp.AddRange(target.GetSurroundTiles().Where(t => t.GetCurrentProductLevel() != 0));
            if (target.GetCurrentProductLevel() != 0)
            {
                temp.Add(target);
            }
            similarTiles = temp.ToArray();

            target.GetSurroundTiles().Where(t => t.GetBadGuy() != null).ToList().ForEach(b => StartCoroutine(userLockerCo(b, false)));
            if (target.GetBadGuy() != null)
            {
                StartCoroutine(userLockerCo(target, false));
            }
        }
        else
        {
            similarTiles = target.GetSimilarTile();
        }

        if (similarTiles != null && ((it == itemType.Oryor && similarTiles.Length > 0) || similarTiles.Length >= 2))
        {
            sherDog.Combine();
            gController.mAddCombo();
            var sound2           = Random.Range(0, 20);
            var combineSoundName = (sound2 > 10)?"combine":"combine2";
            MainSoundSrc.PlaySound(combineSoundName);

            //Score
            var score = levelController.GetCombineProductScore(similarTiles[0].GetCurrentProductLevel(), similarTiles.Length);
            oryorCharge += levelController.GetOryorChargingRate(similarTiles[0].GetCurrentProductLevel());
            var formatGauge = oryorCharge / 100f;
            oryorGauge.fillAmount = formatGauge;

            //Combine
            foreach (var tile in similarTiles)
            {
                var removedProduct = tile.RemoveProduct();
                removedProduct.MoveAndDestroy(target.transform.position, .25f);
            }
            yield return(new WaitForSeconds(.25f));

            if (it == itemType.Magnifier)
            {
                var product = ProductFactory.GetInstance().CreateProduct(highestMatchLevel + 1, true);
                target.SetupProduct(product);
            }
            else if (it == itemType.Oryor)
            {
                score = (int)(score * levelController.GetOryorMultiplier());
            }
            else
            {
                target.UpgradeProduct();
            }
            addScore(score, target.transform.position);

            yield return(new WaitForSeconds(1f));

            if (target.IsProductComplete())
            {
                var removedProduct = target.RemoveProduct();
                removedProduct.Capture();
                yield return(new WaitForSeconds(1f));

                Destroy(removedProduct.gameObject);

                /* Do not destroy bad guy after 6 combine
                 * var badGuys = target.GetSurroundTiles().Select( t => t.RemoveBadGuy() ).ToList();
                 *
                 * badGuys.ForEach( bg => {if(bg!=null)Destroy(bg.gameObject);} );
                 */
            }

            yield return(StartCoroutine(finishMove(target)));
        }
        else
        {
            yield return(StartCoroutine(nextTurn()));
        }

        yield return(0);
    }
Ejemplo n.º 9
0
 private bool isProductFactorySelected(Vector3 pos)
 {
     return(ProductFactory.GetInstance().GetComponent <Collider2D>().OverlapPoint(pos));
 }