Exemplo n.º 1
0
    void checkCollision()
    {
        Entity candidate;
        Entity target;
        float  dis;

        for (int i = 0; i < entities.Count; i++)
        {
            candidate = entities[i];
            for (int j = 0; j < entities.Count; j++)
            {
                target = entities[j];
                if (i == j || candidate.Id == 11 || target.Id == 11 || candidate.Id != target.Id || candidate.boomFlag || target.boomFlag || candidate.obj.transform.position.y < target.obj.transform.position.y)
                {
                    continue;
                }

                dis = Vector3.Distance(candidate.obj.transform.position, target.obj.transform.position);
                //Debug.LogError("dis:" + dis);
                if (dis - candidate.Size * 0.5f - target.Size * 0.5f < 0f)
                {
                    //candidate和target标记boomFlag
                    candidate.boomFlag = true;
                    target.boomFlag    = true;

                    //添加我BoomPair
                    BoomPair pair = new BoomPair(candidate, target);
                    boomPairs.Add(pair);
                }
            }
        }

        if (entities.Count > 0)
        {
            //移除标记了boomFlag的Entity
            for (int i = entities.Count - 1; i >= 0; i--)
            {
                if (entities[i].boomFlag)
                {
                    entities.RemoveAt(i);
                }
            }
        }
    }
Exemplo n.º 2
0
    void doSingleBoom(BoomPair boomPair)
    {
        var candidateObj = boomPair.candidate.obj;
        var targetObj    = boomPair.target.obj;

        int pairId = boomPair.candidate.Id;

        Vector3 fromPos = candidateObj.transform.position;
        Vector3 toPos   = targetObj.transform.position;
        bool    flag    = false;

        TimerTween.Value(0, 1, 0.2f, (v) =>
        {
            if (v > 0.3f)
            {
                targetObj.GetComponent <Rigidbody2D>().simulated = false;//不再受影响
            }
            if (v > 0.6f && !flag)
            {
                flag = true;
                if (pairId == 10)
                {
                    AudioManager.Instance.PlayAudioMaxMerge();
                }
                else
                {
                    AudioManager.Instance.PlayAudioMerge();
                }


                AudioManager.Instance.PlayBoom();
                string effName = "";
                if (pairId < 9)
                {
                    effName = "Effects/effect_hecheng_0" + (pairId + 1);
                }
                else
                {
                    effName = "Effects/effect_hecheng_" + (pairId + 1);
                }
                GameObject effObj           = ResHelper.Instance.LoadModel(effName);
                effObj.transform.position   = boomPair.target.obj.transform.position;
                effObj.transform.localScale = Vector3.one * scaleRatio;
                TimerTween.Delay(1.2f, () =>
                {
                    GameObject.DestroyImmediate(effObj);
                    if (pairId == 10)
                    {
                        GameCenter.Instance.maxMergeEffect.Show();
                    }
                }).Start();
            }
            candidateObj.transform.position = fromPos + (toPos - fromPos) * v;
        }, () =>
        {
            //在targetObj的位置生成新的合成的球
            if (boomPair.candidate.Id < 11)
            {
                int score = boomPair.candidate.Id;
                if (boomPair.candidate.Id == 10)
                {
                    score = 500;
                }
                EventDispatcher.Instance.DispatchEvent(EventID.OnScoreChange, singleScore, score);


                //Debug.LogError("score:" + singleScore);
                this.genEntityBy2DPos(boomPair.candidate.Id + 1, targetObj.transform.position, true);
            }
            boomPair.candidate.Destroy();
            boomPair.target.Destroy();
        }).Start();
    }