System.Collections.IEnumerator CreateFishGroupData(object obj)
    {
        const float TIME = 0.0f;

        System.IO.File.Delete("e:/fishGroup.dat");
        System.IO.FileStream   fs = new System.IO.FileStream("e:/fishGroup.dat", System.IO.FileMode.CreateNew, System.IO.FileAccess.Write);
        System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs);
        int groupCount            = FishResManager.Instance.GetGroupCount();

        // groupCount = 4;
        bw.Write(delta);
        bw.Write(groupCount);

        for (int i = 0; i < groupCount; ++i)
        {
            GroupDataList gdl = FishResManager.Instance.GetFishGroup((ushort)i);
            bw.Write(gdl.PathGroupData != null);
            if (gdl.PathGroupData != null)
            {
                FishPathGroupData        pathgroup  = gdl.PathGroupData;
                PathLinearInterpolator[] interpList = PathManager.Instance.GetPathGroup(pathgroup.PathGroupIndex, false);
                bw.Write(interpList.Length);
                foreach (PathLinearInterpolator interp in interpList)
                {
                    Fish fish = new Fish();
                    fish.Init(0, pathgroup.FishIndex, pathgroup.FishScaling, TIME, pathgroup.ActionSpeed, pathgroup.ActionUnite, pathgroup.Speed, interp);
                    WriteToList(fish, bw);
                }
            }
            else
            {
                bw.Write(gdl.PathList.Length);
                for (int t = 0; t < gdl.PathList.Length; ++t)
                {
                    PathLinearInterpolator pi = PathManager.Instance.GetPath(gdl.PathList[t]);

                    bw.Write(gdl.GroupDataArray.Length);
                    for (int j = 0; j < gdl.GroupDataArray.Length; ++j)
                    {
                        GroupData gd = gdl.GroupDataArray[j];
                        bw.Write(gd.FishNum);
                        for (int n = 0; n < gd.FishNum; ++n)
                        {
                            float time = Utility.GetPathTimeByDist(gdl.FrontPosition.x, gd.PosList[n].x, pi) + TIME;
                            Fish  fish = new Fish();
                            fish.Init(0, gd.FishIndex, gd.FishScaling, time, gd.ActionSpeed, gd.ActionUnite, gd.SpeedScaling, pi);
                            fish.SetOffset(new Vector3(0, gd.PosList[n].y, gd.PosList[n].z));
                            WriteToList(fish, bw);
                        }
                    }
                }
            }
            yield return(new WaitForEndOfFrame());

            Debug.Log("groupIndex:" + i + "/" + groupCount);
        }
        Debug.Log("完成.");
        bw.Close();
        fs.Close();
    }
Beispiel #2
0
    public void  LaunchFishByAsycScene(NetCmdPack pack)
    {
        NetCmdSyncFish cmdFish     = (NetCmdSyncFish)pack.cmd;
        GroupDataList  gdl         = FishResManager.Instance.GetFishGroup(cmdFish.GroupID);
        float          elapsedTime = Utility.TickSpan(pack.tick) + SceneRuntime.NetDelayTime;

        if (gdl.PathGroupData != null)
        {
            FishPathGroupData        pathgroup  = gdl.PathGroupData;
            PathLinearInterpolator[] interpList = PathManager.Instance.GetPathGroup(pathgroup.PathGroupIndex, SceneRuntime.Inversion);
            if (cmdFish.PathIdx >= interpList.Length)
            {
                LogMgr.Log("路径数量和服务器不一致,路径群:" + cmdFish.PathGroup + ", 索引:" + cmdFish.PathIdx);
            }
            {
                Fish fish = new Fish();
                fish.Init(cmdFish.FishID, pathgroup.FishIndex, pathgroup.FishScaling, cmdFish.FishTime, pathgroup.ActionSpeed, pathgroup.ActionUnite, pathgroup.Speed, interpList[cmdFish.PathIdx]);
#if UNITY_EDITOR
                fish.SetModelName("Fish_PathGroup_" + cmdFish.GroupID);
#endif
                if (fish.Update(elapsedTime))
                {
                    SetFish(fish);
                    fish.Controller.CheckCurrentEvent(cmdFish.IsActiveEvent);
                    fish.Controller.PathEvent.m_CurElapsedTime = cmdFish.ElapsedTime * 0.001f;
                    if (cmdFish.Package != 255)
                    {
                        fish.SetPackage(cmdFish.Package);
                    }
                    if (cmdFish.DelayType != (byte)FISH_DELAY_TYPE.DELAY_NONE)
                    {
                        float   scl;
                        float[] dur = new float[3];
                        Utility.ReductionToFloat(cmdFish.DelayScaling, cmdFish.DelayDuration1, cmdFish.DelayDuration2, cmdFish.DelayDuration3,
                                                 out scl, dur);
                        float time = cmdFish.DelayCurrentTime * 0.001f;
                        fish.Controller.TimeController.AddSkillTimeScaling(scl, dur, (FISH_DELAY_TYPE)cmdFish.DelayType, time);
                    }
                }
            }
        }
        else
        {
            float fInv      = SceneRuntime.Inversion ? -1.0f : 1.0f;
            int   pathIndex = cmdFish.PathGroup;
            int   gdIdx     = cmdFish.PathIdx >> 8;
            int   fishIdx   = cmdFish.PathIdx & 0xff;

            PathLinearInterpolator pi = PathManager.Instance.GetPath(pathIndex, SceneRuntime.Inversion);
            if (gdIdx >= gdl.GroupDataArray.Length)
            {
                LogMgr.Log("场景鱼同步,索引超出界限1:" + gdIdx);
                return;
            }
            GroupData gd = gdl.GroupDataArray[gdIdx];
            {
                {
                    Fish fish = new Fish();
                    fish.Init(cmdFish.FishID, gd.FishIndex, gd.FishScaling, cmdFish.FishTime, gd.ActionSpeed, gd.ActionUnite, gd.SpeedScaling, pi);
#if UNITY_EDITOR
                    fish.SetModelName("Fish_FishGroup_" + cmdFish.GroupID + "_Path_" + pathIndex);
#endif
                    if (fish.Update(elapsedTime))
                    {
                        if (fishIdx >= gd.PosList.Length)
                        {
                            LogMgr.Log("场景鱼同步,索引超出界限2:" + gdIdx);
                            return;
                        }
                        fish.SetOffset(new Vector3(0, fInv * gd.PosList[fishIdx].y, gd.PosList[fishIdx].z));
                        SetFish(fish);
                        if (cmdFish.Package != 255)
                        {
                            fish.SetPackage(cmdFish.Package);
                        }
                        fish.Controller.CheckCurrentEvent(cmdFish.IsActiveEvent);
                        fish.Controller.PathEvent.m_CurElapsedTime = cmdFish.ElapsedTime * 0.001f;
                        if (cmdFish.DelayType != (byte)FISH_DELAY_TYPE.DELAY_NONE)
                        {
                            float   scl;
                            float[] dur = new float[3];
                            Utility.ReductionToFloat(cmdFish.DelayScaling, cmdFish.DelayDuration1, cmdFish.DelayDuration2, cmdFish.DelayDuration3,
                                                     out scl, dur);
                            float time = cmdFish.DelayCurrentTime * 0.001f;
                            fish.Controller.TimeController.AddSkillTimeScaling(scl, dur, (FISH_DELAY_TYPE)cmdFish.DelayType, time);
                        }
                    }
                }
            }
        }
    }
