prismarine-web-client/lib/menus/components/button.js
KalmeMarq ed011b07fd
UI reorganized and options (#257)
* added readme pt-pt

* ui reorganized, keybinds, foodbar, panorama, etc
2021-12-24 13:00:07 +01:00

140 lines
3 KiB
JavaScript

const { LitElement, html, css } = require('lit')
const audioContext = new window.AudioContext()
const sounds = {}
async function playSound (path) {
let volume = 1
const options = document.getElementById('options-screen')
if (options) {
volume = options.sound / 100
}
let soundBuffer = sounds[path]
if (!soundBuffer) {
const res = await window.fetch(path)
const data = await res.arrayBuffer()
soundBuffer = await audioContext.decodeAudioData(data)
sounds[path] = soundBuffer
}
const gainNode = audioContext.createGain()
const source = audioContext.createBufferSource()
source.buffer = soundBuffer
source.connect(gainNode)
gainNode.connect(audioContext.destination)
gainNode.gain.value = volume
source.start(0)
}
class Button extends LitElement {
static get styles () {
return css`
.button {
--txrV: 66px;
position: relative;
width: 200px;
height: 20px;
font-family: minecraft, mojangles, monospace;
font-size: 10px;
color: white;
text-shadow: 1px 1px #222;
border: none;
z-index: 1;
outline: none;
}
.button:hover,
.button:focus-visible {
--txrV: 86px;
}
.button:disabled {
--txrV: 46px;
color: #A0A0A0;
text-shadow: 1px 1px #111;
}
.button::after {
content: '';
display: block;
position: absolute;
top: 0;
left: 0;
width: 50%;
height: 20px;
background: url('textures/1.17.1/gui/widgets.png');
background-size: 256px;
background-position-y: calc(var(--txrV) * -1);
z-index: -1;
}
.button::before {
content: '';
display: block;
position: absolute;
top: 0;
left: 50%;
width: 50%;
height: 20px;
background: url('textures/1.17.1/gui/widgets.png');
background-size: 256px;
background-position-x: calc(-200px + 100%);
background-position-y: calc(var(--txrV) * -1);
z-index: -1;
}
`
}
static get properties () {
return {
label: {
type: String,
attribute: 'pmui-label'
},
width: {
type: String,
attribute: 'pmui-width'
},
disabled: {
type: Boolean,
attribute: 'pmui-disabled'
},
onPress: {
type: Function,
attribute: 'pmui-click'
}
}
}
constructor () {
super()
this.label = ''
this.disabled = false
this.width = '200px'
this.onPress = () => {}
}
render () {
return html`
<button
class="button"
?disabled=${this.disabled}
@click=${this.onBtnClick}
style="width: ${this.width};"
>
${this.label}
</button>`
}
onBtnClick () {
playSound('click_stereo.ogg')
this.dispatchEvent(new window.CustomEvent('pmui-click'))
}
}
window.customElements.define('pmui-button', Button)
const _playSound = playSound
export { _playSound as playSound }