Пример #1
0
    public void AddGameObjectToContainter(eFruitType type, GameObject obj)
    {
        if (
            (null == obj) ||
            (type <= eFruitType.Fruit_None || type >= eFruitType.Fruit_Size)
            )
        {
            Debug.LogError("Illegal input parameter type = " + type + " obj = " + obj);
            return;
        }

        obj.transform.parent = transform;
        obj.SetActive(false);
        List <GameObject> list;

        if (true == m_dGCList.ContainsKey(type))
        {
            list = m_dGCList[type];
        }
        else
        {
            list            = new List <GameObject>();
            m_dGCList[type] = list;
        }
        list.Add(obj);
    }
Пример #2
0
 public GameObject GetGameObjectFromContainer(eFruitType type)
 {
     if (type <= eFruitType.Fruit_None || type >= eFruitType.Fruit_Size)
     {
         Debug.LogError("Input type is illeagl:)");
         return(null);
     }
     if (m_dGCList.ContainsKey(type))
     {
         List <GameObject> list = m_dGCList[type];
         if (list.Count > 0)
         {
             GameObject obj = list[0];
             obj.SetActive(true);
             obj.transform.parent = null;
             list.RemoveAt(0);
             return(obj);
         }
         else
         {
             return(null);
         }
     }
     else
     {
         return(null);
     }
 }
Пример #3
0
 private void OnDisable()
 {
     m_eFruitType  = eFruitType.Fruit_None;
     m_eFruitState = eFruitState.FruitState_None;
     m_oFrameObj   = null;
     m_fYBtm       = 0f;
     rb            = null;
 }
Пример #4
0
    void InstantiateFruites()
    {
        eFruitType etype = eFruitType.Fruit_None;
        int        n     = Random.Range(1, 101);

        FruitController.SliceDelgate delSlice = FruitSliceEvent;

        if (n < 30)
        {
            etype = eFruitType.Fruit_Melon;
        }
        else if (n >= 30 && n < 60)
        {
            etype = eFruitType.Fruit_Lemon;
        }
        else if (n >= 60 && n < 90)
        {
            etype = eFruitType.Fruit_Pear;
        }
        else
        {
            delSlice = MissleSliceEvent;
            etype    = eFruitType.Fruit_Missle;
        }

        FruitController fc = FruitController.InstantiateMyFruit(
            transform.position, Vector3.zero,
            eFruitState.FruitState_Game,
            etype, delSlice);

        //注册坠球事件
        m_uigame.RegisterDropBall(fc);

        fc.RB.AddForce(
            new Vector3(
                Random.Range(-300, 300),
                Random.Range(600, 700),
                0
                )
            );

        fc.RB.AddTorque(
            new Vector3(
                Random.Range(0, 360),
                Random.Range(0, 360),
                Random.Range(0, 360)
                )
            );
    }
Пример #5
0
    public void OnDisable()
    {
        m_Inst = null;
        for (eFruitType type = eFruitType.Fruit_Melon; type <= eFruitType.Fruit_Size; type++)
        {
            if (m_dGCList.ContainsKey(type))
            {
                List <GameObject> list = m_dGCList[type];
                list.Clear();
                list = null;
            }
        }

        m_dGCList = null;
    }
Пример #6
0
        //实例化水果
        public static FruitController InstantiateMyFruit(
            Vector3 pos,
            Vector3 rot,
            eFruitState state        = eFruitState.FruitState_Game,
            eFruitType type          = eFruitType.Fruit_Melon,
            SliceDelgate _sliceEvent = null
            )
        {
            GameObject fruit;

            //动态加载预制体到层级列表中
            if (null == GarbageCollection.m_Inst || null == (fruit = GarbageCollection.m_Inst.GetGameObjectFromContainer(type)))
            {
                fruit = Instantiate(Resources.Load(GlobalHelper.g_dGlobalInfos[type]), pos, Quaternion.Euler(rot)) as GameObject;
            }
            else
            {
                fruit.transform.position = pos;
                fruit.transform.rotation = Quaternion.Euler(rot);
            }

            FruitController fc = fruit.GetOrAddComponent <FruitController>();

            //设置水果状态对应的行为
            fc.SetFruitBehaviour(state);

            //设置水果类型
            fc.m_eFruitState = state;
            fc.m_eFruitType  = type;


            //归零速度
            fc.RB.velocity = Vector3.zero;

            //设置离开视野坐标
            fc.m_fYBtm = GlobalHelper.GetVisibleYPos(pos.z, fc.MaxSize);

            if (null != _sliceEvent)
            {
                fc.m_delSliceEvent = _sliceEvent;
            }

            return(fc);
        }
Пример #7
0
        private void OnTriggerExit(Collider other)
        {
            if (other.gameObject.tag == "Knife")//如果是刀片
            {
                #region 判断生成什么类型的水果
                eFruitType ft = m_eFruitType;

                int nFT = (int)ft;

                if (nFT % 3 == 1)
                {
                    ft += 1;
                }
                else
                {
                    return;
                }
                #endregion

                #region 切除水果事件
                m_delSliceEvent(other.gameObject, gameObject);
                #endregion

                #region 如果判断是雷,则直接返回,雷不需要生成两个小雷。
                if (m_eFruitType == eFruitType.Fruit_Missle)
                {
                    return;
                }
                #endregion
                AudioManager.PlayAudio(other.gameObject, eAudioType.Audio_CutFruit, "Melon");
                #region 播放切水果声音

                #endregion

                #region 播放轨迹特效
                tempv = (other.transform.position - m_vOrigPos);
                tempq = Quaternion.LookRotation(new Vector3(tempv.x, tempv.y, tempv.z));
                Instantiate(Resources.Load("Prefabs/Effects/Explosion 12"), transform.position, transform.rotation);
                Instantiate(Resources.Load("Prefabs/Effects/myflare13"), transform.position, tempq);
                #endregion

                #region 生成水果
                FruitController fc;
                Vector3         vPos;
                Vector3         vRot;
                //生成两个新的水果
                for (int i = 0; i < 2; i++)
                {
                    fc = InstantiateMyFruit(transform.position, transform.root.eulerAngles, eFruitState.FruitState_Game, ft);
                    if (i == 0)
                    {
                        vPos = new Vector3(
                            Random.Range(-80f, -40f),
                            Random.Range(20f, 40f),
                            0);

                        vRot = new Vector3(
                            Random.Range(-300, -200f),
                            Random.Range(100f, 200f),
                            Random.Range(-200f, -100f));
                    }
                    else
                    {
                        vPos = new Vector3(
                            Random.Range(40f, 80f),
                            Random.Range(20f, 40f),
                            0);

                        vRot = new Vector3(
                            Random.Range(200, 300f),
                            Random.Range(100f, 200f),
                            Random.Range(100f, 200f));
                    }

                    fc.RB.AddForce(vPos);
                    fc.RB.AddTorque(vRot);
                }
                #endregion

                #region 将原来的水果放到回收站中
                if (m_eFruitState == eFruitState.FruitState_Game)
                {
                    GarbageCollection.m_Inst.AddGameObjectToContainter(m_eFruitType, gameObject);
                }
                else if (m_eFruitState == eFruitState.FruitState_Login)
                {
                    Destroy(gameObject);
                }
                #endregion
            }
        }