protected override JobHandle OnUpdate(JobHandle inputDeps)
    {
        var deltaTime = TimeUtility.GetLimitedDeltaTime();
        var playerLevelChangeTimeConfig         = m_PlayerLevelChangeTimeConfig;
        var playerLevelDownProtectionTimeConfig = m_PlayerLevelDownProtectionTimeConfig;
        var playerConfig = GameEntry.Instance.Config.Global.Player;
        var defaultScale = playerConfig.DefaultScale;
        var superScale   = playerConfig.SuperScale;

        var jobHandle = Entities
                        .ForEach((ref PlayerStates playerStates, ref Translation translation, ref CompositeScale scaleComponent, ref PhysicsCollider physicsCollider) =>
        {
            if (!PlayerUtility.IsChangingLevel(playerStates))
            {
                return;
            }

            if (math.abs(playerStates.LevelChangeTimeUsed) <= float.Epsilon)
            {
                playerStates.LevelDownProtectionTime = 0;
                var oldScale         = MathUtility.MatrixToScale(scaleComponent.Value);
                var newScale         = playerStates.NextLevel == PlayerLevel.Default ? defaultScale : superScale;
                scaleComponent.Value = MathUtility.ScaleToMatrix(newScale);
                translation.Value.y += newScale.y / 2 - oldScale.y / 2;
                PhysicsUtility.SetBoxColliderSize(physicsCollider, newScale);
            }

            if (playerStates.LevelChangeTimeUsed >= playerLevelChangeTimeConfig)
            {
                playerStates = CompleteLevelChange(playerStates, playerLevelDownProtectionTimeConfig);
            }
            else
            {
                playerStates.LevelChangeTimeUsed += deltaTime;
            }
        }).Schedule(inputDeps);

        jobHandle.Complete();
        return(jobHandle);
    }