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(); } }
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); } } }
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); }
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); }
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 => ".", _ => "" }