public SpeedAlert( MovementSource source, INotificationProvider provider ) { this.source = source; NotificationProvider = provider; timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds( 5 ) }; timer.Tick += Timer_Tick; source.PropertyChanged += Source_PropertyChanged; }
public void DecodeFromPacket(Packet packet, MovementSource source) { PacketCreationDate = packet.PacketCreationTime; Source = source; short foothold = 0; byte stance = 0; var x = packet.ReadShort(); var y = packet.ReadShort(); OriginalPosition = new Pos(x, y); var movementCount = packet.ReadByte(); Elements = new MoveElement[movementCount]; for (var i = 0; i < movementCount; i++) { var mt = (MovementType)packet.ReadByte(); var me = new MoveElement { Type = mt, Foothold = foothold, X = x, Y = y, Stance = stance }; switch (mt) { case MovementType.NormalMovement: case MovementType.NormalMovement2: me.X = packet.ReadShort(); me.Y = packet.ReadShort(); me.XVelocity = packet.ReadShort(); me.YVelocity = packet.ReadShort(); me.Foothold = packet.ReadShort(); me.Stance = packet.ReadByte(); me.TimeElapsed = packet.ReadShort(); break; case MovementType.Jump: case MovementType.JumpKb: case MovementType.FlashJump: me.XVelocity = packet.ReadShort(); me.YVelocity = packet.ReadShort(); me.Stance = packet.ReadByte(); me.TimeElapsed = packet.ReadShort(); break; case MovementType.Immediate: case MovementType.Teleport: case MovementType.Assaulter: me.X = packet.ReadShort(); me.Y = packet.ReadShort(); me.Foothold = packet.ReadShort(); me.Stance = packet.ReadByte(); me.TimeElapsed = packet.ReadShort(); break; case MovementType.Falling: me.Stat = packet.ReadByte(); break; default: me.Stance = packet.ReadByte(); me.TimeElapsed = packet.ReadShort(); break; } x = me.X; y = me.Y; foothold = me.Foothold; stance = me.Stance; Elements[i] = me; } var keypadStates = packet.ReadByte(); for (var i = 0; i < keypadStates; i++) { if ((i % 2) == 0) { packet.ReadByte(); } } NewPosition = new Pos(x, y); NewStance = stance; NewFoothold = foothold; }