示例#1
0
    // Use this for initialization

    public void Init()
    {
        GameColor parent = transform.parent.GetComponent <GameColor>();

        //if parent is a color part, follow it's color
        if (parent)
        {
            gameColor = parent.gameColor;
        }
        switch (gameColor)
        {
        case GameColorEnum.none:
            gameObject.SetActive(false);
            break;

        default:
            if (sr == null)
            {
                return;
            }
            // Debug.Log("index " + index);
            sr.sprite = ResourceManager.Instance.circleSprite[(int)gameColor];
            if (!hasFinishedStart)
            {
                transform.Rotate(new Vector3(0, 0, (-index) * 90));
            }
            hasFinishedStart = true;
            //CSUtil.ERROR("game color is an invalid value");
            break;
        }
    }
示例#2
0
    void GenerateScreen(int hardness)
    {
        List <GameObject> thisGeneratedList = new List <GameObject>();

        if (generatedList.Count > 4)
        {
            generatedList.RemoveRange(0, generatedList.Count - 4);
        }
        for (int index = 0; index < 10; index++)
        {
            currentGeneratedY += 0.1f;
            float rateToGenerateCircle = Mathf.Pow(multiplierWhenDidntGenerateLastTime, emptyLineNumber) * originGenerateCircleRate;
            float rand = Random.Range(0, 1.0f);
            if (rand < rateToGenerateCircle)
            {
                emptyLineNumber = 0;
                //generate multiple in one line

                rand = Random.Range(0, sumOfGenerateNum);
                int generateNum = 3;
                if (rand <= rateToGenerateNumber[0])
                {
                    generateNum = 1;
                }
                else if (rand <= rateToGenerateNumber[0] + rateToGenerateNumber[1])
                {
                    generateNum = 2;
                }

                float randXValueLength = 1.6f * widthScale / (float)generateNum;
                float randXValueStart  = -0.8f * widthScale;
                for (int num = 0; num < generateNum; num++)
                {
                    float   randXValue           = Random.Range(randXValueStart + randXValueLength * num, randXValueStart + randXValueLength * (num + 1));
                    Vector3 willGeneratePosition = new Vector3(randXValue, currentGeneratedY * heightScale, 0f);
                    //check collide with others
                    bool shouldSkip = false;
                    int  checkNum   = Mathf.Min(generatedList.Count, 4);
                    for (int cn = 1; cn <= checkNum; cn++)
                    {
                        GameObject checkObject = generatedList[generatedList.Count - cn];
                        if (Vector3.Distance(checkObject.transform.position, willGeneratePosition) <= 1.5f)
                        {
                            shouldSkip = true;
                            break;
                        }
                    }
                    if (shouldSkip)
                    {
                        continue;
                    }

                    GameObject go = CachePoolManager.Instance.getCircle();
                    go.SetActive(true);
                    go.transform.position = willGeneratePosition;
                    WholeCircle wc = go.GetComponentInChildren <WholeCircle>();
                    //put these inside wholeCircle
                    wc.itemObject.SetActive(false);
                    //test only
                    //wc.monsterObject.SetActive(false);
                    wc.monsterObject.SetActive(true);
                    Monster monster2          = wc.monsterObject.GetComponent <Monster>();
                    string  monsterIdentifier = LevelManager.Instance.GenerateAMonsterIdentifier();
                    monster2.Init(MonsterManager.Instance.GetMonsterInfoByIdentifier(monsterIdentifier));


                    wc.ReactiveChildren();
                    wc.willChange = false;
                    Rotator rt = go.GetComponentInChildren <Rotator>();
                    generatedList.Add(go);
                    thisGeneratedList.Add(go);
                    //decide if this circle is a change circle or block circle
                    float rateToGenerateWillChangeCircle = Mathf.Pow(multiplierWHenDidntGenerateChangeCircle, noChangeCircleNumber) * originGenerateChangeCircleRate;
                    rand = Random.Range(0, 1.0f);
                    if (rand < rateToGenerateWillChangeCircle)
                    {
                        noChangeCircleNumber = 0;
                        wc.willChange        = true;
                        rand = Random.Range(0, 4);
                        GameColorEnum c1 = (GameColorEnum)((rand + 1) % 4);
                        GameColorEnum c2 = (GameColorEnum)((rand + 2) % 4);
                        GameColorEnum c3 = (GameColorEnum)((rand + 3) % 4);
                        wc.SetColor(new GameColorEnum[] { c1, c2, c3, (GameColorEnum)rand });
                    }
                    else
                    {
                        noChangeCircleNumber++;
                        wc.willChange = false;

                        //random to decide what color can pass block
                        rand = Random.Range(0, sumOfNumberOfColorOfBLockCirlcle);
                        if (rand <= rateOfNumberOfColorOfBlockCircle[0])//1 color
                        {
                            rand = Random.Range(0, 4);
                            GameColorEnum c = (GameColorEnum)rand;
                            wc.SetColor(new GameColorEnum[] { c, c, c, c });
                        }
                        else if (rand <= rateOfNumberOfColorOfBlockCircle[0] + rateOfNumberOfColorOfBlockCircle[1])//2 color
                        {
                            rand = Random.Range(0, 4);
                            GameColorEnum c     = (GameColorEnum)rand;
                            int           rand2 = Random.Range(0, 3);
                            GameColorEnum c2    = (GameColorEnum)((rand + rand2) % 4);
                            wc.SetColor(new GameColorEnum[] { c, c, c2, c2 });
                        }
                        else if (rand <= rateOfNumberOfColorOfBlockCircle[0] + rateOfNumberOfColorOfBlockCircle[1] + rateOfNumberOfColorOfBlockCircle[2])//1 color
                        {
                            rand = Random.Range(0, 4);
                            GameColorEnum c1 = (GameColorEnum)((rand + 1) % 4);
                            GameColorEnum c2 = (GameColorEnum)((rand + 2) % 4);
                            GameColorEnum c3 = (GameColorEnum)((rand + 3) % 4);
                            wc.SetColor(new GameColorEnum[] { c1, c2, c3, c3 });
                        }
                        else
                        {
                            rand = Random.Range(0, 4);
                            GameColorEnum c1 = (GameColorEnum)((rand + 1) % 4);
                            GameColorEnum c2 = (GameColorEnum)((rand + 2) % 4);
                            GameColorEnum c3 = (GameColorEnum)((rand + 3) % 4);
                            wc.SetColor(new GameColorEnum[] { c1, c2, c3, (GameColorEnum)rand });
                        }
                    }
                    //decide the ratate speed of the circle,randge is (-100,-50)and(50,100)
                    rand     = Random.Range(-50, 50);
                    rand    += (rand > 0 ? 50 : -50);
                    rt.speed = rand;
                }
            }
            else
            {
                emptyLineNumber++;
            }
        }
        //int rand3 = Random.Range(0, thisGeneratedList.Count);
        //GameObject go2 = thisGeneratedList[rand3];
        //WholeCircle wc2 = go2.GetComponentInChildren<WholeCircle>();
        //wc2.itemObject.SetActive(true);
        //GameItem gameItem = wc2.itemObject.GetComponent<GameItem>();
        //gameItem.itemEnum = (GameItemEnum)Random.Range(0, (int)GameItemEnum.random+1);
        //gameItem.Init();

        //int rand3 = Random.Range(0, thisGeneratedList.Count);
        //GameObject go2 = thisGeneratedList[rand3];
        //WholeCircle wc2 = go2.GetComponentInChildren<WholeCircle>();
        //wc2.monsterObject.SetActive(true);
        //Monster monster = wc2.monsterObject.GetComponent<Monster>();
        //monster.Init(2,2);
    }
