public AchievementPanel(float startX, SpriteFont title, SpriteFont desc, string achievementDesc, GraphicsDevice dev)
            : base(Vector2.Zero)
        {
            // Create "Achievement!" and description GameFonts
            GameFont titleObj = new GameFont(title, "Achievement!", new Vector2(5), Color.Yellow)
            {
                LayerDepth = 0.5f
            };
            GameFont descObj = new GameFont(desc, achievementDesc, new Vector2(2, titleObj.Size.Y + 5 + 4.5f), Color.White)
            {
                LayerDepth = 0.5f
            };

            Subsprites.Add(titleObj);
            Subsprites.Add(descObj);

            int achievePanelWidth  = -1;
            int achievePanelHeight = -1;


            // Positioning logic for text elements
            foreach (var spr in Subsprites)
            {
                Vector2 size = Vector2.Zero;

                if (!(spr is GameFont) && !(spr is GameSprite))
                {
                    continue;
                }
                if (spr is GameSprite)
                {
                    size = new Vector2((spr as GameSprite).Texture.Width, (spr as GameSprite).Texture.Height);
                }
                else
                {
                    size = (spr as GameFont).Size;
                }

                if (size.Y + spr.Position.Y > achievePanelHeight)
                {
                    achievePanelHeight = Convert.ToInt32(Math.Ceiling(size.Y + spr.Position.Y));
                }

                if (size.X + spr.Position.X > achievePanelWidth)
                {
                    achievePanelWidth = Convert.ToInt32(Math.Ceiling(size.X + spr.Position.X));
                }
            }

            titleObj.Position = new Vector2(achievePanelWidth / 2 - (titleObj.Size.X / 2), titleObj.Position.Y);
            descObj.Position  = new Vector2(achievePanelWidth / 2 - (descObj.Size.X / 2), descObj.Position.Y);

            // Create a solid color background
            Subsprites.Insert(0, GameSprite.CreateSolidColor(Vector2.Zero, achievePanelWidth + 5, achievePanelHeight + 10, Color.Black, dev));
            Subsprites[0].LayerDepth = 1;

            Position  = new Vector2(startX, -achievePanelHeight);
            IsVisible = false;

            Width  = achievePanelWidth;
            Height = achievePanelHeight;

            changeState(PanelState.Waiting);
        }