public void Restart(FieldComponent field, CounterComponent counter)
        {
            for (var x = 0; x < field.Map.GetLength(0); x++)
            for (var y = 0; y < field.Map.GetLength(1); y++)
            {
                field.Map[x, y] = Random.NextInt(SharedData.ColorsCount);
            }

            counter.GameOver = false;

            for (int i = 0; i < counter.Players.Count; i++)
            {
                counter.Players[i].Size = 1;
            }
        }
        protected override void DoAction(Entity entity, TimeSpan gameTime)
        {
            base.DoAction(entity, gameTime);

            var shake = entity.GetComponent <CameraShakeComponent>();

            if (!shake.Enabled)
            {
                return;
            }

            if (shake.OriginalPosition == Vector2.Zero)
            {
                shake.OriginalPosition = shake.Camera.Position;
            }

            if (Math.Abs(shake.ShakeIntensity) > 0f)
            {
                shake.ShakeOffset = shake.ShakeDirection;
                if (shake.ShakeOffset.X != 0f || shake.ShakeOffset.Y != 0f)
                {
                    shake.ShakeOffset.Normalize();
                }
                else
                {
                    shake.ShakeOffset.X = shake.ShakeOffset.X + Random.NextFloat() - 0.5f;
                    shake.ShakeOffset.Y = shake.ShakeOffset.Y + Random.NextFloat() - 0.5f;
                }

                // ToDo: this needs to be multiplied by camera zoom so that less shake gets applied when zoomed in
                shake.ShakeOffset    *= shake.ShakeIntensity;
                shake.ShakeIntensity *= -shake.ShakeDegradation;
                if (Math.Abs(shake.ShakeIntensity) <= 0.01f)
                {
                    shake.ShakeIntensity   = 0f;
                    shake.Enabled          = false;
                    shake.ShakeOffset      = shake.OriginalPosition - shake.Camera.Position;
                    shake.OriginalPosition = Vector2.Zero;
                }
            }

            shake.Camera.Position += shake.ShakeOffset;
        }