示例#3
0
    void OnTriggerEnter2D(Collider2D col)
    {
        if (isGameOver)
        {
            return;
        }
        //Debug.LogError(col+" layer "+ col.GetComponent<SpriteRenderer>().sortingLayerID);
        //1746648709 ???
        if (col.GetComponent <SpriteRenderer>() != null && col.GetComponent <SpriteRenderer>().sortingLayerID != 1746648709)
        {
            return;
        }
        if (decideByTheFirstHit && col.transform.parent && hittedCircle.Contains(col.transform.parent.gameObject))
        {
            return;
        }
        if (willTeleportThis)
        {
            return;
        }
        GameColor  script = col.gameObject.GetComponent <GameColor>();
        CirclePart cp     = col.gameObject.GetComponent <CirclePart>();

        if (script && cp)
        {
            GameColorEnum c = script.gameColor;

            if (cp.willChange)
            {
                ChangeColor(c);
            }
            else
            {
                if (c != gameColor)
                {
                    HitWontChangePartWithDifferentColor();
                }
                else
                {
                    HitWontChangePartWithSameColor();
                    //achievement
                }
            }
            if (shouldDestroyPart)
            {
                col.gameObject.SetActive(false);
                hittedPart.Add(col.gameObject);
            }
            if (!abilityBehavior.WouldDestroyMultiplePartsOnOneCircle)
            {
                hittedCircle.Add(col.transform.parent.gameObject);
            }

            //get item if exist
            GameItem item = col.transform.parent.parent.GetComponentInChildren <GameItem>();
            UseItem(item);

            if (col.transform.parent.gameObject != startObject)
            {
                Monster monster = col.transform.parent.parent.GetComponentInChildren <Monster>();
                if (monster && monster.gameObject.activeSelf)
                {
                    monster.GetDamage(1);
                }
            }
        }
        else
        {
            //hit on wholeCircle
            //CSUtil.ERROR("item is not color changer and does not have colorManager on it");
        }
    }
