save chanes on reskin

master
lza_menace 2 years ago
parent a52fb77716
commit 86d37ab5dc

Binary file not shown.

@ -1,133 +0,0 @@
import { ConnectButton } from '@rainbow-me/rainbowkit';
import { AwesomeButton } from 'react-awesome-button';
import './styles/buttons.css';
export function Wallet() {
return (
<nav className="navbar">
<ConnectButton.Custom>
{({
account,
chain,
openAccountModal,
openChainModal,
openConnectModal,
mounted,
}) => {
const ready = mounted;
const connected =
ready &&
account &&
chain;
return (
<div
className='walletButtons'
{...(!ready && {
'aria-hidden': true,
'style': {
opacity: 0,
pointerEvents: 'none',
userSelect: 'none',
},
})}
>
{(() => {
if (!connected) {
return (
<AwesomeButton
type="secondary"
ripple={true}
loadingLabel=""
resultLabel=""
releaseDelay={1500}
onReleased={(event, release) => {
openConnectModal();
release();
}}>
Connect Wallet
</AwesomeButton>
);
}
if (chain.unsupported) {
return (
<AwesomeButton
type="secondary"
ripple={true}
loadingLabel=""
resultLabel=""
releaseDelay={1500}
onReleased={(event, release) => {
openChainModal();
release();
}}>
Wrong network
</AwesomeButton>
);
}
return (
<div style={{ display: 'flex', gap: 12 }}>
<AwesomeButton
type="secondary"
style={{ display: 'flex', alignItems: 'center' }}
ripple={true}
loadingLabel=""
resultLabel=""
releaseDelay={1500}
onReleased={(event, release) => {
openChainModal();
release();
}}>
{chain.hasIcon && (
<div
style={{
background: chain.iconBackground,
width: 24,
height: 24,
borderRadius: 999,
overflow: 'hidden',
marginRight: 4,
}}
>
{chain.iconUrl && (
<img
alt={chain.name ?? 'Chain icon'}
src={chain.iconUrl}
style={{ width: 12, height: 12 }}
/>
)}
</div>
)}
{chain.name}
</AwesomeButton>
<AwesomeButton
type="primary"
style={{ display: 'flex', alignItems: 'center' }}
ripple={true}
loadingLabel=""
resultLabel=""
releaseDelay={1500}
onReleased={(event, release) => {
openAccountModal();
release();
}}>
{account.displayName}
{account.displayBalance
? ` (${account.displayBalance})`
: ''}
</AwesomeButton>
</div>
);
})()}
</div>
);
}}
</ConnectButton.Custom>
</nav>
);
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

@ -1,5 +1,5 @@
import '@rainbow-me/rainbowkit/styles.css'; import '@rainbow-me/rainbowkit/styles.css';
import 'react-awesome-button/dist/styles.css'; // import 'react-awesome-button/dist/styles.css';
import "./styles/main.css"; import "./styles/main.css";
import ReactDOM from "react-dom/client"; import ReactDOM from "react-dom/client";
@ -11,11 +11,8 @@ import { mainnet, goerli, localhost } from 'wagmi/chains';
import { infuraProvider } from 'wagmi/providers/infura' import { infuraProvider } from 'wagmi/providers/infura'
import { publicProvider } from 'wagmi/providers/public'; import { publicProvider } from 'wagmi/providers/public';
import { ParallaxProvider } from 'react-scroll-parallax'; import { Navbar } from "./sections/Navbar";
import { Hero } from "./sections/Hero";
import { Wallet } from "./Wallet";
import { AllSections } from './template/Sections';
const { chains, provider, webSocketProvider } = configureChains( const { chains, provider, webSocketProvider } = configureChains(
[mainnet, goerli, localhost], [mainnet, goerli, localhost],
@ -38,20 +35,16 @@ const wagmiClient = createClient({
}); });
ReactDOM.createRoot(document.getElementById("root")).render( ReactDOM.createRoot(document.getElementById("root")).render(
<ParallaxProvider>
<WagmiConfig client={wagmiClient}> <WagmiConfig client={wagmiClient}>
<RainbowKitProvider chains={chains} initialChain={1337}> <RainbowKitProvider chains={chains} initialChain={1337}>
<Wallet />
<div className="scrollContainer"> <div className="scrollContainer">
<AllSections <Navbar />
contractAddress={'0x5FbDB2315678afecb367f032d93F642f64180aa3'} <Hero />
ws={'wss://lzahq.tech/ws'}
/>
</div> </div>
</RainbowKitProvider> </RainbowKitProvider>
</WagmiConfig> </WagmiConfig>
</ParallaxProvider>
); );
// 0x97a8a91563a9c6a9fbdb5d37656d4022f2838928 - goerli // 0x97a8a91563a9c6a9fbdb5d37656d4022f2838928 - goerli
// 0x5FbDB2315678afecb367f032d93F642f64180aa3 - local // 0x5FbDB2315678afecb367f032d93F642f64180aa3 - local
// wss://lzahq.tech/ws

@ -0,0 +1,55 @@
import React from 'react';
import '../styles/hero.css';
import Unaboomer from '../img/unaboomer.png';
import Mailbomb from '../img/mailbomb.png';
import Explosion from '../img/explosion.png';
import Arrow from '../img/arrow_right.png';
export class Hero extends React.Component {
render() {
return (
<div id='hero'>
<h1>the web3 revolution & its consequences have been a disaster for the human race.</h1>
<div id='heroFlex'>
<div className='heroFlexItem'>
<img src={Unaboomer} width='280px' alt='Pixelated Unaboomer profile picture - a hooded man with dark sunglasses.' />
<p>
Technology is advancing at an exponential rate and boomers are being left behind. A.I., Bitcoin,
and expensive JPEGs have made them angry. <br /><br />
They've begun to radicalize. 35,000 Boomers have joined forces
to lash out at the system.
</p>
<button className='doThing buttom'>Radicalize boomer</button>
<p>(0 ETH)</p>
</div>
<div className='heroFlexArrow'>
<img src={Arrow} width='100px' alt='Arrow pointing to the next step.' />
</div>
<div className='heroFlexItem'>
<img src={Mailbomb} width='280px' alt='Pixelated Mailbomb image - handle with caution.' />
<p>
Don't let the Boomers win, fight back! Assemble a mailbomb and blow 'em to smithereens. <br /><br />
(Warning: Some bombs are duds!)
</p>
<button className='doThing buttom'>assemble mailbomb</button>
<p>(.01 ETH)</p>
</div>
<div className='heroFlexArrow'>
<img src={Arrow} width='100px' alt='Arrow pointing to the next step.' />
</div>
<div className='heroFlexItem'>
<img src={Explosion} width='280px' alt='Pixelated explosion image.' />
<p>
Ready for mayhem? Burn your mailrooms to blow up a random boomer. <br /><br />
If your bomb is live it will destroy a Boomer PFP forever. <br /><br />
(Warning: Your Boomer might explode!)
</p>
<button className='doThing buttom'>mail a bomb</button>
<p>(0 ETH)</p>
</div>
</div>
</div>
)
}
}

@ -0,0 +1,20 @@
import React from 'react';
import { ConnectButton } from '@rainbow-me/rainbowkit';
import '../styles/navbar.css';
import Logo from '../img/logo.png';
export class Navbar extends React.Component {
render() {
return (
<nav id='primaryNav'>
<div id='logo'>
<img src={Logo} alt='Unaboomer NFT project logo. A red hood with black background.' />
</div>
<div id='wallet'>
<ConnectButton chainStatus="none" />
</div>
</nav>
)
}
}

@ -0,0 +1,36 @@
#hero {
width: 100%;
}
#hero h1 {
width: 80%;
text-transform: uppercase;
margin: 1em auto;
}
#heroFlex {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin: 0 auto;
}
.heroFlexItem {
flex: 0 25%;
height: 100%;
width: 200px;
text-align: center;
}
.heroFlexItem p {
width: 90%;
margin: 0 auto;
}
.heroFlexArrow {
height: 100%;
}
button.doThing {
margin: 1em;
}

