public void OnFreamAsyn(SCFrameNotify frameAsyn) { if (!_isGameing) { return; } // 无操作的帧, 直接跑过去 if (_nextFrameSetp < frameAsyn.CurrentFrame) { TickerManager.Instance.DriveToTickCount(frameAsyn.CurrentFrame - 1); _nextFrameSetp = frameAsyn.CurrentFrame; } // 这个是我们需要的 if (_nextFrameSetp != frameAsyn.CurrentFrame) { return; } // 按按键 foreach (CSFrameNotify frameControlList in frameAsyn.Keys) { if (_inputListeners.ContainsKey(frameControlList.Uin)) { IInputListener listener = _inputListeners[frameControlList.Uin]; foreach (var con in frameControlList.Keys) { #region 解析按键 ushort key = (ushort)con; ushort type = (byte)(key & 0x3); key >>= 2; ushort value = (ushort)(key & 0x3FF); key >>= 10; key &= 0xF; #endregion if (key == InputDefine.DIRCTION_KEY) { float ang = value; if (CommonFunction.GreatOrEqualZero(ang - 180f)) { ang -= 360f; } listener.OnMove(ang, (MoveType)type); } else { if (type > 0) { listener.OnFunctionKeyDown(key); } else { listener.OnFunctionKeyUp(key); } } } } } _nextFrameSetp = frameAsyn.NextFrame; TickerManager.Instance.DriveToTickCount(_nextFrameSetp - 1); }
public override void DeSerialize(MemoryStream stream) { _data = SCFrameNotify.Parser.ParseFrom(stream); }