示例#4
0
 public void ChangeColor(GameColorEnum c)
 {
     gameColor = c;
     CSUtil.LOG("changed color to " + (int)c);
     sr.color = colorList[(int)c];
 }
示例#5
0
    void SetRandomColor()
    {
        GameColorEnum c = (GameColorEnum)Random.Range(0, 4);

        ChangeColor(c);
    }
示例#6
0
    static public string GetItem(GameItemEnum itemEnum)
    {
        int          rand;
        FollowTarget ft = Camera.main.GetComponent <FollowTarget>();
        //CSUtil.LOG("get item " + itemEnum);
        Player player = GameLogicManager.Instance.player;

        switch (itemEnum)
        {
        case GameItemEnum.smallBall:
            player.MinishBall();
            break;

        case GameItemEnum.megaBall:
            player.EnlargeBall();
            break;

        case GameItemEnum.heart:
            player.gainHP();
            break;

        case GameItemEnum.gold:
            rand = Random.Range(1, 5);
            CurrencyManager.Instance.AddCurrencyAmount(CSConstant.GOLD, rand);
            SFXManager.Instance.PlaySFX(SFXEnum.coin);
            break;

        case GameItemEnum.randomColor:
            SFXManager.Instance.PlaySFX(SFXEnum.possitive);
            GameColorEnum c = (GameColorEnum)Random.Range(0, 4);
            player.ChangeColor(c);
            break;

        case GameItemEnum.bomb:
            player.Bomb();
            break;

        case GameItemEnum.teleport:
            player.Teleport();
            break;

        case GameItemEnum.ballSlowDown:
            player.SlowDown();
            break;

        case GameItemEnum.ballSpeedup:
            player.Speedup();
            break;

        case GameItemEnum.screenSlowDown:
            SFXManager.Instance.PlaySFX(SFXEnum.possitive);
            ft.Slowdown();
            break;

        case GameItemEnum.screenSpeedup:
            SFXManager.Instance.PlaySFX(SFXEnum.negative);
            ft.Speedup();
            break;

        case GameItemEnum.random:
            rand = Random.Range(0, (int)GameItemEnum.random);
            return(GetItem((GameItemEnum)rand));
        }
        return(itemEnum.ToString());
    }