Phase 1 of turning the game into the company landing page. - Add src/config/company.js with name, tagline, contact, about and the product line, plus a brand palette built around #00a693 (contrast checked); placeholders are marked TODO(company). - Add src/config/assets.js listing every loaded file with its expected format; placeholders are marked TODO(asset). - Move all Persian interface text, dialogue, missions and scenery text into src/i18n/fa.js; components and game code read from it. - Expose the palette as CSS variables (--color-primary and shades) and Tailwind colours, and use it for 3D materials and map drawings. - Fix the arrival line that still called the manager's car a white pickup. - Add tests that block hard-coded Persian text and low-contrast colours. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
51 lines
1.6 KiB
React
51 lines
1.6 KiB
React
import { GameNode } from '@/components/shared/GameNode.jsx';
|
|
import { strings } from '@/i18n/fa.js';
|
|
import { robotFace } from '@/config/assets.js';
|
|
/** @typedef {{nodes:object,actions:object}} RealIntroDialogProps */
|
|
/** Presents the RealIntroDialog view using plain models and semantic native elements.
|
|
* @param {RealIntroDialogProps} props - Interface snapshots and callbacks.
|
|
* @returns {import('react').ReactElement} Game panel.
|
|
*/
|
|
export function RealIntroDialog({ nodes, actions }) {
|
|
return (
|
|
<>
|
|
<GameNode
|
|
as="dialog"
|
|
id="real-intro"
|
|
model={nodes['real-intro']}
|
|
onClose={() => actions.close('real-intro')}
|
|
>
|
|
<img src={robotFace('serious')} alt="" width="72" height="68" />
|
|
<h2>{strings.realIntro.title}</h2>
|
|
<p>{strings.realIntro.body}</p>
|
|
<ul>
|
|
{strings.realIntro.safety.map((line) => (
|
|
<li key={line}>{line}</li>
|
|
))}
|
|
</ul>
|
|
<div className="actions">
|
|
<GameNode
|
|
as="button"
|
|
type="button"
|
|
id="real-go"
|
|
model={nodes['real-go']}
|
|
onAction={() => actions.emit('real-go')}
|
|
>
|
|
{strings.realIntro.accept}
|
|
</GameNode>
|
|
<GameNode
|
|
as="button"
|
|
type="button"
|
|
id="real-cancel"
|
|
className="ghost"
|
|
model={nodes['real-cancel']}
|
|
onAction={() => actions.emit('real-cancel')}
|
|
>
|
|
{strings.common.cancel}
|
|
</GameNode>
|
|
</div>
|
|
</GameNode>
|
|
</>
|
|
);
|
|
}
|