@ -1,110 +1,66 @@
@font-face { @font-face {
font-family: 'SummerPixel'; font-family: 'Depixel';
src: url('../../public/SummerPixel22Regular-jE0W7.ttf'); src: url('../../public/depixelschmal.otf');
} }
* { * {
font-family: 'SummerPixel'; font-family: 'Depixel';
/* font-weight: 400; */
font-style: normal; font-style: normal;
} }
body { body {
--black: #000000; background-color: #231f20;
--ash-black: #222; color: #f9f9f9;
--white: #fafafa;
--sky: #00ccff;
--green: #22dddd;
--blue: #1300ff;
--dusk: #6600ff;
--purple: #9900ff;
--pink: #ff0066;
--red: #fe0222;
--orange: #fd7702;
--yellow: #ffbb00;
--background: var(--black);
--accent: var(--white);
margin: 0;
padding: 0;
background-color: var(--background);
color: var(--accent);
} }
h1 { button {
font-size: 36px; background-color: #ef3b39;
font-weight: 700; color: #f9f9f9;
letter-spacing: -1px; text-transform: uppercase;
line-height: 1.2; padding: 1em;
text-align: center; border-radius: 0;
margin: 100px 0 40px; border: 0;
} box-shadow: 0 5px #f9f9f9;
clip-path: polygon(
h2 { 0px 20px,
font-weight: 400; 4px 20px,
} 4px 12px,
8px 12px,
p { 8px 8px,
margin: 0 0 30px 0; 12px 8px,
font-size: 18px; 12px 4px,
} 16px 4px,
20px 4px,
nav { 20px 0px,
position: fixed; calc(100% - 20px) 0px,
top: 0; calc(100% - 20px) 4px,
left: 0; calc(100% - 12px) 4px,
right: 0; calc(100% - 12px) 8px,
display: flex; calc(100% - 8px) 8px,
justify-content: flex-start; calc(100% - 8px) 12px,
align-items: center; calc(100% - 4px) 12px,
padding: 40px; calc(100% - 4px) 16px,
background-image: radial-gradient( calc(100% - 4px) 20px,
rgba(0, 0, 0, 0) 1px, 100% 20px,
var(--background) 1px 100% calc(100% - 20px),
calc(100% - 4px) calc(100% - 20px),
calc(100% - 4px) calc(100% - 12px),
calc(100% - 8px) calc(100% - 12px),
calc(100% - 8px) calc(100% - 8px),
calc(100% - 12px) calc(100% - 8px),
calc(100% - 12px) calc(100% - 4px),
calc(100% - 16px) calc(100% - 4px),
calc(100% - 20px) calc(100% - 4px),
calc(100% - 20px) 100%,
20px 100%,
20px calc(100% - 4px),
12px calc(100% - 4px),
12px calc(100% - 8px),
8px calc(100% - 8px),
8px calc(100% - 12px),
4px calc(100% - 12px),
4px calc(100% - 16px),
4px calc(100% - 20px),
0px calc(100% - 20px)
); );
background-size: 4px 4px;
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(3px);
-moz-backdrop-filter: blur(3px);
font-size: 14px;
line-height: 14px;
z-index: 10;
}
nav::before {
display: block;
content: "";
position: absolute;
top: -1px;
left: 0;
right: 0;
height: 1px;
background: var(--accent);
opacity: 0.2;
}
::-webkit-scrollbar {
height: 12px;
width: 5px;
background: var(--background);
}
::-webkit-scrollbar-thumb {
background: var(--accent);
-webkit-border-radius: 1ex;
border-radius: 1ex;
}
::-webkit-scrollbar-corner {
background: var(--background);
}
.wrap {
word-break: break-word;
}
.hidden {
display: none;
} }

