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));
                    }
                }
            }
        }
Exemple #3
0
        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());
        }
Exemple #4
0
        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
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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();
        }