private static ParticleEmitterConfig CreateConfig(LevelBlueprint bp, FlatAlign4 a)
        {
            var w = 0f;

            switch (a)
            {
            case FlatAlign4.TOP:
            case FlatAlign4.BOTTOM:
                w = bp.LevelWidth;
                break;

            case FlatAlign4.LEFT:
            case FlatAlign4.RIGHT:
                w = bp.LevelHeight;
                break;

            default:
                SAMLog.Error("PPE::EnumSwitch_CC", "value = " + a);
                break;
            }

            return(new ParticleEmitterConfig.ParticleEmitterConfigBuilder
            {
                // star stuff
                TextureIndex = 10,
                SpawnRate = (0.1f * w),

                ParticleAlphaInitial = 0f,
                ParticleAlphaFinal = 1f,

                ParticleLifetimeMin = 1f,
                ParticleLifetimeMax = 2.5f,

                ParticleSizeInitial = 16,
                ParticleSizeFinal = 0,

                Color = Color.Black,
            }.Build(Textures.TexParticle));
        }
        public DonutParticleEmitter(GDGameScreen scrn, LevelBlueprint bp, FlatAlign4 a)
            : base(scrn, CreateConfig(bp, a), GDConstants.ORDER_GAME_PORTALPARTICLE)
        {
            Position = new FPoint(bp.LevelWidth / 2f, bp.LevelHeight / 2f);

            switch (a)
            {
            case FlatAlign4.TOP:
                _start     = new FPoint(0, 0);
                _direction = new Vector2(bp.LevelWidth, 0);
                _normal    = new Vector2(0, 1);
                break;

            case FlatAlign4.RIGHT:
                _start     = new FPoint(bp.LevelWidth, 0);
                _direction = new Vector2(0, bp.LevelHeight);
                _normal    = new Vector2(-1, 0);
                break;

            case FlatAlign4.BOTTOM:
                _start     = new FPoint(bp.LevelWidth, bp.LevelHeight);
                _direction = new Vector2(-bp.LevelWidth, 0);
                _normal    = new Vector2(0, -1);
                break;

            case FlatAlign4.LEFT:
                _start     = new FPoint(0, bp.LevelHeight);
                _direction = new Vector2(0, -bp.LevelHeight);
                _normal    = new Vector2(1, 0);
                break;

            default:
                SAMLog.Error("PPE::EnumSwitch_DPE", "value = " + a);
                break;
            }

            DrawingBoundingBox = new FSize(bp.LevelWidth, bp.LevelHeight);
        }