@ -0,0 +1,26 @@
#primaryNav {
display: inline;
}
#logo {
width: 250px;
}
#logo img {
width: 100%;
padding: 1em;
}
#wallet {
position: absolute;
top: 0;
right: 0;
padding: 2em;
}
#wallet button {
font-family: 'Depixel';
background-color: #ef3b39;
border-radius: 0;
box-shadow: 0 5px #fff;
}

@ -188,13 +188,17 @@
margin: 10px; margin: 10px;
} }
#gameMap button {
width: 30%;
}
#statsbox { #statsbox {
position: fixed; position: fixed;
bottom: 0; bottom: 0;
left: 0; left: 0;
background-color: black; background-color: black;
text-align: left; text-align: left;
width: 49%; width: 30%;
margin: 0; margin: 0;
max-height: 400px; max-height: 400px;
overflow-y: auto; overflow-y: auto;
@ -211,7 +215,7 @@
right: 0; right: 0;
background-color: black; background-color: black;
text-align: left; text-align: left;
width: 49%; width: 30%;
margin: 0; margin: 0;
max-height: 400px; max-height: 400px;
overflow-y: auto; overflow-y: auto;

@ -114,7 +114,7 @@ class GenerateBombOverlay extends React.Component {
class GameMap extends React.Component { class GameMap extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = {showStats: false} this.state = {showStats: false, showMap: false}
} }
shorten(s) { shorten(s) {
@ -124,16 +124,28 @@ class GameMap extends React.Component {
render() { render() {
return ( return (
<> <>
<h1 id="gameMapTitle">Metaverse Map</h1> <div id="gameMap">
<p id="gameMapText"> {this.state.showMap && (
{this.props.unaboomersRadicalized} / {this.props.unaboomerMaxSupply} Unaboomers radicalized and ready to terrorize the metaverse. {this.props.unaboomersKilled} killed.<br /> <>
This round will end and the project will fully start when {this.props.unaboomerMaxSurvivorCount} or less Unaboomers remain standing.<br /> <h1 id="gameMapTitle">Metaverse Map</h1>
</p> <p id="gameMapText">
<div className="map"> {this.props.unaboomersRadicalized} / {this.props.unaboomerMaxSupply} Unaboomers radicalized and ready to terrorize the metaverse. {this.props.unaboomersKilled} killed.<br />
<img src={Map} /> This round will end and the project will fully start when {this.props.unaboomerMaxSurvivorCount} or less Unaboomers remain standing.<br />
<GenerateBombOverlay amount={this.props.bombsAssembled - this.props.bombsExploded} color={'#E3B505'} type={'dots'} /> </p>
<GenerateBombOverlay amount={this.props.bombsExploded} color={'#D01500'} type={'dots'} /> <div className="map">
<GenerateBombOverlay amount={this.props.bombsExploded - this.props.unaboomersKilled} color={'#0095FF'} type={'dots'} /> <img src={Map} />
<GenerateBombOverlay amount={this.props.bombsAssembled - this.props.bombsExploded} color={'#E3B505'} type={'dots'} />
<GenerateBombOverlay amount={this.props.bombsExploded} color={'#D01500'} type={'dots'} />
<GenerateBombOverlay amount={this.props.bombsExploded - this.props.unaboomersKilled} color={'#0095FF'} type={'dots'} />
</div>
</>
)}
<button className="button" onClick={() => {
this.setState({showMap: !this.state.showMap})
}}>
{this.state.showMap && (<>hide map</>) || <>show map</>}
</button>
</div> </div>
<div id="statsbox"> <div id="statsbox">
{this.state.showStats && ( {this.state.showStats && (
@ -141,13 +153,19 @@ class GameMap extends React.Component {
<img src={Boomer} width="50px" /> <img src={Boomer} width="50px" />
<p className="nopad"> <p className="nopad">
Kill Leader:<br /> Kill Leader:<br />
<a href={"https://etherscan.io/address/" + this.props.leaderAddress} target="_blank"> {this.props.leaderKillCount > 0 && (
{this.shorten(this.props.leaderAddress)} <a href={"https://etherscan.io/address/" + this.props.leaderAddress} target="_blank">
</a> {this.shorten(this.props.leaderAddress)}
</p> </a>
<p className="nopad"> ) || "?"}
{this.props.leaderKillCount} kills
</p> </p>
{this.props.leaderKillCount > 0 && (
<p className="nopad">
{this.props.leaderKillCount} kills
</p>
)}
<hr /> <hr />
<p className="nopad"> <p className="nopad">
Active Unaboomers: {this.props.unaboomersRadicalized - this.props.unaboomersKilled} <br /> Active Unaboomers: {this.props.unaboomersRadicalized - this.props.unaboomersKilled} <br />
@ -464,10 +482,11 @@ function Section3(props) {
WTF WTF
</h1> </h1>
<p id="mintText"> <p id="mintText">
This is a chain based game. There is a max supply of {options.unaboomerMaxSupply} Unaboomer tokens (BOOMR) and an infinite supply of Mailbomb tokens (BOMB). This is a community-focused project with the first round being a chain based game to determine the entrants. There is a max supply of {options.unaboomerMaxSupply} Unaboomer tokens (BOOMR) and an infinite supply of Mailbomb tokens (BOMB).
Players will mint BOOMR and send BOMB to kill the other players. There is a pseudo-random element which may cause your bomb to malfuction, killing your own token.<br /><br /> Players will mint BOOMR and send BOMB to kill competing players. There is an element of randomness which may cause your bomb to be a dud, or worse, an accidental explosion, killing your token in the process.<br /><br />
This is the first round of the game in which we select the fiercest warriors to lead the decentralized revolution.
There will be up to {options.unaboomerMaxSurvivorCount} survivors. The round will conclude when the survivor count has been reached.<br /><br /> This is the first round of the game in which we select the entrants to lead the decentralized revolution.
There will be no more than {options.unaboomerMaxSurvivorCount} survivors. The round will conclude when the survivor count has been reached.<br /><br />
</p> </p>
<p> <p>
Godspeed. Godspeed.

Loading…
Cancel
Save