import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { useAuth } from '../hooks/useAuth' import { GameButton } from './common/GameButton' import './CharacterCreation.css' function CharacterCreation() { const { createCharacter } = useAuth() const [name, setName] = useState('') const [stats, setStats] = useState({ strength: 10, agility: 10, endurance: 10, intellect: 10 }) const [loading, setLoading] = useState(false) const [error, setError] = useState('') const navigate = useNavigate() const totalPoints = 40 const pointsUsed = stats.strength + stats.agility + stats.endurance + stats.intellect const pointsRemaining = totalPoints - pointsUsed const handleStatChange = (stat: keyof typeof stats, delta: number) => { const newValue = stats[stat] + delta if (newValue < 5 || newValue > 20) return if (delta > 0 && pointsRemaining <= 0) return setStats({ ...stats, [stat]: newValue }) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (pointsRemaining !== 0) { setError('You must use all attribute points') return } setLoading(true) setError('') try { await createCharacter({ ...stats, name }) navigate('/game') } catch (err: any) { setError(err.response?.data?.detail || 'Failed to create character') } finally { setLoading(false) } } return (

Character Creation

Forge your survivor for the wasteland

setName(e.target.value)} placeholder="Enter survivor name..." required disabled={loading} maxLength={20} />

Attributes

Points Remaining: {pointsRemaining}
{(Object.keys(stats) as Array).map((stat) => (
{stat} {stats[stat]}
{ e.preventDefault() handleStatChange(stat, -1) }} disabled={loading || stats[stat] <= 5} > - { e.preventDefault() handleStatChange(stat, 1) }} disabled={loading || stats[stat] >= 20 || pointsRemaining <= 0} > +
))}
{error &&
{error}
}
navigate('/characters')} disabled={loading} > Cancel { }} // Handled by form submit > {loading ? 'Forging...' : 'Create Survivor'}
) } export default CharacterCreation