コード例 #1
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;
                    }
                }
            }
        }
    }