diff --git a/rcongui_public/src/i18n/locales/en/translation.json b/rcongui_public/src/i18n/locales/en/translation.json index cfefba896..a928c34e8 100644 --- a/rcongui_public/src/i18n/locales/en/translation.json +++ b/rcongui_public/src/i18n/locales/en/translation.json @@ -31,6 +31,23 @@ "weekday": "Weekday" }, "streaming": { + "streamerView": "Streamer View", + "tutorial": { + "title": "Tutorial", + "introduction": "This is a tool for people, who want to stream Hell Let Loose.", + "stepByStep": "Here is a step-by-step guide to integrate the scrolling banner into your stream:", + "openOBS": "open OBS", + "createSource": "Add source -> Browser -> Create", + "enterFollowingValues": "Enter the following values", + "url": "URL", + "width": "Width", + "height": "Height", + "customCSS": "Custom CSS (optional)", + "adjustColors": "Adjust the css colors as you like either with hex values or color names.", + "andSave": "and save", + "crop": "Crop by pressing ALT key and dragging sides of source", + "changeSettings": "Right click on source -> 'interact' to change settings" + }, "playerCount": "Player count", "cycleDuration": "Cycle Duration", "pauseWidth": "Pause width", diff --git a/rcongui_public/src/pages/home/streaming/index.tsx b/rcongui_public/src/pages/home/streaming/index.tsx index 1bf43cb2b..33b3a95a0 100644 --- a/rcongui_public/src/pages/home/streaming/index.tsx +++ b/rcongui_public/src/pages/home/streaming/index.tsx @@ -7,6 +7,15 @@ import {useTranslation} from "react-i18next"; import {useOutletContext} from "react-router"; import {GameLiveOutletContext} from "@/pages/home/layout"; import SelectBox from "@/components/ui/select-box"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger +} from "@/components/ui/accordion"; +import {AccordionHeader} from "@radix-ui/react-accordion"; +import {GraduationCap} from "lucide-react"; +import StreamTutorial from "@/pages/home/streaming/stream-tutorial"; export default function Streaming() { const { t } = useTranslation('translation', {keyPrefix: 'streaming'}); @@ -31,7 +40,21 @@ export default function Streaming() { ); return
-
+

{t("streamerView")}

+ + + + + {t('tutorial.title')} + + + + + + + + {/*bg background necessary so the background stays within obs*/} +
{t('playerCount')} ({playerAmount}) diff --git a/rcongui_public/src/pages/home/streaming/stream-banner.tsx b/rcongui_public/src/pages/home/streaming/stream-banner.tsx index d11227fcf..de2484918 100644 --- a/rcongui_public/src/pages/home/streaming/stream-banner.tsx +++ b/rcongui_public/src/pages/home/streaming/stream-banner.tsx @@ -26,7 +26,7 @@ export default function StreamBanner({ playerAmount, settings }: StreamBannerPro .sort((a, b) => b.kills - a.kills) .slice(0, playerAmount); - return
+ return
@@ -40,12 +40,12 @@ interface StreamProps { const Stream = ({ players, settings }: StreamProps) => { return
-
+
{settings.text}
{players.map((player =>
-
+
{player.kills}
{settings.showAvatars && player.steaminfo?.profile?.avatar && @@ -56,11 +56,11 @@ const Stream = ({ players, settings }: StreamProps) => { } -
+
{player.player}
- {settings.showWeapons &&
+ {settings.showWeapons &&
{ Object.entries(player.weapons) .sort(([n1, v1], [n2, v2]) => v2 - v1)[0]?.[0] diff --git a/rcongui_public/src/pages/home/streaming/stream-tutorial.tsx b/rcongui_public/src/pages/home/streaming/stream-tutorial.tsx new file mode 100644 index 000000000..515e028cf --- /dev/null +++ b/rcongui_public/src/pages/home/streaming/stream-tutorial.tsx @@ -0,0 +1,103 @@ +import React from 'react'; +import { useTranslation } from "react-i18next"; +import { siObsstudio } from "simple-icons"; +import { SimpleIcon } from "@/components/simple-icon"; + +const StreamTutorial = () => { + const { t } = useTranslation('translation', { keyPrefix: 'streaming.tutorial' }); + + const cssValue = `.stream-banner { + background-color: black !important; +} + +.stream-banner-text { + color: #ffa500 !important; +} + +.stream-banner-kills { + color: red !important; +} + +.stream-banner-player { + color: #6a5acd !important; +} + +.stream-banner-weapon { + color: #6a5acd !important; +}`; + + const steps = [ + { + id: 'obs', + content: t("openOBS"), + icon: + }, + { + id: 'source', + content: t("createSource") + }, + { + id: 'values', + content: t("enterFollowingValues"), + subContent: ( +
+

+ {t("url")}: + {window.location.href} +

+

+ {t("width")}: + 1000 +

+

+ {t("height")}: + 800 +

+

{t("customCSS")}:

+
+            {cssValue}
+          
+

+ {t("adjustColors")} +

+

{t("andSave")}

+
+ ) + }, + { + id: 'crop', + content: t("crop") + }, + { + id: 'settings', + content: t("changeSettings") + } + ]; + + return ( +
+
+
+

{t("introduction")}

+

{t("stepByStep")}

+
+ +
    + {steps.map((step, index) => ( +
  1. +
    + {index + 1}. + {step.content} + {step.icon} +
    + {step.subContent} +
  2. + ))} +
+
+
+ ); +}; + +export default StreamTutorial;