void Update()
 {
     if (mSwimmer.IsInWorld())//进入生成区域
     {
         mSwimmer.SetLiveDimension(Defines.ClearFishRadius);
         Destroy(this);
     }
 }
Пример #2
0
        //public
        public IEnumerator _Coro_Process()
        {
            //辣椒鱼往中间走
            var oneSideNum = 160;
            var fishUpDown = new Fish[2, oneSideNum];

            StartCoroutine(_Coro_GenerateRoadSideFish(fishUpDown, oneSideNum));

            Vector3[] posLineFish = new Vector3[2] {
                TsLineFish[0].position, TsLineFish[1].position
            };
            posLineFish[0].x -= GameMain.Singleton.WorldDimension.width * 0.5F;
            posLineFish[1].x += GameMain.Singleton.WorldDimension.width * 0.5F;
            for (int i = 0; i != 2; ++i)
            {
                TsLineFish[i].position = posLineFish[i];
            }

            Transform ts;

            while (true)
            {
                int nullNum = 0;
                for (int i = 0; i != TsLineFish.Length; ++i)
                {
                    if (TsLineFish[i] == null)
                    {
                        ++nullNum;
                        continue;
                    }

                    ts           = TsLineFish[i];
                    ts.position += ts.right * Speed * Time.deltaTime;
                    if ((ts.right.x > 0F && ts.position.x > GameMain.Singleton.WorldDimension.xMax) ||//向左并达到左边屏幕边
                        (ts.right.x <= 0F && ts.position.x < GameMain.Singleton.WorldDimension.x))   //向右移动并达到右边屏幕边
                    {
                        List <Fish> fishToClear = new List <Fish>();

                        foreach (Transform tChild in TsLineFish[i])
                        {
                            Fish f = tChild.GetComponent <Fish>();
                            if (f != null && f.Attackable)
                            {
                                fishToClear.Add(f);
                            }
                        }
                        foreach (Fish f in fishToClear)
                        {
                            f.Clear();
                        }

                        Destroy(TsLineFish[i].gameObject);
                        TsLineFish[i] = null;
                    }
                }

                if (nullNum == TsLineFish.Length)
                {
                    break;
                }

                yield return(0);
            }

            //两边路散走
            ////设置碰撞框

            //float fishSpeedHalf = Prefab_FishCompositeRoad.swimmer.Speed * 0.5F;
            Swimmer swimmerTmp = null;

            for (int i = 0; i != 2; ++i)
            {
                for (int j = 0; j != oneSideNum; ++j)
                {
                    if (fishUpDown[i, j] == null)
                    {
                        continue;
                    }
                    swimmerTmp = fishUpDown[i, j].swimmer;
                    swimmerTmp.SetLiveDimension(Defines.ClearFishRadius);
                    swimmerTmp.Speed = Random.Range(swimmerTmp.Speed * 0.9F, swimmerTmp.Speed * 1.5F);
                    swimmerTmp.Go();
                }
            }



            //等待清鱼,改用时间限制
            while (GameMain.Singleton.NumFishAlive != 0)
            {
                yield return(0);
            }

            EndPrelude();
        }
Пример #3
0
    IEnumerator _Coro_Generate()
    {
        int num          = Random.Range(NumMin, NumMax + 1);
        int generatedNum = 0;

        yield return(0);//为取得transform.localPosition

        //生成leaderFish
        GameObject goLeader   = new GameObject("领队_" + Prefab_Fish.name);
        Swimmer    fishLeader = goLeader.AddComponent <Swimmer>();

        goLeader.AddComponent <DestroyWhenSwimmerOut>();

        if (GameMain.EvtLeaderInstance != null)
        {
            GameMain.EvtLeaderInstance(fishLeader);
        }


        //fishLeader.Attackable = false;
        Prefab_Fish.swimmer.CopyDataTo(fishLeader);
        fishLeader.SetLiveDimension(Defines.ClearFishRadius);//swim to fix
        fishLeader.RotateSpd = Fish_RotateSpd;
        fishLeader.Speed     = Fish_Speed;

        FishAI_FreeSwimSingle fishAILeader = goLeader.AddComponent <FishAI_FreeSwimSingle>();

        Prefab_Fish.GetComponent <FishAI_FreeSwimSingle>().CopyDataTo(fishAILeader);
        fishAILeader.enabled                = false;
        fishAILeader.RotateAngleRndRange    = Fish_RotateAngleRndRange;
        fishAILeader.RotateInterval         = Fish_RotateInterval;
        fishAILeader.RotateIntervalRndRange = Fish_RotateIntervalRndRange;

        fishLeader.transform.parent = GameMain.Singleton.FishGenerator.transform;
        Vector3 localPos = transform.localPosition;

        localPos.z = Defines.GMDepth_Fish + GameMain.Singleton.FishGenerator.ApplyFishDepth();
        fishLeader.transform.localPosition = localPos;
        fishLeader.transform.localRotation = transform.localRotation;
        fishLeader.Go();

        Fish  preFish          = null;
        float distanceToLeader = 0F;

        while (generatedNum < num)
        {
            yield return(new WaitForSeconds((Distance + fishLeader.BoundCircleRadius * 2F) / fishLeader.Speed));

            if (fishLeader == null)
            {
                break;
            }
            Fish    f = Instantiate(Prefab_Fish) as Fish;
            Swimmer s = f.swimmer;
            f.name = Prefab_Fish.name;

            s.RotateSpd = Fish_RotateSpd;
            s.Speed     = Fish_Speed;
            //动画设置
            if (preFish != null)
            {
                //f.AniSprite.clipTime = preFish.AniSprite.clipTime;
                //f.AniSprite.Play(preFish.AniSprite.ClipTimeSeconds);
                f.AniSprite.PlayFrom(f.AniSprite.DefaultClip, preFish.AniSprite.ClipTimeSeconds);
            }

            //删除所有其他ai
            f.ClearAI();
            FishAI_Follow aiFollow = f.gameObject.AddComponent <FishAI_Follow>();
            aiFollow.SetTarget(fishLeader);
            distanceToLeader         += (Distance + fishLeader.BoundCircleRadius * 2F);
            aiFollow.DistanceToLeader = distanceToLeader;

            //方位设置
            f.transform.parent        = GameMain.Singleton.FishGenerator.transform;
            localPos                  = transform.localPosition;
            localPos.z                = Defines.GMDepth_Fish + GameMain.Singleton.FishGenerator.ApplyFishDepth();
            f.transform.localPosition = localPos;
            f.transform.localRotation = transform.localRotation;
            s.Go();

            ++generatedNum;

            preFish = f;
        }

        yield return(0);

        if (fishAILeader != null)
        {
            fishAILeader.enabled = true;
        }
        Destroy(gameObject);
    }
