Connected addUnit

This commit is contained in:
mic0 2024-10-23 10:32:13 +02:00
parent 20fa42cfca
commit 294052070a
Signed by: mico
GPG Key ID: A3F8023524CF1C8D
4 changed files with 55 additions and 20 deletions

View File

@ -3,17 +3,22 @@ import styles from '../styles/Army.module.css';
const Army = () => { const Army = () => {
const { army } = usePlayer() const { army, addUnit } = usePlayer()
return <div className="styles.armyGathering"> return <div className="styles.armyGathering">
<div className={`${styles.tavern_keeper} ${styles.person} ${styles.static}`} /> <div className={`${styles.tavern_keeper} ${styles.person} ${styles.static}`} />
<div className={`${styles.scribe} ${styles.person} ${styles.moloch_denier} ${styles.static}`}> <div onClick={() => addUnit(0)} className={`${styles.scribe} ${styles.person} ${styles.moloch_denier} ${styles.static}`}>
<div className="supply"></div> <div className={styles.supply}>Moloch denier: {army?.moloch_denier.level}</div>
</div>
<div onClick={() => addUnit(1)} className={`${styles.druid} ${styles.person} ${styles.apprentice} ${styles.static}`} >
<div className={styles.supply}>Apprentice: {army?.apprentice.level}</div>
</div>
<div onClick={() => addUnit(2)} className={`${styles.ranger} ${styles.person} ${styles.anointed} ${styles.static}`} >
<div className={styles.supply}>Anointed: {army?.anointed.level}</div>
</div>
<div onClick={() => addUnit(3)} className={`${styles.warrior} ${styles.person} ${styles.champion} ${styles.static}`} >
<div className={styles.supply}>Champion: {army?.champion.level}</div>
</div> </div>
<div className={`${styles.druid} ${styles.person} ${styles.apprentice} ${styles.static}`} ></div>
<div className={`${styles.ranger} ${styles.person} ${styles.anointed} ${styles.static}`} ></div>
<div className={`${styles.warrior} ${styles.person} ${styles.champion} ${styles.static}`} ></div>
</div> </div>
} }

View File

@ -43,7 +43,6 @@ const Header = () => {
}, [isRegistered, register]) }, [isRegistered, register])
return <header onClick={onRegister} className={styles.header}> return <header onClick={onRegister} className={styles.header}>
{count.current} {balance}
<h1 className={styles.title}>{title}</h1> <h1 className={styles.title}>{title}</h1>
{subtitle} {subtitle}
{perSecondParagraph} {perSecondParagraph}

View File

@ -6,17 +6,28 @@ import { parseEther } from 'viem'
const contractAddress = "0xbd06B0878888bf4c6895704fa603a5ADf7e65c66" const contractAddress = "0xbd06B0878888bf4c6895704fa603a5ADf7e65c66"
const abi = contractAbi.abi const abi = contractAbi.abi
export interface PlayerContextType { export interface Player {
isRegistered: boolean, created_at: bigint,
player: null | string, last_raided_at: bigint,
army: null | { profit_per_second: bigint }, total_minted: bigint
balance: bigint, }
register: () => void; export interface Army {
raid: () => void anointed: { level: number }
apprentice: { level: number }
champion: { level: number }
moloch_denier: { level: number }
profit_per_second: bigint
} }
export interface Player { } export interface PlayerContextType {
export interface Army { } isRegistered: boolean,
player: null | Player,
army: null | Army,
balance: bigint,
register: () => void,
raid: () => void,
addUnit: (unit: number) => void
}
const PlayerContext = createContext<PlayerContextType>({ const PlayerContext = createContext<PlayerContextType>({
isRegistered: false, isRegistered: false,
@ -25,6 +36,7 @@ const PlayerContext = createContext<PlayerContextType>({
balance: BigInt(0), balance: BigInt(0),
register: () => { }, register: () => { },
raid: () => { }, raid: () => { },
addUnit: () => { }
}); });
const PlayerProvider = ({ children }: { children: ReactNode }) => { const PlayerProvider = ({ children }: { children: ReactNode }) => {
@ -96,16 +108,26 @@ const PlayerProvider = ({ children }: { children: ReactNode }) => {
}) })
}, [writeContract]) }, [writeContract])
const addUnit = useCallback((unit: number) => {
writeContract({
abi,
address: contractAddress,
functionName: 'addUnit',
args: [unit, 1]
})
}, [writeContract])
console.log(player, army) console.log(player, army)
return ( return (
<PlayerContext.Provider value={{ <PlayerContext.Provider value={{
isRegistered: isRegistered as boolean, isRegistered: isRegistered as boolean,
player: player, player: player as Player,
army: army, army: army as Army,
balance: balance as bigint, balance: balance as bigint,
register, register,
raid raid,
addUnit
}}> }}>
{children} {children}
</PlayerContext.Provider> </PlayerContext.Provider>

View File

@ -113,3 +113,12 @@
.champion { .champion {
filter: saturate(2); filter: saturate(2);
} }
.supply {
position: absolute;
bottom: -40px;
background: rgba(0, 0, 0, 0.89);
padding: 0.5rem 1rem;
font-size: 0.8rem;
user-select: none;
}