Ejemplo n.º 1
0
 private void OpenVideoPlayer()
 {
     if (Config.PhoneApp && api != null)
     {
         if (api.GetAppRunning() && api.GetRunningApp() != Helper.ModRegistry.ModID)
         {
             Monitor.Log($"can't start, app already running", LogLevel.Debug);
             return;
         }
         api.SetAppRunning(true);
         api.SetRunningApp(Helper.ModRegistry.ModID);
         Helper.Events.Display.Rendered += Display_Rendered;
         PlayTrack();
     }
 }
Ejemplo n.º 2
0
        private void Display_RenderingActiveMenu(object sender, StardewModdingAPI.Events.RenderingActiveMenuEventArgs e)
        {
            if (!api.GetAppRunning() || !api.GetPhoneOpened() || !(Game1.activeClickableMenu is SocialNetworkMenu))
            {
                api.SetAppRunning(false);
                api.SetPhoneOpened(false);
                Helper.Events.Display.RenderingActiveMenu -= Display_RenderingActiveMenu;
                Helper.Events.Input.ButtonPressed         -= Input_ButtonPressed;
                return;
            }
            e.SpriteBatch.Draw(backgroundTexture, api.GetScreenPosition(), Color.White);

            if (topPost > 0)
            {
                //e.SpriteBatch.Draw(upArrowTexture, upArrowPosition, Color.White);
            }
            if (postList.Count - 1 > topPost)
            {
                //e.SpriteBatch.Draw(downArrowTexture, downArrowPosition, Color.White);
            }

            postsPerPage = (int)(api.GetScreenSize().Y - Config.PostMarginY) / (Config.PostHeight + Config.PostMarginY);

            for (int i = 0; i < postList.Count; i++)
            {
                if (i < topPost || i - topPost >= postsPerPage)
                {
                    continue;
                }

                Vector2 postPos = GetPostPos(i);
                e.SpriteBatch.Draw(postBackgroundTexture, postPos, Color.White);
                e.SpriteBatch.Draw(postList[i].portrait, postPos + new Vector2(8, 0), postList[i].sourceRect, Color.White, 0, Vector2.Zero, 2, SpriteEffects.None, 0.86f);
                string[] lines = GetTextLines(postList[i].text);
                for (int j = 0; j < lines.Length; j++)
                {
                    e.SpriteBatch.DrawString(Game1.tinyFont, lines[j], postPos + new Vector2(48, (j + 1) * 20), Color.Black, 0, Vector2.Zero, 0.5f, SpriteEffects.None, 0.86f);
                }
            }
        }
