예제 #1
0
파일: ViTimer.cs 프로젝트: xubingyue/def
 private void _UpdateTimeList(ViDoubleLink1 <ViTimeNodeInterface> list)
 {
     while (list.IsNotEmpty())
     {
         ViTimeNodeInterface timeNode = list.GetHead() as ViTimeNodeInterface;
         ViDebuger.AssertError(timeNode);
         timeNode.Detach();
         timeNode._Exce(this);
     }
     ViDebuger.AssertError(list.IsEmpty());
 }
예제 #2
0
    //+-------------------------------------------------------------------------------------------------------------------------------------------------------------
    public static void SetFreq(ViTimeNodeInterface node, float oldFreq, float newFreq)
    {
        if (node.IsAttach() == false)        //! 如果回调已经发生过了, 则无法进行重新设置
        {
            return;
        }
        ViTime64 currentTime     = _timer.Time;
        ViTime64 delta           = node.Time - currentTime;
        ViTime64 deltaTimeOldMod = (delta > 0) ? delta : 0;
        ViTime64 deltaTime       = (ViTime64)(deltaTimeOldMod * oldFreq);
        ViTime64 deltaTimeNewMod = (ViTime64)(deltaTime / newFreq);

        node.SetTime(_timer.Time + deltaTimeNewMod);
        _timer.Add(node);
    }
예제 #3
0
 public static void Modify(ViTimeNodeInterface node, ViTime64 deltaTime)
 {
     if (node.IsAttach() == false)        //! 如果回调已经发生过了, 则无法进行重新设置
     {
         return;
     }
     if (node.Time > -deltaTime)
     {
         node.SetTime(node.Time + deltaTime);
     }
     else
     {
         node.SetTime(0);
     }
     _timer.Add(node);
 }
예제 #4
0
파일: ViTimer.cs 프로젝트: xubingyue/def
 public void Add(ViTimeNodeInterface node)
 {
     if (node.Time < _roll0.TimeInf)
     {
         node.SetTime(_roll0.TimeInf);
     }
     if (_roll0.InRange(node.Time))
     {
         _roll0.Add(node);
         return;
     }
     if (_roll1.InRange(node.Time))
     {
         _roll1.Add(node);
         return;
     }
     _AddEvent(_reserveList, node);
 }
예제 #5
0
파일: ViTimer.cs 프로젝트: xubingyue/def
    //
    private static void _AddEvent(ViDoubleLink1 <ViTimeNodeInterface> list, ViTimeNodeInterface node)
    {
        ViDoubleLinkNode1 <ViTimeNodeInterface> iter = list.GetHead();

        while (!list.IsEnd(iter))
        {
            ViTimeNodeInterface timeNode = iter as ViTimeNodeInterface;
            ViDebuger.AssertError(timeNode);
            ViDoubleLink1 <ViTimeNodeInterface> .Next(ref iter);

            if (timeNode.Time > node.Time)
            {
                ViDoubleLink1 <ViTimeNodeInterface> .PushBefore(iter, node);

                return;
            }
        }
        list.PushBack(node);
    }
예제 #6
0
파일: ViTimer.cs 프로젝트: xubingyue/def
    public void Add(ViTimeNodeInterface node)
    {
        ViTime64 time = node.Time;

        ViDebuger.AssertError(_timeInf <= time && time < _timeSup);
        UInt32 slot = _idx;

        if (time > _timeInf)
        {
            UInt32 deltaSlot = (UInt32)((time - _timeInf) / _span);
            slot = deltaSlot + _idx;
            ViDebuger.AssertError(deltaSlot < _timeListArray.Size);
            if (slot >= _timeListArray.Size)
            {
                slot -= _timeListArray.Size;
            }
        }
        ViDebuger.AssertError(slot < _timeListArray.Size);
        _timeListArray.Get(slot).PushBack(node);
    }
예제 #7
0
파일: ViTimer.cs 프로젝트: xubingyue/def
    private static void _AddEvent(ViDoubleLink1 <ViTimeNodeInterface> list, TimeRoll timeRoll)
    {
        ViDoubleLinkNode1 <ViTimeNodeInterface> iter = list.GetHead();

        while (!list.IsEnd(iter))
        {
            ViTimeNodeInterface timeNode = iter as ViTimeNodeInterface;
            ViDebuger.AssertError(timeNode);
            ViDoubleLink1 <ViTimeNodeInterface> .Next(ref iter);

            if (timeRoll.InRange(timeNode.Time))
            {
                timeRoll.Add(timeNode);
            }
            else
            {
                break;
            }
        }
    }
예제 #8
0
 public void Func(ViTimeNodeInterface node)
 {
 }
예제 #9
0
 //
 void OnEndTime(ViTimeNodeInterface node)
 {
     End();
 }
예제 #10
0
 void OnAllowMoveStartTime(ViTimeNodeInterface node)
 {
 }
예제 #11
0
 void OnMoveTime(ViTimeNodeInterface node)
 {
     ViDebuger.AssertWarning(_state == State.PRESSED);
     _state = State.MOVING;
     _OnMoveStart();
 }