Beispiel #3
0
    public void LaunchFish(NetCmdPack pack)
    {
        NetCmdFish    cmdFish     = (NetCmdFish)pack.cmd;
        GroupDataList gdl         = FishResManager.Instance.GetFishGroup(cmdFish.GroupID);
        ushort        startID     = cmdFish.StartID;
        float         elapsedTime = Utility.TickSpan(pack.tick) + SceneRuntime.NetDelayTime;

        if (gdl.PathGroupData != null)
        {
            FishPathGroupData        pathgroup  = gdl.PathGroupData;
            PathLinearInterpolator[] interpList = PathManager.Instance.GetPathGroup(pathgroup.PathGroupIndex, SceneRuntime.Inversion);
            foreach (PathLinearInterpolator interp in interpList)
            {
                Fish fish = new Fish();
                fish.Init(startID, pathgroup.FishIndex, pathgroup.FishScaling, 0, pathgroup.ActionSpeed, pathgroup.ActionUnite, pathgroup.Speed, interp);
#if UNITY_EDITOR
                fish.SetModelName("Fish_PathGroup_" + cmdFish.GroupID);
#endif
                if (fish.AddElapsedTime(elapsedTime))
                {
                    SetFish(fish);
                }
                else
                {
                    fish.Destroy();
                }

                if (++startID >= FishSetting.FISH_MAX_NUM)
                {
                    startID = 0;
                }
            }
        }
        else
        {
            float fInv                = SceneRuntime.Inversion ? -1.0f : 1.0f;
            int   pathIndex           = cmdFish.PathID;
            PathLinearInterpolator pi = PathManager.Instance.GetPath(pathIndex, SceneRuntime.Inversion);
            float startX              = gdl.FrontPosition.x;
            foreach (GroupData gd in gdl.GroupDataArray)
            {
                if (gd == null)
                {
                    break;
                }
                if (gd.FishNum > gd.PosList.Length)
                {
                    LogMgr.Log("错误的鱼群路径点:" + gd.FishNum + ", posnum:" + gd.PosList.Length);
                    return;
                }
                for (int i = 0; i < gd.FishNum; ++i)
                {
                    float time = Utility.GetPathTimeByDist(startX, gd.PosList[i].x, pi);
                    Fish  fish = new Fish();
                    fish.Init(startID, gd.FishIndex, gd.FishScaling, time, gd.ActionSpeed, gd.ActionUnite, gd.SpeedScaling, pi);
#if UNITY_EDITOR
                    fish.SetModelName("Fish_FishGroup_" + cmdFish.GroupID + "_Path_" + pathIndex);
#endif
                    if (fish.AddElapsedTime(elapsedTime))
                    {
                        fish.SetOffset(new Vector3(0, fInv * gd.PosList[i].y, gd.PosList[i].z));
                        SetFish(fish);
                    }
                    else
                    {
                        fish.Destroy();
                    }
                    if (++startID == FishSetting.FISH_MAX_NUM)
                    {
                        startID = 0;
                    }
                }
            }
        }
    }