public void TestOverlap()
    {
      var loc1 = new SequenceRegion()
      {
        Seqname = "2",
        Start = 12227067,
        End = 12227087
      };

      var loc2 = new SequenceRegion()
      {
        Seqname = "1",
        Start = 12227065,
        End = 12227076
      };

      //different chromosomes
      Assert.IsFalse(loc1.Overlap(loc2, 0.0));

      loc1.Seqname = "1";
      Assert.IsTrue(loc1.Overlap(loc2, 0.0));

      loc1.Start = loc2.End + 1;
      Assert.IsFalse(loc1.Overlap(loc2, 0.0));
    }
    private int             ReadCSV_OnBeatAction(System.IO.TextReader reader, int line_number)
    {
        string         line;
        SequenceRegion region = new SequenceRegion();

        List <OnBeatActionInfo> sequence = new List <OnBeatActionInfo>();

        while ((line = reader.ReadLine()) != null)
        {
            line_number++;

            string[] lineCells = line.Split(',');
            switch (lineCells[0])
            {
            case "regionParameters":
                region.name           = lineCells[1];
                region.totalBeatCount = float.Parse(lineCells[2]);
                region.repeatPosition = float.Parse(lineCells[3]);
                break;

            case "scoringUnitSequenceRegion-End":
            { region.triggerBeatTiming = m_onBeatActionInfoRegionOffset;
              songInfo.onBeatActionRegionSequence.Add(region);
              for (float repeatOffest = 0; repeatOffest < region.totalBeatCount; repeatOffest += region.repeatPosition)
              {
                  foreach (OnBeatActionInfo onBeatActionInfo in sequence)
                  {
                      if (onBeatActionInfo.triggerBeatTiming + repeatOffest > region.totalBeatCount)
                      {
                          break;
                      }
                      OnBeatActionInfo cloned = onBeatActionInfo.GetClone() as OnBeatActionInfo;
                      cloned.triggerBeatTiming += m_onBeatActionInfoRegionOffset + repeatOffest;
                      songInfo.onBeatActionSequence.Add(cloned);
                  }
              }
              m_onBeatActionInfoRegionOffset += region.totalBeatCount;
              return(line_number); }

            // ↑已经有 return 所以这个 break 不会被执行
            //break;
            case "SingleShot":
            {
                OnBeatActionInfo onBeatActionInfo = new OnBeatActionInfo();
                if (lineCells[2] != "")
                {
                    onBeatActionInfo.playerActionType
                        = (PlayerActionEnum)System.Enum.Parse(typeof(PlayerActionEnum), lineCells[2]);
                }
                else
                {
                    onBeatActionInfo.playerActionType = PlayerActionEnum.HeadBanging;
                }
                onBeatActionInfo.triggerBeatTiming = float.Parse(lineCells[1]);

                // 记录下定义的行号用于调试
                onBeatActionInfo.line_number = line_number;

                sequence.Add(onBeatActionInfo);
            }
            break;
            }
            ;
        }
        Debug.LogError("ScoringUnitSequenceRegion.ReadCSV: ParseError - missing ScoringUnitSequenceRegion-End");

        return(line_number);
    }
    private List<SequenceRegion> InitLocs()
    {
      loc1 = new SequenceRegion()
      {
        Seqname = "2",
        Start = 12227067,
        End = 12227087
      };

      loc2 = new SequenceRegion()
      {
        Seqname = "1",
        Start = 12227065,
        End = 12227076
      };

      var locs = new List<SequenceRegion>(new[] { loc1, loc2 });
      return locs;
    }
示例#4
0
    /// <summary>
    /// 读入谱面信息
    /// </summary>
    /// <param name="reader"></param>
    /// <param name="line_number"></param>
    /// <returns></returns>
    private int     ReadCSV_OnBeatAction(System.IO.TextReader reader, int line_number, int _iIndex)
    {
        string         line;
        SequenceRegion region = new SequenceRegion();

        List <OnBeatActionInfo> sequence = new List <OnBeatActionInfo>();

        while ((line = reader.ReadLine()) != null)
        {
            line_number++;
            Debug.Log("line_number :" + _iIndex + " " + line_number);

            string[] lineCells = line.Split(',');
            switch (lineCells[0])
            {
            case "regionParameters":
                region.name           = lineCells[1];              //-区域的名字调试用
                region.totalBeatCount = float.Parse(lineCells[2]); //-一共多少拍
                region.repeatPosition = float.Parse(lineCells[3]); //-部分重复单位(节拍数)
                break;

            case "scoringUnitSequenceRegion-End":            //-区域结束,应该只有一块
            {
                region.triggerBeatTiming = m_onBeatActionInfoRegionOffset[_iIndex - 1];
                songInfo.onBeatActionRegionSequence.Add(region);
                for (float repeatOffest = 0; repeatOffest < region.totalBeatCount; repeatOffest += region.repeatPosition)
                {
                    foreach (OnBeatActionInfo onBeatActionInfo in sequence)
                    {
                        if (onBeatActionInfo.triggerBeatTiming + repeatOffest > region.totalBeatCount)
                        {
                            break;
                        }
                        OnBeatActionInfo cloned = onBeatActionInfo.GetClone() as OnBeatActionInfo;
                        cloned.triggerBeatTiming += m_onBeatActionInfoRegionOffset[_iIndex - 1] + repeatOffest;
                        songInfo.onBeatActionSequence[_iIndex - 1].Add(cloned);
                    }
                }
                m_onBeatActionInfoRegionOffset[_iIndex - 1] += region.totalBeatCount;
            }
                return(line_number);

            // 因为↑有return,所以这个break不被执行.
            //break;

            case "SingleShot":
            {
                OnBeatActionInfo onBeatActionInfo = new OnBeatActionInfo();
                if (lineCells[2] != "")
                {
                    onBeatActionInfo.playerActionType
                        = (PlayerActionEnum)System.Enum.Parse(typeof(PlayerActionEnum), lineCells[2]);
                }
                else    //-默认就是HeadBanging
                {
                    onBeatActionInfo.playerActionType = PlayerActionEnum.HeadBanging;
                }
                Debug.Log("triggerBeatTiming :" + float.Parse(lineCells[1]));
                onBeatActionInfo.triggerBeatTiming = float.Parse(lineCells[1]);

                //-记录行号
                onBeatActionInfo.line_number = line_number;

                sequence.Add(onBeatActionInfo);
            }
            break;
            }
            ;
        }
        Debug.LogError("ScoringUnitSequenceRegion.ReadCSV: ParseError - missing ScoringUnitSequenceRegion-End");

        return(line_number);
    }