public Space(Hero hero, List<Enemy> enemies, float leftEdge)
            : base()
        {
            this.hero = hero;

            powerups = new List<PowerUp>();
            dyepacks = new List<DyePack>();
            debris = new List<Debris>();
            trail = new Trail(hero);

            float height = GameWorld.topEdge;
            float position = (width * 0.5f) + leftEdge;

            space = new XNACS1Rectangle(new Vector2(position, height/2), width, height);
            space.Visible = false;

            // add dyepacks to space region
            List<Color> colors = Game.randomColorSet(Game.colorCount);
            float rightEdge = space.CenterX + space.Width / 2;
            float region = (rightEdge - leftEdge) / dyepackCount;
            for (int i = 0; i < dyepackCount; i++)
            {
                float regionLeft = leftEdge + (i * region);
                float regionRight = regionLeft + region;
                dyepacks.Add(new DyePack(hero, regionLeft, regionRight, colors[i % Game.colorCount]));
            }

            region = (rightEdge - leftEdge) / powerupCount;
            for (int i = 0; i < powerupCount; i++)
            {
                float regionLeft = leftEdge + (i * region);
                float regionRight = regionLeft + region;
                powerups.Add(PowerUp.randomPowerUp(hero, regionLeft, regionRight));
            }

            // offset the region to pad the space before the next element
            // this makes the region slightly smaller than it actually should be otherwise
            int offset = 1;
            region = (rightEdge - leftEdge) / (debrisCount + offset);
            for (int i = 0; i < debrisCount; i++) {
                float regionLeft = leftEdge + (i * region);
                float regionRight = regionLeft + region;
                debris.Add(new Debris(hero, enemies, regionLeft, regionRight));
            }
        }