Ejemplo n.º 3
0
        private void Display_RenderedWorld(object sender, RenderedWorldEventArgs e)
        {
            if (api.IsCallingNPC())
            {
                return;
            }

            float itemHeight = Game1.dialogueFont.LineSpacing * (Config.LineOneScale + Config.LineTwoScale);

            screenPos  = api.GetScreenPosition();
            screenSize = api.GetScreenSize();
            if (!api.GetPhoneOpened() || !api.GetAppRunning() || api.GetRunningApp() != Helper.ModRegistry.ModID)
            {
                Monitor.Log($"Closing app: phone opened {api.GetPhoneOpened()} app running {api.GetAppRunning()} running app {api.GetRunningApp()}");
                Helper.Events.Display.RenderedWorld -= Display_RenderedWorld;

                if (api.GetRunningApp() == Helper.ModRegistry.ModID || !api.GetAppRunning())
                {
                    api.SetAppRunning(false);
                    api.SetRunningApp(null);
                }
                return;
            }

            if (!clicking)
            {
                dragging = false;
            }

            Point mousePos = Game1.getMousePosition();

            if (clicking)
            {
                if (mousePos.Y != lastMousePosition.Y && (dragging || api.GetScreenRectangle().Contains(mousePos)))
                {
                    dragging = true;
                    offsetY += mousePos.Y - lastMousePosition.Y;
                    //Monitor.Log($"offsetY {offsetY} max {screenSize.Y - Config.MarginY + (Config.MarginY + Game1.dialogueFont.LineSpacing * 0.9f) * audio.Length}");
                    offsetY           = Math.Min(0, Math.Max(offsetY, (int)(screenSize.Y - (32 + Config.MarginY + (Config.MarginY + itemHeight) * audio.Length))));
                    lastMousePosition = mousePos;
                }
            }

            if (clicking && !Helper.Input.IsSuppressed(SButton.MouseLeft))
            {
                Monitor.Log($"unclicking; dragging = {dragging}");
                if (dragging)
                {
                    dragging = false;
                }
                else if (api.GetScreenRectangle().Contains(mousePos) && !new Rectangle((int)screenPos.X, (int)(screenPos.Y + screenSize.Y - 32), (int)screenSize.X, 32).Contains(mousePos))
                {
                    ClickTrack(mousePos);
                }
                clicking = false;
            }


            e.SpriteBatch.Draw(backgroundTexture, new Rectangle((int)screenPos.X, (int)screenPos.Y, (int)screenSize.X, (int)screenSize.Y), Color.White);
            for (int i = 0; i < audio.Length; i++)
            {
                string a       = Path.GetFileName(audio[i]);
                string lineOne = Config.ListLineOne;
                string lineTwo = Config.ListLineTwo;
                MakeListString(a, ref lineOne, Config.LineOneScale);
                MakeListString(a, ref lineTwo, Config.LineTwoScale);
                float posY = screenPos.Y + Config.MarginY * (i + 1) + i * itemHeight + offsetY;
                if (i == trackPlaying && posY > screenPos.Y - itemHeight && posY < screenPos.Y + screenSize.Y)
                {
                    float backPosY  = posY;
                    int   cutTop    = 0;
                    int   cutBottom = 0;

                    if (posY < screenPos.Y)
                    {
                        cutTop   = (int)(screenPos.Y - posY);
                        backPosY = screenPos.Y;
                    }
                    if (posY > screenPos.Y + screenSize.Y - itemHeight)
                    {
                        cutBottom = (int)(posY - screenPos.Y + screenSize.Y - itemHeight);
                    }
                    Rectangle r = new Rectangle((int)screenPos.X, (int)backPosY, (int)screenSize.X, (int)(itemHeight) - cutTop - cutBottom);
                    e.SpriteBatch.Draw(hightlightTexture, r, Color.White);
                }
                if (posY > screenPos.Y && posY < screenPos.Y + screenSize.Y - Game1.dialogueFont.LineSpacing * Config.LineTwoScale)
                {
                    e.SpriteBatch.DrawString(Game1.dialogueFont, lineOne, new Vector2(screenPos.X + Config.MarginX, posY), Config.LineOneColor, 0f, Vector2.Zero, Config.LineOneScale, SpriteEffects.None, 0.86f);
                }
                if (posY > screenPos.Y - Game1.dialogueFont.LineSpacing * Config.LineOneScale && posY < screenPos.Y + screenSize.Y - itemHeight)
                {
                    e.SpriteBatch.DrawString(Game1.dialogueFont, lineTwo, new Vector2(screenPos.X + Config.MarginX, posY + Game1.dialogueFont.LineSpacing * Config.LineOneScale), Config.LineTwoColor, 0f, Vector2.Zero, Config.LineTwoScale, SpriteEffects.None, 0.86f);
                }
            }
            Vector2 barPos = screenPos + new Vector2(0, screenSize.Y - 32);
            int     space  = (int)Math.Round((screenSize.X - 168 - Config.VolumeBarWidth - 2) / 8f);

            e.SpriteBatch.Draw(buttonBarTexture, new Rectangle((int)barPos.X, (int)barPos.Y, (int)screenSize.X, 32), Color.White);
            for (int i = 0; i < 7; i++)
            {
                int  j       = i;
                bool playing = true;
                try
                {
                    playing = (Player.playState == WMPPlayState.wmppsPlaying);
                }
                catch
                {
                }
                if (playing && i > 2 || i > 3)
                {
                    j++;
                }

                e.SpriteBatch.Draw(buttonsTexture, barPos + new Vector2(space + (space + 24) * i, 4), new Rectangle(24 * j, 0, 24, 24), Color.White);
            }
            e.SpriteBatch.Draw(volumeBarTexture, new Rectangle((int)(screenPos.X + screenSize.X - Config.VolumeBarWidth - 1), (int)barPos.Y + 31 - (Config.VolumeLevel * 30 / 100), Config.VolumeBarWidth, Config.VolumeLevel * 30 / 100), Color.White);
        }
