public Userinterface(TextureInput inputHandler) { string s = "PAUSED"; pause = new DrawableString(s, new Vector2(Config.Width - DrawableString.Measure(s).X - position.X, position.Y * 5), Color.OrangeRed); fpsString = new DrawableString("FPS: 0", position + new Vector2(Config.Width - 10 * 14, offset.Y), Color.White); s = "Thickness: " + Config.LineThickness; thickness = new DrawableString(s, new Vector2(Config.Width - DrawableString.Measure(s).X - position.X, position.Y * 3), Color.White); sideBar = new SideBar(inputHandler); s = "Stefan P" + (char)('o' + 42) + "lloth"; stef = new DrawableString(s, new Vector2(Config.Width - DrawableString.Measure(s, 1).X - position.X, Config.Height - position.Y * 4), Color.White, 1); s = "Tobias Nickl"; tobi = new DrawableString(s, new Vector2(Config.Width - DrawableString.Measure(s, 1).X - position.X, Config.Height - position.Y * 3), Color.White, 1); s = "Jeremy Probst"; jerry = new DrawableString(s, new Vector2(Config.Width - DrawableString.Measure(s, 1).X - position.X, Config.Height - position.Y * 2), Color.White, 1); float scale = 1 / 12f; othTex = Texture2D.FromFile(RenderFrame.Instance.device, @".\Content\oth.png"); oth = new Rectangle2D(new Vector2(Config.Width - Config.Width * scale * 1.2f - 10, stef.Location.Y - (int)(Config.Height * scale) - 10), (int)(Config.Width * scale * 1.2f), (int)(Config.Height * scale), othTex); oth.Color = new Color4(0.4f, 1, 1, 1); }
public RenderFrame() { var bound = Screen.AllScreens[Config.DisplayScreen].Bounds; Config.Width = bound.Width; Config.Height = bound.Height; Point windowSize = new Point(Config.Width, Config.Height); Instance = this; RenderForm = new TouchForm("GameOfLife") { StartPosition = FormStartPosition.Manual, FormBorderStyle = FormBorderStyle.None, ClientSize = new Size(windowSize), Location = new Point(bound.X, bound.Y), }; CreateDeviceSwapChainContext(); Initialize(); SetContextStates(); OverrideEvents(); spriteBatch = new SpriteBatch(); inputHandler = new TextureInput(device); gol = new GameOfLifeCalculator(); QueryPerformanceFrequency(out freq); QueryPerformanceCounter(out tickPrev); UI = new Userinterface(inputHandler); RenderForm.MouseMove += RenderForm_MouseMove; RenderForm.MouseWheel += RenderForm_MouseWheel; RenderForm.MouseDown += OnMouseDown; RenderForm.MouseUp += RenderForm_MouseUp; RenderForm.Touchdown += OnTouchDownHandler; RenderForm.Touchup += OnTouchUpHandler; RenderForm.TouchMove += OnTouchMoveHandler; }
public SideBar(TextureInput iHandler) { inputHandler = iHandler; sideBarBackground.Add(new Rectangle2D(new Vector2(0, 0), Width, Config.Height, Color.FromArgb(200, 200, 200, 200))); sideBarBackground.Add(new Rectangle2D(new Vector2(0, 0), Width / 2, (int)(0.074 * Config.Height), Color.DimGray, (s) => State = SideBarState.LeftTab, SideBarState.RightTab)); // left tab GotInputClick += sideBarBackground.Last().HandleInput; sideBarBackground.Add(new Rectangle2D(new Vector2(Width / 2f, 0), Width / 2, (int)(0.074 * Config.Height), activeTabColor, (s) => State = SideBarState.RightTab, SideBarState.LeftTab)); //right tab GotInputClick += sideBarBackground.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2(0, Config.Height - (int)(0.093 * Config.Height)), Width, (int)(0.093 * Config.Height), Color.DimGray, (s) => State = SideBarState.Minimized, SideBarState.LeftTab | SideBarState.RightTab)); GotInputClick += rightTab.Last().HandleInput; maximize = new Rectangle2D(new Vector2(0, 0), MinimizedWidth, Config.Height, Color.FromArgb(200, 200, 200, 200), (s) => State = SideBarState.RightTab, SideBarState.Minimized); GotInputClick += maximize.HandleInput; var leftTabString = new DrawableString("Muster", new Vector2((float)0.1625 * Width, 5) + offset, Color.White); var rightTabString = new DrawableString("Einstellungen", new Vector2(Width / 2f + (float)0.0625 * Width, 5) + offset, Color.White); var minimizeString = new DrawableString("Einklappen", new Vector2((float)0.35 * Width, Config.Height - (int)(0.06 * Config.Height)), Color.White); maximizeString = new DrawableString(">", new Vector2((float)0.0125 * Width, Config.Height / 2f), Color.White); var pausebtn = new Rectangle2D(new Vector2((float)0.0625 * Width, (int)(0.093 * Config.Height)), (int)(0.25 * Width), (int)(0.074 * Config.Height), Color.DimGray, (s) => Config.Paused = !Config.Paused, SideBarState.RightTab); rightTab.Add(pausebtn); GotInputClick += pausebtn.HandleInput; var clearbtn = new Rectangle2D(new Vector2((float)0.0625 * Width * 2 + (int)(0.25 * Width), (int)(0.093 * Config.Height)), (int)(0.25 * Width), (int)(0.074 * Config.Height), Color.DimGray, (s) => inputHandler.ClearWorld(), SideBarState.RightTab); rightTab.Add(clearbtn); GotInputClick += clearbtn.HandleInput; var closebtn = new Rectangle2D(new Vector2((float)0.0625 * Width * 3 + (int)(0.25 * Width) * 2, (int)(0.093 * Config.Height)), (int)(0.25 * Width), (int)(0.074 * Config.Height), Color.DarkRed, (s) => RenderFrame.Instance.Exit(), SideBarState.RightTab); rightTab.Add(closebtn); GotInputClick += closebtn.HandleInput; //Farben int colorSize = (int)(0.0463 * Config.Height); rightTab.Add(new Rectangle2D(new Vector2((float)0.1875 * Width, 0) + 16 * offset, colorSize, colorSize, Color.Red, (s) => inputHandler.ChangeColor(new Color4(1, 1, 0, 0)), SideBarState.RightTab)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2((float)0.375 * Width, 0) + 16 * offset, colorSize, colorSize, Color.Green, (s) => inputHandler.ChangeColor(new Color4(1, 0, 1, 0)), SideBarState.RightTab)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2((float)0.5625 * Width, 0) + 16 * offset, colorSize, colorSize, Color.Blue, (s) => inputHandler.ChangeColor(new Color4(1, 0, 0, 1)), SideBarState.RightTab)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2((float)0.75 * Width, 0) + 16 * offset, colorSize, colorSize, Color.Black, (s) => inputHandler.ChangeColor(new Color4(1, 0, 0, 0)), SideBarState.RightTab)); GotInputClick += rightTab.Last().HandleInput; // Birth setting buttons for (int i = 0; i < 9; i++) { birth.Add(new Rectangle2D(new Vector2((float)0.175 * Width, (int)(-0.011 * Config.Height)) + (23 + i * 3) * offset, (int)(0.25 * Width), (int)(0.046 * Config.Height), (Config.BirthRule & 1 << i) > 0 ? Color.Green : Color.DimGray, OnBirthChanged, SideBarState.RightTab, i)); } // Death setting buttons for (int i = 0; i < 9; i++) { death.Add(new Rectangle2D(new Vector2((float)0.625 * Width, (int)(-0.011 * Config.Height)) + (23 + i * 3) * offset, (int)(0.25 * Width), (int)(0.046 * Config.Height), (Config.DeathRule & 1 << i) > 0 ? Color.Green : Color.DimGray, OnDeathChanged, SideBarState.RightTab, i)); } foreach (var r in birth.Concat(death)) { rightTab.Add(r); GotInputClick += r.HandleInput; } var size = DrawableString.Measure("Pause"); rightTabStrings.Add(new DrawableString("Pause", pausebtn.Location + pausebtn.Size / 2 - size / 2, Color.White)); size = DrawableString.Measure("Leeren"); rightTabStrings.Add(new DrawableString("Leeren", clearbtn.Location + clearbtn.Size / 2 - size / 2, Color.White)); rightTabStrings.Add(new DrawableString("Leben", new Vector2((float)0.2 * Width, 0) + 20 * offset, Color.White)); rightTabStrings.Add(new DrawableString("Tod", new Vector2((float)0.7 * Width, 0) + 20 * offset, Color.White)); size = DrawableString.Measure("Beenden"); rightTabStrings.Add(new DrawableString("Beenden", closebtn.Location + closebtn.Size / 2 - size / 2, Color.White)); rightTabStrings.Add(new DrawableString("Farbe", new Vector2(10, 10) + 16 * offset, Color.White)); for (int i = 0; i < 9; i++) { rightTabStrings.Add(new DrawableString(i.ToString(), new Vector2((float)0.025 * Width, 0) + (23 + 3 * i) * offset, Color.White)); } rightTabStrings.Add(minimizeString); rightTabStrings.Add(rightTabString); leftTabStrings.Add(rightTabString); rightTabStrings.Add(leftTabString); leftTabStrings.Add(leftTabString); }
public SideBar(TextureInput iHandler) { inputHandler = iHandler; var d = RenderFrame.Instance.device; screenshotTex = Texture2D.FromFile(d, @".\Content\floppy_save.png"); fileLoadTex = Texture2D.FromFile(d, @".\Content\file_open.png"); minusTex = Texture2D.FromFile(d, @".\Content\minus.png"); plusTex = Texture2D.FromFile(d, @".\Content\plus.png"); playTex = Texture2D.FromFile(d, @".\Content\playpause.png"); clearTex = Texture2D.FromFile(d, @".\Content\clear.png"); exitTex = Texture2D.FromFile(d, @".\Content\exit.png"); cornerTex = Texture2D.FromFile(d, @".\Content\corner.png"); // hintergrund sideBarBackground.Add(new Rectangle2D(new Vector2(0, 0), Width, Config.Height, Color.FromArgb(200, 200, 200, 200))); // 2 button oben zum umschalten zwischen den tabs rightTab.Add(new Rectangle2D(new Vector2(0, 0), Width / 2, (int)(0.074 * Config.Height), Color.DimGray, (s) => State = SideBarState.LeftTab, SideBarState.RightTab)); // left tab GotInputClick += rightTab.Last().HandleInput; leftTab.Add(new Rectangle2D(new Vector2(Width / 2f, 0), Width / 2, (int)(0.074 * Config.Height), Color.DimGray, (s) => State = SideBarState.RightTab, SideBarState.LeftTab)); //right tab GotInputClick += leftTab.Last().HandleInput; sideBarBackground.Add(new Rectangle2D(new Vector2(0, Config.Height - (int)(0.074 * Config.Height)), Width, (int)(0.093 * Config.Height), Color.DimGray, (s) => State = SideBarState.Minimized, SideBarState.LeftTab | SideBarState.RightTab)); GotInputClick += sideBarBackground.Last().HandleInput; maximize = new Rectangle2D(new Vector2(0, 0), MinimizedWidth, Config.Height, Color.FromArgb(200, 200, 200, 200), (s) => State = SideBarState.RightTab, SideBarState.Minimized); GotInputClick += maximize.HandleInput; var leftTabString = new DrawableString("Muster", new Vector2((float)0.1625 * Width, 5) + offset, Color.White); var rightTabString = new DrawableString("Allgemein", new Vector2(Width / 2f + (float)0.11 * Width, 5) + offset, Color.White); var minimizeString = new DrawableString("Einklappen", new Vector2((float)0.35 * Width, Config.Height - (int)(0.05 * Config.Height)), Color.White); maximizeString = new DrawableString(">", new Vector2((float)0.0125 * Width, Config.Height / 2f), Color.White); int btnSize = (int)(0.15 * Width); var closebtn = new Rectangle2D(new Vector2(0.1875f * Width, 0.093f * Config.Height), btnSize, btnSize, Color.OrangeRed, (s) => RenderFrame.Instance.Exit(), SideBarState.RightTab, null, exitTex); rightTab.Add(closebtn); GotInputClick += closebtn.HandleInput; var pausebtn = new Rectangle2D(new Vector2(0.5625f * Width, 0.093f * Config.Height), btnSize, btnSize, Color.White, (s) => { Config.Paused = !Config.Paused; }, SideBarState.RightTab, null, playTex); rightTab.Add(pausebtn); GotInputClick += pausebtn.HandleInput; var clearbtn = new Rectangle2D(new Vector2(0.375f * Width, 0.093f * Config.Height), btnSize, btnSize, Color.White, (s) => inputHandler.ClearWorld(), SideBarState.RightTab, null, clearTex); rightTab.Add(clearbtn); GotInputClick += clearbtn.HandleInput; rightTab.Add(new Rectangle2D(new Vector2(0.75f * Width, 0.093f * Config.Height), btnSize, btnSize, Color.White, (s) => SamplerStates.Instance.SwitchWrapMode(), SideBarState.RightTab, null, cornerTex)); GotInputClick += rightTab.Last().HandleInput; //Farben rightTab.Add(new Rectangle2D(new Vector2(0.1875f * Width, 0.27f * Config.Height), btnSize, btnSize, Color.Red, (s) => inputHandler.ChangeColor(new Color4(1, 1, 0, 0)), SideBarState.RightTab)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2(0.375f * Width, 0.27f * Config.Height), btnSize, btnSize, Color.Green, (s) => inputHandler.ChangeColor(new Color4(1, 0, 1, 0)), SideBarState.RightTab)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2(0.5625f * Width, 0.27f * Config.Height), btnSize, btnSize, Color.Blue, (s) => inputHandler.ChangeColor(new Color4(1, 0, 0, 1)), SideBarState.RightTab)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2(0.75f * Width, 0.27f * Config.Height), btnSize, btnSize, Color.Black, (s) => inputHandler.ChangeColor(new Color4(1, 0, 0, 0)), SideBarState.RightTab)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2(0.1875f * Width, 0.18f * Config.Height), btnSize, btnSize, Color.White, (s) => MakeScreenshot(), SideBarState.RightTab, null, screenshotTex)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2(0.375f * Width, 0.18f * Config.Height), btnSize, btnSize, Color.White, (s) => LoadFile(), SideBarState.RightTab, null, fileLoadTex)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2(0.5625f * Width, 0.18f * Config.Height), btnSize, btnSize, Color.White, (s) => Config.LineThickness--, SideBarState.RightTab, null, minusTex)); GotInputClick += rightTab.Last().HandleInput; rightTab.Add(new Rectangle2D(new Vector2(0.75f * Width, 0.18f * Config.Height), btnSize, btnSize, Color.White, (s) => Config.LineThickness++, SideBarState.RightTab, null, plusTex)); GotInputClick += rightTab.Last().HandleInput; // Birth setting buttons for (int i = 1; i < 9; i++) { birth.Add(new Rectangle2D(new Vector2((float)0.175 * Width, (int)(-0.011 * Config.Height)) + (24 + i * 3) * offset, (int)(0.25 * Width), (int)(0.046 * Config.Height), (Config.BirthRule & 1 << i) > 0 ? Color.Green : Color.DimGray, OnBirthChanged, SideBarState.RightTab, i)); } // Death setting buttons for (int i = 1; i < 9; i++) { death.Add(new Rectangle2D(new Vector2((float)0.625 * Width, (int)(-0.011 * Config.Height)) + (24 + i * 3) * offset, (int)(0.25 * Width), (int)(0.046 * Config.Height), (Config.DeathRule & 1 << i) > 0 ? Color.Green : Color.DimGray, OnDeathChanged, SideBarState.RightTab, i)); } foreach (var r in birth.Concat(death)) { rightTab.Add(r); GotInputClick += r.HandleInput; } rightTabStrings.Add(new DrawableString("Leben", new Vector2((float)0.235 * Width, 0) + 24 * offset, Color.White)); rightTabStrings.Add(new DrawableString("Tod", new Vector2((float)0.705 * Width, 0) + 24 * offset, Color.White)); rightTabStrings.Add(new DrawableString("Farbe", new Vector2(10, 0.275f * Config.Height + btnSize / 2f - offset.Y), Color.White)); for (int i = 1; i < 9; i++) { rightTabStrings.Add(new DrawableString(i.ToString(), new Vector2((float)0.10 * Width, 0) + (24 + 3 * i) * offset, Color.White)); } rightTabStrings.Add(minimizeString); leftTabStrings.Add(minimizeString); rightTabStrings.Add(rightTabString); leftTabStrings.Add(rightTabString); rightTabStrings.Add(leftTabString); leftTabStrings.Add(leftTabString); sliderbackground = new Rectangle2D(new Vector2(0.1875f * Width, (int)(0.36f * Config.Height)), (int)(0.714f * Width), (int)(0.046 * Config.Height), Color.DarkGray, s => speed = location.X, SideBarState.RightTab); slider = new Rectangle2D(new Vector2(0.1875f * Width, (int)(0.36f * Config.Height)), (int)(0.02 * Width), (int)(0.046 * Config.Height), Color.White); GotInputClick += sliderbackground.HandleInput; rightTabStrings.Add(new DrawableString("Langsam", new Vector2(sliderbackground.Location.X + 10, sliderbackground.Location.Y + sliderbackground.Size.Y / 2 - DrawableString.Measure("a", 1).Y / 2), Color.White, 1)); rightTabStrings.Add(new DrawableString("Schnell", new Vector2(sliderbackground.Location.X + sliderbackground.Size.X - 10 - DrawableString.Measure("Schnell", 1).X, sliderbackground.Location.Y + sliderbackground.Size.Y / 2 - DrawableString.Measure("a", 1).Y / 2), Color.White, 1)); rightTab.Add(sliderbackground); rightTab.Add(slider); pm = new PatternManager(0, (int)(0.074 * Config.Height), Width, Config.Height - 2 * (int)(0.074 * Config.Height), this); //oberen und unteren button abziehen .... speed = 0.1875f * Width * 3f; Config.RulesChanged += Config_RulesChanged; }