private void Timer_Tick(object sender, EventArgs e) { if (m_OnlineClient == null) { return; } UInt32 deltaTick; m_OnlineClient.UpdateGameTick(out deltaTick); float deltaTickTime = (float)(deltaTick) * ActorMovementObject.DeltaSecondsPerFrame; var prevFrame = m_MyMove.MoveFrame; m_MyMove.MoveFrame = m_OnlineClient.GetCurrentMoveFrame() + 4; if ((DateTime.Now - m_MoveStart).TotalSeconds > 1) { m_MyMove.LinearVelocity = new Vector4() { x = 0, y = 0, z = 0, w = 0 }; } else { m_MyMove.Position.x += m_MyMove.LinearVelocity.x * deltaTickTime; m_MyMove.Position.y += m_MyMove.LinearVelocity.y * deltaTickTime; m_MyMove.Position.z += m_MyMove.LinearVelocity.z * deltaTickTime; } m_OnlineClient.SendMovement(ref m_MyMove); foreach (var itPlayer in m_OtherPlayers) { ActorMovement newMovement; if (m_OnlineClient.GetMovementForPlayer(itPlayer.Value.PlayerId, out newMovement).IsFailed) { continue; } itPlayer.Value.Movement = newMovement; } }