Ejemplo n.º 4
0
        public static void Display_RenderedWorld(object sender, RenderedWorldEventArgs e)
        {
            if (api.IsCallingNPC())
            {
                return;
            }

            Vector2 screenPos  = api.GetScreenPosition();
            Vector2 screenSize = api.GetScreenSize();

            if (!api.GetPhoneOpened() || !api.GetAppRunning() || api.GetRunningApp() != Helper.ModRegistry.ModID)
            {
                Monitor.Log($"Closing app: phone opened {api.GetPhoneOpened()} app running {api.GetAppRunning()} running app {api.GetRunningApp()}");
                CataloguesApp.CloseApp();
                return;
            }

            if (!clicking)
            {
                dragging = false;
            }

            Point mousePos = Game1.getMousePosition();

            if (clicking)
            {
                if (mousePos.Y != lastMousePosition.Y && (dragging || api.GetScreenRectangle().Contains(mousePos)))
                {
                    dragging = true;
                    offsetY += mousePos.Y - lastMousePosition.Y;
                    //Monitor.Log($"offsetY {offsetY} max {screenSize.Y - Config.MarginY + (Config.MarginY + Game1.dialogueFont.LineSpacing * 0.9f) * audio.Length}");
                    offsetY           = Math.Min(0, Math.Max(offsetY, (int)(screenSize.Y - (Config.AppHeaderHeight + Config.MarginY + (Config.MarginY + Config.AppRowHeight) * CataloguesApp.catalogueList.Count))));
                    lastMousePosition = mousePos;
                }
            }

            if (clicking && !Helper.Input.IsSuppressed(SButton.MouseLeft))
            {
                Monitor.Log($"unclicking; dragging = {dragging}");
                if (dragging)
                {
                    dragging = false;
                }
                else if (api.GetScreenRectangle().Contains(mousePos) && !new Rectangle((int)screenPos.X, (int)screenPos.Y, (int)screenSize.X, Config.AppHeaderHeight).Contains(mousePos))
                {
                    CataloguesApp.ClickRow(mousePos);
                }
                clicking = false;
            }


            e.SpriteBatch.Draw(backgroundTexture, new Rectangle((int)screenPos.X, (int)screenPos.Y, (int)screenSize.X, (int)screenSize.Y), Color.White);
            for (int i = 0; i < CataloguesApp.catalogueList.Count; i++)
            {
                string    a      = Helper.Translation.Get(CataloguesApp.catalogueList[i]);
                float     posY   = screenPos.Y + Config.AppHeaderHeight + Config.MarginY * (i + 1) + i * Config.AppRowHeight + offsetY;
                Rectangle r      = new Rectangle((int)screenPos.X, (int)posY, (int)screenSize.X, Config.AppRowHeight);
                bool      bought = !Config.RequireCataloguePurchase || Game1.player.mailReceived.Contains($"BoughtCatalogue{a}");
                if (!bought)
                {
                    float backPosY  = posY;
                    int   cutTop    = 0;
                    int   cutBottom = 0;

                    if (posY < screenPos.Y + Config.AppHeaderHeight)
                    {
                        cutTop   = (int)(screenPos.Y - posY);
                        backPosY = screenPos.Y;
                    }
                    if (posY > screenPos.Y + screenSize.Y - Config.AppRowHeight)
                    {
                        cutBottom = (int)(posY - screenPos.Y + screenSize.Y - Config.AppRowHeight);
                    }
                    r = new Rectangle((int)screenPos.X, (int)backPosY, (int)screenSize.X, (int)(Config.AppRowHeight) - cutTop - cutBottom);
                    if (!r.Contains(mousePos))
                    {
                        e.SpriteBatch.Draw(greyedTexture, r, Color.White);
                    }
                }

                if (r.Contains(mousePos))
                {
                    e.SpriteBatch.Draw(hightlightTexture, r, Color.White);
                }

                float textHeight = Game1.dialogueFont.MeasureString(a).Y *Config.TextScale;
                if (posY > screenPos.Y && posY < screenPos.Y + screenSize.Y - Config.AppRowHeight / 2f + textHeight / 2f)
                {
                    e.SpriteBatch.DrawString(Game1.dialogueFont, a, new Vector2(screenPos.X + Config.MarginX, posY + Config.AppRowHeight / 2f - textHeight / 2f), Config.TextColor, 0f, Vector2.Zero, Config.TextScale, SpriteEffects.None, 0.86f);
                    if (!bought)
                    {
                        string  cost    = "" + CataloguesApp.GetCataloguePrice(CataloguesApp.catalogueList[i]);
                        Vector2 buySize = Game1.dialogueFont.MeasureString(cost) * Config.TextScale;
                        e.SpriteBatch.DrawString(Game1.dialogueFont, cost, new Vector2(screenPos.X + screenSize.X - buySize.X - Config.AppRowHeight * 3 / 4, posY + Config.AppRowHeight / 2f - buySize.Y / 2f), Config.TextColor, 0f, Vector2.Zero, Config.TextScale, SpriteEffects.None, 0.86f);
                        e.SpriteBatch.Draw(coinTexture, new Rectangle((int)(screenPos.X + screenSize.X - Config.AppRowHeight * 3 / 4f), (int)(posY + Config.AppRowHeight / 4f), (int)(Config.AppRowHeight / 2f), (int)(Config.AppRowHeight / 2f)), Color.White);
                    }
                }
            }
            e.SpriteBatch.Draw(headerTexture, new Rectangle((int)screenPos.X, (int)screenPos.Y, (int)screenSize.X, Config.AppHeaderHeight), Color.White);
            float   headerTextHeight = Game1.dialogueFont.MeasureString(Helper.Translation.Get("catalogues")).Y *Config.HeaderTextScale;
            Vector2 xSize            = Game1.dialogueFont.MeasureString("x") * Config.HeaderTextScale;

            e.SpriteBatch.DrawString(Game1.dialogueFont, Helper.Translation.Get("catalogues"), new Vector2(screenPos.X + Config.MarginX, screenPos.Y + Config.AppHeaderHeight / 2f - headerTextHeight / 2f), Config.HeaderTextColor, 0f, Vector2.Zero, Config.HeaderTextScale, SpriteEffects.None, 0.86f);
            e.SpriteBatch.DrawString(Game1.dialogueFont, "x", new Vector2(screenPos.X + screenSize.X - Config.AppHeaderHeight / 2f - xSize.X / 2f, screenPos.Y + Config.AppHeaderHeight / 2f - xSize.Y / 2f), Config.HeaderTextColor, 0f, Vector2.Zero, Config.HeaderTextScale, SpriteEffects.None, 0.86f);
        }
