1
0
forked from noxious/client

Character mirror

This commit is contained in:
Justus Walter-Helk 2024-05-30 12:55:41 +02:00
parent 220c7a1d9c
commit 838092be50
2 changed files with 74 additions and 35 deletions

View File

@ -1,11 +1,18 @@
<template> <template>
<div> <div>
<div id="characters-wrapper"> <div id="characters-wrapper">
<div id="characters"> <div id="characters">
<h1>Select your character</h1> <h1>Select your character</h1>
<div id="list"> <div id="list">
<div v-for="character in characters" :key="character.id"> <div v-for="character in characters" :key="character.id">
<input type="radio" :id="character.id" name="character" :value="character.id"> <input
type="radio"
:id="character.id"
name="character"
:value="character.id"
v-model="selectedCharacterId"
@change="characterSelected"
/>
<label :for="character.id"> <label :for="character.id">
{{ character.name }} {{ character.name }}
<img src="/assets/avatar/default/base_right_down.png" /> <img src="/assets/avatar/default/base_right_down.png" />
@ -13,30 +20,58 @@
</div> </div>
</div> </div>
<button>Play</button> <button @click="onPlayButton">Play</button>
<hr> <hr />
<Create /> <Create />
</div> </div>
</div> </div>
</div>
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { useSocketStore } from '@/stores/socket' import { useSocketStore } from '@/stores/socket'
import { ref } from 'vue' import { ref } from 'vue'
import Create from '@/components/screens/partials/characters/Create.vue' import Create from '@/components/screens/partials/characters/Create.vue'
import { usePlayerStore } from '@/stores/player'
const socket = useSocketStore(); const socket = useSocketStore()
const characters = ref([]); const characters = ref([])
socket.getConnection.emit('character:list'); const selectedCharacterId = ref<number | null>(null)
socket.getConnection.emit('character:list')
socket.getConnection.on('character:list', (data: any) => { socket.getConnection.on('character:list', (data: any) => {
console.log(data); console.log(data)
characters.value = data; characters.value = data
}); })
//Get selected character
const characterSelected = () => {
const selectedCharacter = characters.value.find(
(character) => character.id === selectedCharacterId.value
)
if (selectedCharacter) {
console.log(`Selected character ID: ${selectedCharacterId.value}`)
console.log(`Selected character name: ${selectedCharacter.name}`)
}
}
const onPlayButton = () => {
if (selectedCharacterId.value !== null) {
//Store locally
usePlayerStore().setCharacter(selectedCharacterId.value)
//Send to server
socket.getConnection.emit('character:playselected', {
characterId: selectedCharacterId.value,
playerId: usePlayerStore().player?.id,
playerUsername: usePlayerStore().player?.username
})
} else {
alert('Please select a valid character!')
}
}
</script> </script>
<style lang="scss"> <style lang="scss">
@ -50,9 +85,9 @@ socket.getConnection.on('character:list', (data: any) => {
} }
#characters { #characters {
background: #FFFFFF; background: #ffffff;
padding:30px; padding: 30px;
color:black; color: black;
} }
#list { #list {
@ -66,7 +101,7 @@ socket.getConnection.on('character:list', (data: any) => {
} }
// hide the radio buttons // hide the radio buttons
input[type="radio"] { input[type='radio'] {
display: none; display: none;
} }
@ -79,7 +114,7 @@ socket.getConnection.on('character:list', (data: any) => {
} }
// for selected radio, give bg color // for selected radio, give bg color
input[type="radio"]:checked + label { input[type='radio']:checked + label {
background: #ff0000; background: #ff0000;
padding: 5px; padding: 5px;
} }

View File

@ -1,14 +1,18 @@
import { defineStore } from 'pinia'; import { defineStore } from 'pinia'
import Player from '@/engine/Player/Player' import Player from '@/engine/Player/Player'
export const usePlayerStore = defineStore('player', { export const usePlayerStore = defineStore('player', {
state: () => ({ state: () => ({
player: null as Player | null, player: null as Player | null,
character: null as integer | null //Saving the character ID???
}), }),
actions: { actions: {
setPlayer(player: Player) { setPlayer(player: Player) {
this.player = player; this.player = player
}, },
setCharacter(character: integer) {
this.character = character
} }
}); }
})