Пример #4
0
    public int NumMin   = 4;    //最少生成个数

    //void Awake()
    //{
    //    //if (GameMain.EvtStopGenerateFish != null)
    //    //    Debug.Log("s GameMain.EvtStopGenerateFish.length = " + GameMain.EvtStopGenerateFish.GetInvocationList().Length);
    //    GameMain.EvtStopGenerateFish += Handle_StopGenerateFish;

    //}
    //void OnDestroy()
    //{
    //    //Debug.Log("destroy");

    //    if(GameMain.EvtStopGenerateFish != null)
    //        Debug.Log("GameMain.EvtStopGenerateFish.length = " + GameMain.EvtStopGenerateFish.GetInvocationList().Length);
    //}

    //void Handle_StopGenerateFish()
    //{
    //    //StopCoroutine("_Coro_Generate");
    //    //GameMain.EvtStopGenerateFish -= Handle_StopGenerateFish;
    //    //Destroy(gameObject);
    //}

    //public void Generate()
    //{
    //    StartCoroutine("_Coro_Generate");
    //}

    public void Generate()
    {
        int num          = Random.Range(NumMin, NumMax + 1);
        int generatedNum = 0;

        //yield return 0;//为取得transform.localPosition
        Swimmer leader = null;

        //Swimmer[] allSwimmer = new Swimmer[num];
        while (generatedNum < num)
        {
            Swimmer s = null;
            if (generatedNum == 0)
            {
                GameObject goLeader = new GameObject("领队_" + Prefab_Fish.name);

                leader = goLeader.AddComponent <Swimmer>();
                s      = leader;
                if (GameMain.EvtLeaderInstance != null)
                {
                    GameMain.EvtLeaderInstance(leader);
                }

                goLeader.AddComponent <DestroyWhenSwimmerOut>();
                Prefab_Fish.swimmer.CopyDataTo(leader);
            }
            else
            {
                Fish f = Instantiate(Prefab_Fish) as Fish;
                s      = f.swimmer;
                f.name = Prefab_Fish.name;
                //删除所有其他ai
                f.ClearAI();
                FishAI_Flock aiFollow = f.gameObject.AddComponent <FishAI_Flock>();
                aiFollow.SetLeader(leader);
            }

            s.gameObject.AddComponent <FishDimenSetWhenEnterWorld>();

            //allSwimmer[generatedNum] = s;
            s.SetLiveDimension(Radius / s.BoundCircleRadius * 2F);
            Transform tsSwimmer = s.transform;
            tsSwimmer.parent = GameMain.Singleton.FishGenerator.transform;
            Vector3 localPos = Random.insideUnitCircle * (Radius - s.BoundCircleRadius);
            localPos   = transform.localPosition + localPos;
            localPos.z = Defines.GMDepth_Fish + GameMain.Singleton.FishGenerator.ApplyFishDepth();
            tsSwimmer.localPosition = localPos;

            tsSwimmer.localRotation = transform.localRotation /* * Quaternion.AngleAxis(Random.Range(-AngleRndInit,AngleRndInit),Vector3.forward)*/;
            //f.transform.right = Vector3.zero - transform.localPosition;
            s.Go();

            ++generatedNum;

            //yield return 0;//不连续创建
        }

        //int fishLiveDimSetted = 0;
        //while (fishLiveDimSetted < num)
        //{
        //    for (int i = 0; i != num;++i )
        //    {
        //        if (allSwimmer[i] != null && allSwimmer[i].IsInWorld())
        //        {
        //            allSwimmer[i].SetLiveDimension(Defines.ClearFishRadius);
        //            allSwimmer[i] = null;
        //            ++fishLiveDimSetted;
        //        }
        //    }
        //    yield return new WaitForSeconds(0.3F);
        //}
        //GameMain.EvtStopGenerateFish -= Handle_StopGenerateFish;
        Destroy(gameObject);
    }