Ejemplo n.º 5
0
        private static void Display_Rendered(object sender, RenderedEventArgs e)
        {
            if (api.IsCallingNPC())
            {
                return;
            }

            if (!api.GetPhoneOpened() || !api.GetAppRunning() || api.GetRunningApp() != helper.ModRegistry.ModID)
            {
                monitor.Log($"Closing app");
                helper.Events.Display.Rendered    -= Display_Rendered;
                helper.Events.Input.ButtonPressed -= Input_ButtonPressed;
                return;
            }

            Rectangle screenRect = api.GetScreenRectangle();

            xPositionOnScreen = screenRect.X + config.AppMarginX;
            yPositionOnScreen = screenRect.Y + config.AppMarginY;
            widthOnScreen     = screenRect.Width - config.AppMarginX * 2;
            heightOnScreen    = screenRect.Height - config.AppMarginY * 2;

            bool rotated        = api.GetPhoneRotated();
            int  textHeight     = (Game1.smallFont.LineSpacing + config.AppMarginY) * (rotated ? 1 : 2);
            int  spaceBelowText = heightOnScreen - textHeight;
            int  buttonHeight1  = spaceBelowText / 5;
            int  buttonHeight2  = (spaceBelowText - buttonHeight1) / 6;

            numpad.Clear();
            opButtons.Clear();

            // Create the number-pad.
            for (int iy = 0; iy < 3; iy++)
            {
                for (int ix = 0; ix < 3; ix++)
                {
                    int buttonWidth = (widthOnScreen / 4) - 2;
                    numpad.Add
                    (
                        new ClickableComponent
                        (
                            new Rectangle
                            (
                                xPositionOnScreen
                                + buttonWidth * ix,
                                yPositionOnScreen
                                + buttonHeight1 * (iy + 1)
                                + textHeight,
                                buttonWidth - 2,
                                buttonHeight1 - 2
                            ),
                            (Math.Abs(((3 - iy) * 3) + ix - 2)).ToString()
                        )
                    );
                }
            }

            // Create the op buttons.
            for (int i = 0; i < 6; i++)
            {
                int xOffset = ((widthOnScreen) / 4) * 3;
                int yOffset = ((heightOnScreen) * 9 / 16 / 4) * 3;
                opButtons.Add
                (
                    new ClickableComponent
                    (
                        new Rectangle
                        (
                            xPositionOnScreen
                            + xOffset
                            + xOffset / 16,
                            yPositionOnScreen
                            + (buttonHeight2) * i
                            + textHeight
                            + buttonHeight1,
                            xOffset / 4 - 2,
                            buttonHeight2 - 2
                        ),
                        i switch
                {
                    0 => "+",
                    1 => "-",
                    2 => "X",
                    3 => "/",
                    4 => "EQ",
                    5 => ".",
                    _ => ""
                }