Implementation of storing input name in sessionStorage and Implementation of /vs/:char/:step #1

Merged
latenightdef merged 4 commits from mrrpmeowfurry/fifty-shades-of-bully:main into main 2025-06-19 02:48:06 +00:00
7 changed files with 40 additions and 12 deletions

View file

@ -4,7 +4,7 @@
align-items: center; align-items: center;
width: 20vw; width: 20vw;
min-width: 100px; min-width: 100px;
background-color: #8391b8; background-color: #a2b7e4;
color: white; color: white;
border-style: solid; border-style: solid;
border-color: #8391b8; border-color: #8391b8;
@ -13,4 +13,8 @@
position: absolute; position: absolute;
transform: translateY(-40px); transform: translateY(-40px);
z-index: 2; z-index: 2;
border-radius: 25px;
/*#a2b7e4*/
/*#8391b8*/
} }

View file

@ -22,7 +22,7 @@ createRoot(document.getElementById('root')).render(
<Route path="/sprite" element={<Animation />} /> <Route path="/sprite" element={<Animation />} />
<Route path='/video' element={<PlayVideo />} /> <Route path='/video' element={<PlayVideo />} />
<Route path="/introduction" element={<IntroductionPage />} /> <Route path="/introduction" element={<IntroductionPage />} />
<Route path='/vs/:step' element={<VitualNovelHandler />} /> <Route path='/vs/:char/:step' element={<VitualNovelHandler />} />
<Route path='/end' element={<EndPage />} /> <Route path='/end' element={<EndPage />} />
<Route path="*" element={<Navigate to="/" replace />} /> <Route path="*" element={<Navigate to="/" replace />} />

View file

@ -8,6 +8,12 @@ import Animation from './components/animation.jsx';
function ConversationPage({data , onClicked}) { function ConversationPage({data , onClicked}) {
const backgroundSRC = `${import.meta.env.VITE_ASSETS_URL}/${data.background}` const backgroundSRC = `${import.meta.env.VITE_ASSETS_URL}/${data.background}`
const [name] = useState(() => {
return sessionStorage.getItem("name") || '';
});
const DialogText = data.text.replace("{name}", name);
const DialogName = data.name.replace("{name}", name);
return ( return (
<div <div
@ -29,11 +35,11 @@ function ConversationPage({data , onClicked}) {
</div> </div>
<div style={{width:'60vw'}}> <div style={{width:'60vw'}}>
<div className='nameBox title'> <div className='nameBox title'>
{data.name} {DialogName}
</div> </div>
</div> </div>
<div className='textBox title' style={{overflow: 'scroll',}}> <div className='textBox title' style={{overflow: 'scroll',}}>
{data.text} {DialogText}
</div> </div>
</div> </div>
); );

View file

@ -35,7 +35,9 @@ function IntroductionPage() {
const handleClickedButton = () => { const handleClickedButton = () => {
console.log(character.name(numChar)) console.log(character.name(numChar))
if(character.name(numChar)=='Porsche') navigate(`/vs/0`); if(character.name(numChar)=='Porsche') navigate(`/vs/Porsche/0`);
if(character.name(numChar)=='Pie') navigate(`/vs/Pie/0`);
if(character.name(numChar)=='Patt') navigate(`/vs/Pat/0`);
} }
return ( return (

View file

@ -1,10 +1,16 @@
import '../css/global.css' import '../css/global.css'
import '../css/customInput.css' import '../css/customInput.css'
import BlackButton from './components/customButton' import BlackButton from './components/customButton'
import { useState } from 'react'; import { useState, useEffect } from 'react';
function NamePage() { function NamePage() {
const [name, setName] = useState(''); const [name, setName] = useState(() => {
return sessionStorage.getItem("name") || '';
});
useEffect(() => {
sessionStorage.setItem("name", name);
}, [name]);
return ( return (
<div style={{ <div style={{
@ -35,4 +41,4 @@ function NamePage() {
) )
} }
export default NamePage export default NamePage

View file

@ -5,6 +5,11 @@ import '../css/textBox.css';
function StoryPage({data , onClicked}) { function StoryPage({data , onClicked}) {
const backgroundSRC = `${import.meta.env.VITE_ASSETS_URL}/${data.background}` const backgroundSRC = `${import.meta.env.VITE_ASSETS_URL}/${data.background}`
const [name] = useState(() => {
return sessionStorage.getItem("name") || '';
});
const DialogText = data.text.replace("{name}", name);
return ( return (
<div <div
@ -22,7 +27,7 @@ function StoryPage({data , onClicked}) {
}} }}
> >
<div className='textBox title' style={{marginTop: '50vh', overflow: 'scroll',}}> <div className='textBox title' style={{marginTop: '50vh', overflow: 'scroll',}}>
{data.text} {DialogText}
</div> </div>
</div> </div>
); );

View file

@ -14,12 +14,13 @@ function VitualNovelHandler() {
const [error, setError] = useState(null); const [error, setError] = useState(null);
const [currentStep, setCurrentStep] = useState(0); const [currentStep, setCurrentStep] = useState(0);
const navigate = useNavigate(); const navigate = useNavigate();
const { step } = useParams(); const { char, step } = useParams();
useEffect(() => { useEffect(() => {
const loadData = async () => { const loadData = async () => {
try { try {
const parsedData = await fetchYamlData({ src: '/yml/DialogPorsche.yml' }); const yamlPath = `/yml/Dialog${char}.yml`;
const parsedData = await fetchYamlData({ src: yamlPath });
if (!Array.isArray(parsedData)) { if (!Array.isArray(parsedData)) {
throw new Error('YAML data is not an array'); throw new Error('YAML data is not an array');
} }
@ -51,10 +52,14 @@ function VitualNovelHandler() {
console.log(nextstep) console.log(nextstep)
if (typeof nextstep !== 'number' || Number.isNaN(nextstep)) { if (typeof nextstep !== 'number' || Number.isNaN(nextstep)) {
navigate(`/end`);//44 is last page navigate(`/end`);//44 is last page
// console.log("currentStep:", currentStep);
// console.log("data at currentStep:", data[currentStep]);
} }
else{ else{
setCurrentStep(nextstep); setCurrentStep(nextstep);
navigate(`/vs/${nextstep}`); navigate(`/vs/${char}/${nextstep}`);
// console.log("currentStep:", currentStep);
// console.log("data at currentStep:", data[currentStep]);
} }
}; };