using Penguloon.Scenes; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using Penguloon.Levels; using Microsoft.Xna.Framework.Input.Touch; namespace Penguloon.Controls { class LevelSelector : ControlBase { public int PanelWidth { get; set; } public const int PanelMarginX = 30; public const int MaxPanels = 3; int selectedMap = 0; public List Levels { get; set; } = new List(); public Rectangle Panel1 { get; set; } public Rectangle Panel2 { get; set; } public Rectangle Panel3 { get; set; } public LevelSelector(SceneBase parentScene, Vector2 position, Vector2 size) : base(parentScene, position, size) { this.BackgroundIdle = ContentManager.GetTexture("UI/btnIdle"); this.BackgroundPressed = ContentManager.GetTexture("UI/btnIdle"); this.BackgroundDisabled = ContentManager.GetTexture("UI/btnIdle"); PanelWidth = ((int)((StaticUIValues.ScreenViewport.X - ((MaxPanels + 1) * PanelMarginX)) / MaxPanels)); int panel1posX = (PanelMarginX + (PanelMarginX * 0) + (PanelWidth * 0)) + 20; int panel2posX = (PanelMarginX + (PanelMarginX * 1) + (PanelWidth * 1)); int panel3posX = (PanelMarginX + (PanelMarginX * 2) + (PanelWidth * 2)) - 20; int sidePanelMarginY = 25; int centerPanelWidth = (int)(PanelWidth * 1.2); Panel1 = new Rectangle(panel1posX, (int)position.Y + (sidePanelMarginY / 2), (int)(PanelWidth * 1), (int)size.Y - sidePanelMarginY); Panel2 = new Rectangle(panel2posX - ((centerPanelWidth - PanelWidth) / 2), (int)position.Y, centerPanelWidth, (int)size.Y); Panel3 = new Rectangle(panel3posX, (int)position.Y + (sidePanelMarginY / 2), (int)(PanelWidth * 1), (int)size.Y - sidePanelMarginY); this.OnClick += LevelSelector_OnClick; CreateLevels(); } private void LevelSelector_OnClick(object sender, ClickArgs e) { Rectangle fingerRec = new Rectangle(e.ClickPosition.ToPoint(), new Point(1, 1)); if (Panel1.Intersects(fingerRec) && selectedMap > 0) { selectedMap--; } if (Panel2.Intersects(fingerRec)) { SoundManager.PlayClickSound(); SceneManager.GameScene = new GameScene(ParentScene.Main, Levels[selectedMap]); SceneManager.SelectedScene = SelectedScene.Ingame; } if (Panel3.Intersects(fingerRec) && selectedMap < Levels.Count - 1) { selectedMap++; } } private void CreateLevels() { Levels.Add(new IceLevel()); Levels.Add(new IceLevel()); Levels.Add(new IceLevel()); } public override void Draw(float deltaTime) { // We dont need to draw text or a background //base.Draw(deltaTime); DrawPanels(); } private void DrawPanels() { if (selectedMap - 1 >= 0) { ParentScene.Main.SpriteBatch.Draw(Levels[selectedMap - 1].SplashArt, destinationRectangle: Panel1); } if (selectedMap + 1 < Levels.Count) { ParentScene.Main.SpriteBatch.Draw(Levels[selectedMap + 1].SplashArt, destinationRectangle: Panel3); } ParentScene.Main.SpriteBatch.Draw(Levels[selectedMap].SplashArt, destinationRectangle: Panel2); } } }