public MainWindow() : base(Gtk.WindowType.Toplevel) { Build(); Init(); // Inicialització MiniScreen.ShowAll(); // Gestió d'events eventbox1.ButtonPressEvent += HandleMiniScreenButtonPressEvent; eventbox1.ButtonReleaseEvent += HandleEventbox1ButtonReleaseEvent; eventbox1.MotionNotifyEvent += HandleEventbox1MotionNotifyEvent; MiniScreen.Hidden += HandleMiniScreenHidden; eventbox1.MotionNotifyEvent += HandleEventbox1MotionNotifyEvent; DrawPreview(); // // LliureXMiniScreen.MainClass.win.TypeHint=Gdk.WindowTypeHint.Dock; // Establim la finestra al cantó inferior /* try{ * LliureXMiniScreen.MainClass.win.Move(0, ScreenHeight); * LliureXMiniScreen.MainClass.win.TypeHint=Gdk.WindowTypeHint.Dock; * } catch (Exception ex){ * Console.WriteLine("Init Exception: "+ex); * } */ //Gdk.Global.ActiveWindow.Move(0, ScreenHeight); //Gdk.Global.ActiveWindow.TypeHint=Gdk.WindowTypeHint.Dock; //Gdk.Global.ActiveWindow.TypeHint }
void HandleMiniScreenButtonPressEvent(object o, ButtonPressEventArgs args) { if (args.Event.Button == 3) { MiniScreenSettings(); } else { //Console.WriteLine("Press"); Llista_Punts.Clear(); int px, py; // Posició de la minipantalla int miniscreen_size_x, miniscreen_size_y; // dimensions de la minipantalla double pos_mouse_x, pos_mouse_y; // posició del ratolí en el clic double pos_mouse_x_global, pos_mouse_y_global; // posició del ratolí en el clic referent al global de pa pantalla // Agafem les dimensions de la minipantalla MiniScreen.GetSizeRequest(out miniscreen_size_x, out miniscreen_size_y); // Agafem la posició del ratolí en el moment del clic pos_mouse_x = args.Event.X; pos_mouse_y = args.Event.Y; // Agafem la posició de la finestra //Gdk.Window root=Gdk.Global.ActiveWindow; //root.GetPosition(out px, out py); //LliureXMiniScreen.MainClass.win.GetPosition(out px, out py); LliureXMiniScreen.Core.getCore().win.GetPosition(out px, out py); // Posició global del ratolí en el clic (recalculada) pos_mouse_x_global = pos_mouse_x * ScreenWidth / this.MiniScreenWidth; pos_mouse_y_global = pos_mouse_y * ScreenHeight / this.MiniScreenHeight; // Mostrem la informació Console.WriteLine("Screen From: (" + px + "," + py + ") to (" + (px + miniscreen_size_x) + "," + (py + miniscreen_size_y) + ")"); Console.WriteLine("Pointer at: (" + pos_mouse_x + "," + pos_mouse_y + ")"); Console.WriteLine("Pointer at: (" + pos_mouse_x_global + "," + pos_mouse_y_global + ")"); // Controlem si el clic és dins de la seua finestra de miniscreen if (pos_mouse_x_global > px && pos_mouse_x_global < px + miniscreen_size_x && pos_mouse_y_global > py && pos_mouse_y_global < py + miniscreen_size_y) { Console.WriteLine("ESTA DINS!!!"); Init(); } else { if (args.Event.Button == 1) // Si el botó era l'1... { BtnPressed = true; // Indiquem que el botó està polsat Llista_Punts.Add(new Gdk.Point((int)pos_mouse_x, (int)pos_mouse_y)); } } } }
public static Point[] GetValidAdjacentPoints(Point point, bool diagonalPathing = true, bool honorBlocking = true) { List <Point> points = new List <Point>(); var north = DirectionToPoint(Direction.North) + point; var east = DirectionToPoint(Direction.East) + point; var south = DirectionToPoint(Direction.South) + point; var west = DirectionToPoint(Direction.West) + point; if (MiniScreen.IsValidScreenPosition(north, honorBlocking)) { points.Add(north); } if (MiniScreen.IsValidScreenPosition(east, honorBlocking)) { points.Add(east); } if (MiniScreen.IsValidScreenPosition(south, honorBlocking)) { points.Add(south); } if (MiniScreen.IsValidScreenPosition(west, honorBlocking)) { points.Add(west); } if (diagonalPathing) { var northeast = DirectionToPoint(Direction.NorthEast) + point; var southeast = DirectionToPoint(Direction.SouthEast) + point; var southwest = DirectionToPoint(Direction.SouthWest) + point; var northwest = DirectionToPoint(Direction.NorthWest) + point; if (MiniScreen.IsValidScreenPosition(northeast, honorBlocking)) { points.Add(northeast); } if (MiniScreen.IsValidScreenPosition(southeast, honorBlocking)) { points.Add(southeast); } if (MiniScreen.IsValidScreenPosition(southwest, honorBlocking)) { points.Add(southwest); } if (MiniScreen.IsValidScreenPosition(northwest, honorBlocking)) { points.Add(northwest); } } return(points.ToArray()); }
public static bool IsNextToInvalidPoint(Point point, bool diagonalPathing = true, bool honorBlocking = true) { List <Point> points = new List <Point>(); var north = DirectionToPoint(Direction.North) + point; var east = DirectionToPoint(Direction.East) + point; var south = DirectionToPoint(Direction.South) + point; var west = DirectionToPoint(Direction.West) + point; if (!MiniScreen.IsValidScreenPosition(north, honorBlocking)) { return(true); } if (!MiniScreen.IsValidScreenPosition(east, honorBlocking)) { return(true); } if (!MiniScreen.IsValidScreenPosition(south, honorBlocking)) { return(true); } if (!MiniScreen.IsValidScreenPosition(west, honorBlocking)) { return(true); } if (diagonalPathing) { var northeast = DirectionToPoint(Direction.NorthEast) + point; var southeast = DirectionToPoint(Direction.SouthEast) + point; var southwest = DirectionToPoint(Direction.SouthWest) + point; var northwest = DirectionToPoint(Direction.NorthWest) + point; if (!MiniScreen.IsValidScreenPosition(northeast, honorBlocking)) { return(true); } if (!MiniScreen.IsValidScreenPosition(southeast, honorBlocking)) { return(true); } if (!MiniScreen.IsValidScreenPosition(southwest, honorBlocking)) { return(true); } if (!MiniScreen.IsValidScreenPosition(northwest, honorBlocking)) { return(true); } } return(false); }
private bool DrawPreview() { Console.WriteLine(OldRefreshRate + "--------" + RefreshRate); if (OldRefreshRate == RefreshRate) { if (!moving_mouse) { Console.WriteLine("Drawing with ref rate..." + RefreshRate); int width = 0; int height = 0; if (!BtnPressed) { try{ root = Gdk.Global.DefaultRootWindow; // get its width and height root.GetSize(out width, out height); // create a new pixbuf from the root window //try{ //LliureXMiniScreen.Core.getCore().win.Hide(); screenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0, 0, 0, 0, width, height); int miniscreen_size_x, miniscreen_size_y; // dimensions de la minipantalla int px, py, win_px, win_py; if (LliureXMiniScreen.Core.getCore().win != null) { LliureXMiniScreen.Core.getCore().win.GetPosition(out win_px, out win_py); MiniScreen.GetSizeRequest(out miniscreen_size_x, out miniscreen_size_y); px = MiniScreenPosition * (width - miniscreen_size_x); py = height - miniscreen_size_y; Console.WriteLine("Dibuixe en: (" + px + "," + py + ") una finestra de " + miniscreen_size_x + "x" + miniscreen_size_y); if (px != win_px || py != win_py) { LliureXMiniScreen.Core.getCore().win.Move(px, py); } // Amaguem la minipantallla // PATCH //Gdk.Pixbuf HiddenMiniScreen=new Pixbuf("/usr/share/icons/LliureX-Accessibility/llx-miniscreen-hide.png", miniscreen_size_x, miniscreen_size_y); HiddenMiniScreen = new Pixbuf(InitScreenshot, px, py, MiniScreenWidth, MiniScreenHeight); // END PATCH Console.WriteLine("->" + HiddenMiniScreen.Width + " " + HiddenMiniScreen.Height); HiddenMiniScreen = HiddenMiniScreen.ScaleSimple(miniscreen_size_x, miniscreen_size_y, InterpType.Bilinear); HiddenMiniScreen.CopyArea(0, 0, miniscreen_size_x, miniscreen_size_y, screenshot, px, py); } //LliureXMiniScreen.Core.getCore().win.Activate(); // LliureXMiniScreen.Core.getCore().win.Show(); /*} catch (Exception exc){ * Console.WriteLine("Excepció...: "+exc); * }*/ //Gdk.Pixbuf screenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0,0, 0,0, width, height); // // Cal inserir una imatge al screenshot per poder ocultar la minifinestra a la captura!!! // screenshot = screenshot.ScaleSimple(this.MiniScreenWidth, this.MiniScreenHeight, InterpType.Bilinear); }catch (Exception exc) { Console.WriteLine("Excepció...: " + exc); } } // Creem la imatge per emmagatzemar el pixbuf Gtk.Image MyImage = new Gtk.Image(); MyImage.Pixbuf = screenshot; // Agafem les dimensions de la finestra Gdk.GC gc = ((Gtk.DrawingArea)MiniScreen).Style.TextGC(Gtk.StateType.Normal); MiniScreen.GdkWindow.DrawPixbuf(gc, MyImage.Pixbuf, 0, 0, 0, 0, this.MiniScreenWidth, this.MiniScreenHeight, Gdk.RgbDither.Max, 0, 0); Cairo.Context context = Gdk.CairoHelper.Create(MiniScreen.GdkWindow); if (BtnPressed) { double r = double.Parse((PathColor.Red).ToString()) / 65535; double g = double.Parse((PathColor.Green).ToString()) / 65535; double b = double.Parse((PathColor.Blue).ToString()) / 65535; context.Color = new Cairo.Color(r, g, b); try{ if (Llista_Punts.Count > 1) { context.LineWidth = 3; context.MoveTo(Llista_Punts[0].X, Llista_Punts[0].Y); foreach (Gdk.Point p in Llista_Punts) { context.LineTo(p.X, p.Y); context.MoveTo(p.X, p.Y); } } context.Stroke(); context.FillPreserve(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); } } ((IDisposable)context.Target).Dispose(); ((IDisposable)context).Dispose(); return(true); } } else { //if(RefreshRate!=OldRefreshRate){ Console.WriteLine("Change refresg rate!!!"); OldRefreshRate = RefreshRate; return(false); //} } return(false); }
void HandleMenuitem1ButtonPressEvent(object obj, ButtonPressEventArgs args) { Console.WriteLine("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); try{ // Amaguem la finestra per tornar a fer la captura inicial //MiniScreen.Hide(); takeSnapshot(); if (((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text == "300 x 240 (5:4)") { Console.WriteLine("300 x 240 (5:4)"); MiniScreenWidth = 300; MiniScreenHeight = 240; // MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight); } else if (((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text == "400 x 320 (5:4)") { Console.WriteLine("400 x 320 (5:4)"); MiniScreenWidth = 400; MiniScreenHeight = 320; // MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight); } else if (((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text == "400 x 235 (16:9)") { Console.WriteLine("400 x 235 (16:9)"); MiniScreenWidth = 400; MiniScreenHeight = 235; // MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight); } else if (((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text == "300 x 176 (16:9)") { Console.WriteLine("300 x 176 (16:9)"); MiniScreenWidth = 300; MiniScreenHeight = 176; // MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight); } else if (((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text == "300 x 225 (4:3)") { Console.WriteLine("300 x 225 (4:3)"); MiniScreenWidth = 300; MiniScreenHeight = 225; // MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight); } else if (((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text == "200 x 150 (4:3)") { Console.WriteLine("200 x 150 (4:3)"); MiniScreenWidth = 200; MiniScreenHeight = 150; // MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight); } else if (((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text == "300 x 166 (9:5)") { Console.WriteLine("300 x 166 (9:5)"); MiniScreenWidth = 300; MiniScreenHeight = 166; // MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight); } else if (((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text == "200 x 111 (9:5)") { Console.WriteLine("200 x 111 (9:5)"); MiniScreenWidth = 200; MiniScreenHeight = 111; // MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight); } MiniScreen.Show(); MiniScreen.SetSizeRequest(MiniScreenWidth, MiniScreenHeight); //LliureXMiniScreen.Core.getCore().win.Move(MiniScreenPosition*(ScreenWidth-MiniScreenWidth), ScreenHeight); //Console.WriteLine("<><><><><><>"+ScreenHeight); // Console.WriteLine("<><><><>-"+MiniScreenHeight); // Console.WriteLine("________-_"+(ScreenHeight-MiniScreenHeight)); //LliureXMiniScreen.Core.getCore().win.Move(0, 784); Console.WriteLine("Nou tam: " + MiniScreenWidth + "," + MiniScreenHeight); MoveMiniScreen(MiniScreenPosition); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); } }
AccelGroup grup = new AccelGroup(); // Necessari per als items de menú amb imatges public void Init() { /* Creem el fitxer amb la llista dels diospositius d'entrada */ ExecuteCommandSync("/bin/bash", "getInputMouse"); /* Inicialitza variables i objectes */ RefreshRate = 500; OldRefreshRate = 500; // Timer que es dispara cada X ms per refrescar la finestra GLib.Timeout.Add(RefreshRate, DrawPreview); // Amb més sembla que se satura si punxem dins la finestra... // Propietats de la pantalla MiniScreenWidth = 400; MiniScreenHeight = 320; MiniScreenPosition = 0; MiniScreen.SetSizeRequest(MiniScreenWidth, MiniScreenHeight); BtnPressed = false; // Botó premut // get the root window root = Gdk.Global.DefaultRootWindow; // Dimensions de la pantalla root.GetSize(out ScreenWidth, out ScreenHeight); Console.WriteLine("Pantalla: " + ScreenWidth + " " + ScreenHeight); PathColor = new Color(255, 0, 0); Llista_Punts = new List <Point>(); moving_mouse = false; // Llegim les propietats del ratoli System.IO.StreamReader sr = new System.IO.StreamReader("/tmp/miniscreen_deviceslist"); Input_Devices_List = new List <string[]>(); string texto; string [] split_texto; string dev; string property; while (!sr.EndOfStream) { texto = sr.ReadLine(); split_texto = texto.Split(new char[] { ' ' }); //String[] device=new String(); //dev=split_texto[0]; //property=split_texto[1]; Input_Devices_List.Add(split_texto); } foreach (String [] device in Input_Devices_List) { Console.WriteLine("DEV: " + device[0]); Console.WriteLine("PROP: " + device[1]); } sr.Close(); // cap posar dev i property com a parametres al xinit, i xinit com a dependencia d'este paquet // i invocar el script que crea aço abans de llegir-lo // Per si hi ha mes dispositius, ha de ser una llista!! // PATCH // Fem una captura de la pantalla general, per agafar les imatges a substiutir per la minipantalla InitScreenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0, 0, 0, 0, ScreenWidth, ScreenHeight); int width, height, px, py; }
void HandleEventbox1ButtonReleaseEvent(object o, ButtonReleaseEventArgs args) { moving_mouse = true; // Indiquem que s'està movent el ratolí (per tant no redibuixarem) //Console.WriteLine("RELEASEEE!!!"); int px, py; // Posició de la minipantalla int miniscreen_size_x, miniscreen_size_y; // dimensions de la minipantalla double pos_mouse_x, pos_mouse_y; // posició del ratolí en el clic double pos_mouse_x_global, pos_mouse_y_global; // posició del ratolí en el clic referent al global de pa pantalla /*line_x0=0; // Amaguem la línia * line_y0=0; * line_xf=0; * line_yf=0;*/ // Agafem les dimensions de la minipantalla MiniScreen.GetSizeRequest(out miniscreen_size_x, out miniscreen_size_y); // Agafem la posició del ratolí en el moment del release pos_mouse_x = args.Event.X; pos_mouse_y = args.Event.Y; // Afegim a la llista la última posició Llista_Punts.Add(new Gdk.Point((int)pos_mouse_x, (int)pos_mouse_y)); // Agafem la posició de la finestra //Gdk.Window root=Gdk.Global.ActiveWindow; //root.GetPosition(out px, out py); //LliureXMiniScreen.MainClass.win.GetPosition(out px, out py); LliureXMiniScreen.Core.getCore().win.GetPosition(out px, out py); // Posició global del ratolí en el clic (recalculada) pos_mouse_x_global = pos_mouse_x * ScreenWidth / this.MiniScreenWidth; pos_mouse_y_global = pos_mouse_y * ScreenHeight / this.MiniScreenHeight; // Mostrem la informació Console.WriteLine("RELEASE: Screen From: (" + px + "," + py + ") to (" + (px + miniscreen_size_x) + "," + (py + miniscreen_size_y) + ")"); Console.WriteLine("RELEASE: Pointer at: (" + pos_mouse_x + "," + pos_mouse_y + ")"); Console.WriteLine("RELEASE: Pointer at: (" + pos_mouse_x_global + "," + pos_mouse_y_global + ")"); if (args.Event.Button == 1) // Si el botó era l'1... // Movem el ratolí en funció de la llista... { Console.WriteLine("N PUNTS: " + Llista_Punts.Count); if (Llista_Punts.Count > 3) { //Console.WriteLine("N PUNT 1: "+Llista_Punts[0].X+","+Llista_Punts[0].Y); //Console.WriteLine("N PUNT 2: "+Llista_Punts[1].X+","+Llista_Punts[1].Y); //Console.WriteLine("N PUNT 3: "+Llista_Punts[2].X+","+Llista_Punts[2].Y); Process p = new Process(); p.StartInfo.FileName = "xdotool"; // Alliberem el ratolí // p.StartInfo.Arguments = " mouseup 1 "; // p.Start(); // p.WaitForExit(); // DESACTIVEM ELS RATOLINS // PATCH 2012 foreach (String [] device in Input_Devices_List) { ExecuteCommandSync("xinput", "set-prop " + device[0] + " " + device[1] + " 0"); } Console.WriteLine("Posicionant en: " + Llista_Punts[0].X * ScreenWidth / this.MiniScreenWidth + " " + Llista_Punts[0].Y * ScreenHeight / this.MiniScreenHeight); p.StartInfo.Arguments = " mousemove " + Llista_Punts[0].X * ScreenWidth / this.MiniScreenWidth + " " + Llista_Punts[0].Y * ScreenHeight / this.MiniScreenHeight; p.Start(); p.WaitForExit(); // Click inicial: p.StartInfo.Arguments = " mousedown 1 "; p.Start(); p.WaitForExit(); foreach (Gdk.Point pt in Llista_Punts) { Console.WriteLine("Movint to: " + pt.X * ScreenWidth / this.MiniScreenWidth + " " + pt.Y * ScreenHeight / this.MiniScreenHeight); p.StartInfo.Arguments = " mousemove " + pt.X * ScreenWidth / this.MiniScreenWidth + " " + pt.Y * ScreenHeight / this.MiniScreenHeight; p.Start(); p.WaitForExit(); } p.StartInfo.Arguments = " mouseup 1 "; p.Start(); p.WaitForExit(); // Reposicionament del ratolí en la minipantalla double finalx, finaly; finalx = px + pos_mouse_x; finaly = py + pos_mouse_y; Console.WriteLine("px: " + px + " pos_mouse_x: " + pos_mouse_x); Console.WriteLine("px: " + py + " pos_mouse_x: " + pos_mouse_y); p.StartInfo.Arguments = "mousemove " + finalx + " " + finaly; p.Start(); p.WaitForExit(); p.Close(); Llista_Punts.Clear(); // REACTIVEM EL RATOLI // PATCH 2012 foreach (String [] device in Input_Devices_List) { ExecuteCommandSync("xinput", "set-prop " + device[0] + " " + device[1] + " 1"); } } else { // Si només hi ha un clic... if (Llista_Punts.Count > 0) { Console.WriteLine("Click*****************************"); Process p = new Process(); p.StartInfo.FileName = "xdotool"; // Alliberem el ratolí //p.StartInfo.Arguments = " mouseup 1 "; //p.Start(); //p.WaitForExit(); Console.WriteLine("Movint INIT to: " + Llista_Punts[0].X * ScreenWidth / this.MiniScreenWidth + " " + Llista_Punts[0].Y * ScreenHeight / this.MiniScreenHeight); p.StartInfo.Arguments = " mousemove " + Llista_Punts[0].X * ScreenWidth / this.MiniScreenWidth + " " + Llista_Punts[0].Y * ScreenHeight / this.MiniScreenHeight; p.Start(); p.WaitForExit(); // Click: p.StartInfo.Arguments = " click 1 "; p.Start(); p.WaitForExit(); // Reposicionament del ratolí en la minipantalla double finalx, finaly; finalx = px + pos_mouse_x; finaly = py + pos_mouse_y; p.StartInfo.Arguments = "mousemove " + finalx + " " + finaly; p.Start(); p.WaitForExit(); p.Close(); Llista_Punts.Clear(); } } // Restaurem el botó } BtnPressed = false; // Alliberem el botó es faça on es faça moving_mouse = false; // Hem acabat de mouse el ratoló, podem redibuixar }
public MainScreen(ContentManager contentManager, RenderTarget2D final, GraphicsDevice graphicsDevice, PresentationParameters pp, FileStream fs, Game game) { beginSong = false; this.game = game; this.contentManager = contentManager; this.fs = fs; cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; this.pp = pp; paletteShader = contentManager.Load <Effect>("Battle/BattleBG"); introText = new Hud(new string[] { "Welcome to Microgames!\nClick the mouse or press the spacebar to continue.", "Because this is your first time, continue to see\nthe controls." }, cm, 30, 2, posY: -1, canClose: true); if (fs.ReadByte().Equals('P')) { curPhase = Phase.MainMenu; fs.Close(); practiceUnlocked = GetSaveElem("Practice") == 1; SetColor(GetSaveElem("Palette")); //Restore palette from save introText.finishText(); } else { paletteShader.Parameters["col_light"].SetValue(new Color(250, 231, 190).ToVector4()); paletteShader.Parameters["col_extra"].SetValue(new Color(234, 80, 115).ToVector4()); paletteShader.Parameters["col_med"].SetValue(new Color(113, 68, 123).ToVector4()); paletteShader.Parameters["col_dark"].SetValue(new Color(176, 108, 57).ToVector4()); practiceUnlocked = false; curPhase = Phase.Introduction; } battleSong = contentManager.Load <Song>("Music/fight"); previewSong = contentManager.Load <Song>("Music/trouble_ahead"); transitionSong = contentManager.Load <Song>("Music/transition"); fromGame = false; exitConfirm = false; //curPhase = Phase.BetweenGames; currentFlashes = 7; maxFlashes = 7; timer = 0.2; countdownTimer = 0.0; timerMult = 1.0; betweenGamesOffset = 0.0; countdownColor = Color.White; controlsShown = false; controlRevisit = false; controlHint = false; this.graphicsDevice = graphicsDevice; practiceMode = false; lastFrame = new RenderTarget2D(graphicsDevice, Game1.width + 2, Game1.height, false, SurfaceFormat.Color, DepthFormat.None, pp.MultiSampleCount, RenderTargetUsage.DiscardContents); bufferTarget = new RenderTarget2D(graphicsDevice, Game1.width, Game1.height, false, SurfaceFormat.Color, DepthFormat.None, pp.MultiSampleCount, RenderTargetUsage.DiscardContents); mainTarget = final; lio = contentManager.Load <Texture2D>("Menus/TransitionTest"); stairClimber = contentManager.Load <Texture2D>("Map/TransitionAnim"); pauseScreen = contentManager.Load <Texture2D>("Menus/PauseScreen"); areYouSure = contentManager.Load <Texture2D>("Menus/AreYouSure"); continueIcon = contentManager.Load <Texture2D>("Menus/TransitionButton"); countdown = contentManager.Load <Texture2D>("Menus/Countdown"); if (Environment.OSVersion.Platform.ToString().Contains("Win")) { controls = contentManager.Load <Texture2D>("Menus/Controls"); } else { controls = contentManager.Load <Texture2D>("Menus/Controls_Unix"); } transition = contentManager.Load <Effect>("Map/transitions"); transition.Parameters["time"].SetValue((float)timer); continues = 3; score = 0; prevStateKb = Keyboard.GetState(); prevStateM = Mouse.GetState(); lastGame = -1; timesRepeated = 0; practiceIntro = false; microgame = new TitleScreen(cm, paletteShader, practiceUnlocked); random = new Random(); exitButton = new Button(contentManager, 4, 1, text: "OK"); pauseButton = new Button(contentManager, 4, 1, text: "Pause"); resumeButton = new Button(contentManager, 4, 1, text: "Resume"); noButton = new Button(contentManager, Game1.width / 2 - 60, Game1.height / 2 + 20, text: "No"); yesButton = new Button(contentManager, Game1.width / 2 + 20, Game1.height / 2 + 20, text: "Yes"); backButton = new Button(contentManager, 4, 1, text: "Back"); pauseMenu = new Menu(contentManager, new string[] { "Palette", "Return to Title", "P1", null, "P2", null, "P3", null, "P4", null, "P5", null }, 2, 69, offsetX: Game1.width / 4, offsetY: Game1.height / 2, defaultSpacingX: 75); }
void Screen.Update(GameTime dt) { if (!prevStateKb.GetPressedKeys().Equals(Keyboard.GetState().GetPressedKeys())) { game.IsMouseVisible = false; } MouseState state = Mouse.GetState(); if (prevStateM.X != state.X || prevStateM.Y != state.Y) { game.IsMouseVisible = true; } int mouseX = (int)(state.X * Game1.resMultiplier); int mouseY = (int)(state.Y * Game1.resMultiplier); pauseButton.Update(mouseX, mouseY); if ((curPhase == Phase.Transition || curPhase == Phase.BetweenGames) && ((Keyboard.GetState().IsKeyUp(Keys.Escape) && prevStateKb.IsKeyDown(Keys.Escape)) || (curPhase != Phase.Paused && pauseButton.IsPressed(prevStateM)))) { prevStateM = state; prevPhase = curPhase; MediaPlayer.Pause(); curPhase = Phase.Paused; pauseMenu.SetSelectionY(0); //timer = 0.2; } else { switch (curPhase) { case Phase.Introduction: exitButton.Update(mouseX, mouseY); introText.Update(dt, prevStateKb, prevStateM); if (controlHint) { if ((prevStateKb.IsKeyUp(Keys.Escape) && Keyboard.GetState().IsKeyDown(Keys.Escape)) || exitButton.IsPressed(prevStateM)) { controlHint = false; introText.finishMessage(); introText.finishText(); if (controlRevisit) { curPhase = Phase.MainMenu; } else { curPhase = Phase.FinalMessage; introText = new Hud(new string[] { "You can revisit that screen in Settings.\nHave fun!" }, cm, 30, 2, posY: -1, canClose: true); } } } if (introText.messageComplete()) { if (controlHint) { controlHint = false; //exitButton.Update(mouseX, mouseY); if ((prevStateKb.IsKeyUp(Keys.Escape) && Keyboard.GetState().IsKeyDown(Keys.Escape)) || exitButton.IsPressed(prevStateM)) { if (controlRevisit) { curPhase = Phase.MainMenu; } else { curPhase = Phase.FinalMessage; introText = new Hud(new string[] { "You can revisit that screen in Settings.\nHave fun!" }, cm, 30, 2, posY: -1, canClose: true); } } } else if (!controlsShown) { controlsShown = true; break; } else { //exitButton.Update(mouseX, mouseY); //Hit the wrong buttons to continue if ((prevStateKb.IsKeyUp(Keys.Space) && Keyboard.GetState().IsKeyDown(Keys.Space)) || !exitButton.IsPressed(prevStateM) && (prevStateM.LeftButton == ButtonState.Pressed && Mouse.GetState().LeftButton == ButtonState.Released)) { controlHint = true; introText = new Hud(new string[] { "You can click the button in the upper left corner\nor hit the Escape key to exit this screen." }, cm, 30, 2, posY: -1, canClose: true); } else if ((prevStateKb.IsKeyUp(Keys.Escape) && Keyboard.GetState().IsKeyDown(Keys.Escape)) || exitButton.IsPressed(prevStateM)) { if (controlRevisit) { curPhase = Phase.MainMenu; } else { curPhase = Phase.FinalMessage; introText = new Hud(new string[] { "You can revisit that screen in Settings.\nHave fun!" }, cm, 30, 2, posY: -1, canClose: true); } } } } else { } break; case Phase.FinalMessage: if (controlRevisit) { curPhase = Phase.MainMenu; break; } introText.Update(dt, prevStateKb, prevStateM); if (introText.messageComplete()) { //TODO: Make an exit button if (prevStateKb.IsKeyUp(Keys.Space) && Keyboard.GetState().IsKeyDown(Keys.Space) || (prevStateM.LeftButton == ButtonState.Pressed && Mouse.GetState().LeftButton == ButtonState.Released)) { byte[] bytes = Encoding.UTF8.GetBytes("Palette: 0\nPractice: 0\nBattle: 0W 0L\nApples: 0W 0L\n"); fs.Write(bytes, 0, bytes.Length); fs.Close(); curPhase = Phase.MainMenu; } } break; case Phase.PracticeUnlock: introText.Update(dt, prevStateKb, prevStateM); if (introText.messageComplete()) { //TODO: Make an exit button if (prevStateKb.IsKeyUp(Keys.Space) && Keyboard.GetState().IsKeyDown(Keys.Space) || (prevStateM.LeftButton == ButtonState.Pressed && Mouse.GetState().LeftButton == ButtonState.Released)) { UpdateSaveElem("Practice", 1); curPhase = Phase.MainMenu; } } break; case Phase.MainMenu: switch (microgame.Update(dt, prevStateKb, prevStateM)) { case 1: microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; practiceMode = false; microgame = ChooseGame(); //microgame = new TitleScreen(cm); curPhase = Phase.Transition; break; case 2: microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; practiceMode = true; microgame = GetMostLost(); //microgame = new TitleScreen(cm); curPhase = Phase.Transition; break; case 3: game.Exit(); break; case 4: controlRevisit = true; curPhase = Phase.Introduction; break; } break; case Phase.Transition: if (beginSong) { if (microgame is BetweenGames) { MediaPlayer.Play(transitionSong); } else { MediaPlayer.Play(previewSong); } beginSong = false; } if ((currentFlashes & 1) == 0) { timer += dt.ElapsedGameTime.TotalSeconds; } else { timer -= dt.ElapsedGameTime.TotalSeconds; } transition.Parameters["time"].SetValue((float)timer * 4); //Lets the transition animation start while borders are still animating if (microgame is BetweenGames && currentFlashes > maxFlashes) { microgame.Update(dt, prevStateKb, prevStateM); } break; case Phase.InGame: if (beginSong) { //if (microgame is Battle) MediaPlayer.Stop(); MediaPlayer.Play(battleSong); //else //MediaPlayer.Play(previewSong); beginSong = false; } byte result = microgame.Update(dt, prevStateKb, prevStateM); if (result != 254) { countdownTimer += dt.ElapsedGameTime.TotalSeconds * timerMult; } //Won game if (result == 255) { UpdateSaveGame(microgame.ToString(), true); score++; if (score == 10) { timerMult = 1.25; } else if (score == 20) { timerMult = 1.5; } countdownTimer = 0.0; microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; if (continues <= 2) { if (score % 10 == 0) { microgame = new BetweenGames(cm, score, betweenGamesOffset, pauseButton, continues, false, true); continues++; } else { microgame = new BetweenGames(cm, score, betweenGamesOffset, pauseButton, continues, false, false); } } else { microgame = new BetweenGames(cm, score, betweenGamesOffset, pauseButton, continues, false); } curPhase = Phase.Transition; beginSong = true; fromGame = true; } //Lost game else if (countdownTimer >= 11 || result == 2) { UpdateSaveGame(microgame.ToString(), false); countdownTimer = 0.0; microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; continues--; microgame = new BetweenGames(cm, score, betweenGamesOffset, pauseButton, continues, true); curPhase = Phase.Transition; beginSong = true; fromGame = true; //BetweenGames phase will handle switching to TitleScreen on 0 continues } break; case Phase.BetweenGames: if (beginSong) { beginSong = false; MediaPlayer.Stop(); MediaPlayer.Play(previewSong); //MediaPlayer.IsRepeating = true; } if (microgame.Update(dt, prevStateKb, prevStateM) == 255) { microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; if (continues > 0) { if (microgame is BetweenGames) { betweenGamesOffset = ((BetweenGames)microgame).GetAnimOffset(); microgame = ChooseGame(); } else { betweenGamesOffset = 0.0; //beginSong = true; goto case Phase.InGame; } } else { //Out of continues score = 0; timerMult = 1.0; timer = 0.2; betweenGamesOffset = 0.0; lio = contentManager.Load <Texture2D>("Menus/TransitionQuit"); MediaPlayer.Stop(); continues = 3; //First time getting a game over if (!practiceUnlocked) { practiceIntro = true; practiceUnlocked = true; introText = new Hud(new string[] { "You've unlocked practice mode!\nYou can play the games you've lost more frequently.", "Check it out in the menu!" }, cm, 30, 2, posY: -1, canClose: true); } microgame = new TitleScreen(cm, paletteShader, practiceUnlocked); } curPhase = Phase.Transition; fromGame = false; beginSong = false; } break; case Phase.Paused: resumeButton.Update(mouseX, mouseY); if (!exitConfirm && (Keyboard.GetState().IsKeyUp(Keys.Escape) && prevStateKb.IsKeyDown(Keys.Escape) || resumeButton.IsPressed(prevStateM))) { prevStateM = state; curPhase = prevPhase; MediaPlayer.Resume(); } else { pauseMenu.Update(dt, prevStateKb, prevStateM, mouseX, mouseY); if (!exitConfirm) { switch (pauseMenu.GetSelectionY(prevStateKb, prevStateM, mouseX, mouseY)) { case 0: int indX = pauseMenu.GetSelectionX(prevStateKb, prevStateM, mouseX, mouseY); if (indX > 0) { Console.WriteLine("tryna set color"); SetColor(indX - 1); } break; case 1: if (Mouse.GetState().LeftButton == ButtonState.Released && prevStateM.LeftButton == ButtonState.Pressed || Keyboard.GetState().IsKeyUp(Keys.Space) && prevStateKb.IsKeyDown(Keys.Space)) { exitConfirm = true; } break; default: break; } } else { //Check for OK, No yesButton.Update(mouseX, mouseY); noButton.Update(mouseX, mouseY); backButton.Update(mouseX, mouseY); if (yesButton.IsPressed(prevStateM) || (prevStateKb.IsKeyDown(Keys.Enter)) && Keyboard.GetState().IsKeyUp(Keys.Enter)) { microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; lio = contentManager.Load <Texture2D>("Menus/TransitionQuit"); if (score < 10) { timer = 1.8; } else { timer = 1.4; } betweenGamesOffset = 0.0; MediaPlayer.Stop(); microgame = new TitleScreen(cm, paletteShader, practiceUnlocked); //microgame = new Battle(cm, mainTarget, graphicsDevice, pp); curPhase = Phase.Transition; beginSong = false; fromGame = true; } else if (noButton.IsPressed(prevStateM) || backButton.IsPressed(prevStateM) || ((prevStateKb.IsKeyDown(Keys.Escape)) && Keyboard.GetState().IsKeyUp(Keys.Escape))) { exitConfirm = false; } } //pauseMenu.GetSelection(prevStateKb, prevStateM, mouseX, mouseY); } break; } } //microgame.Update(dt, prevStateKb, prevStateM); prevStateKb = Keyboard.GetState(); prevStateM = Mouse.GetState(); }