Worked on creating new characters

This commit is contained in:
Dennis Postma 2024-05-28 23:46:55 +02:00
parent da728a1fc6
commit 8cd0e9254a
9 changed files with 70 additions and 24 deletions

View File

@ -49,12 +49,12 @@ watch (() => zoneStore.tiles, () => { // @TODO : change to tiles for when loadin
// Load the zone from the server // Load the zone from the server
onBeforeMount(() => { onBeforeMount(() => {
socket.connection?.emit('character:connect'); socket.getConnection.emit('character:connect');
socket.connection?.emit('character:zone:load'); socket.getConnection.emit('character:zone:load');
}) })
// Listen for the zone event from the server and load the zone // Listen for the zone event from the server and load the zone
socket.connection?.on('character:zone:load', (data) => { socket.getConnection.on('character:zone:load', (data) => {
console.log('character:zone:load', data); console.log('character:zone:load', data);
zoneStore.loadTiles(data.zone.tiles) zoneStore.loadTiles(data.zone.tiles)
/** /**
@ -66,22 +66,22 @@ socket.connection?.on('character:zone:load', (data) => {
// console.log(data.players[1]); // key is user id // console.log(data.players[1]); // key is user id
// //
// // remove self from the players list // // remove self from the players list
// delete data.players[socket.connection?.id]; // delete data.players[socket.getConnection.id];
// //
// zoneStore.addPlayers(data.players); // zoneStore.addPlayers(data.players);
}) })
// Listen for player join events // Listen for player join events
socket.connection?.on('player_join', (data) => { socket.getConnection.on('player_join', (data) => {
console.log('player_join', data) console.log('player_join', data)
if (data.id === socket.connection?.id) { if (data.id === socket.getConnection.id) {
console.log('self'); console.log('self');
return; return;
} }
zoneStore.addPlayer(data); zoneStore.addPlayer(data);
}) })
socket.connection?.on('ping', (data) => { socket.getConnection.on('ping', (data) => {
console.log('ping', data) console.log('ping', data)
}) })

View File

@ -1,32 +1,42 @@
<template> <template>
<div> <div>
<!-- radio controls with characters that belongs to user in plain html -->
<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> <div>
<input type="radio" id="character1" name="character" value="character1"> <div v-for="character in characters" :key="character.id">
<label for="character1"> <input type="radio" :id="character.id" name="character" :value="character.id">
Weed <label :for="character.id">
</label> <img src="/assets/avatar/default/base_right_down.png" />
<input type="radio" id="character2" name="character" value="character2"> {{ character.name }}
<label for="character2">
Ethereal
</label> </label>
</div> </div>
</div>
<button>Play</button> <button>Play</button>
<hr>
<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 Create from '@/components/screens/partials/characters/Create.vue'
const socket = useSocketStore(); const socket = useSocketStore();
socket.connection.emit('characters:get'); const characters = ref([]);
socket.getConnection.emit('character:list');
socket.getConnection.on('character:list', (data: any) => {
console.log(data);
characters.value = data;
});
</script> </script>
<style lang="scss"> <style lang="scss">

View File

@ -28,7 +28,7 @@
<script setup> <script setup>
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
import { useSocketStore } from '@/stores/socket.ts' import { useSocketStore } from '@/stores/socket.ts'
import {login, register} from '@/services/authService' import {login, register} from '@/services/authentication.ts'
import { useCookies } from '@vueuse/integrations/useCookies' import { useCookies } from '@vueuse/integrations/useCookies'
const bgm = ref('bgm'); const bgm = ref('bgm');

View File

@ -0,0 +1,28 @@
<template>
<form method="post" @submit.prevent="create">
<h1>Create your character</h1>
<div>
<label for="name">Name</label>
<input v-model="name" type="text" name="name" id="name">
</div>
<div>
<button>Create</button>
</div>
</form>
</template>
<script setup lang="ts">
import { useSocketStore } from '@/stores/socket'
import { ref, defineEmits } from 'vue'
const socket = useSocketStore();
// const emit = defineEmits(['character:create']);
let name: any = ref('');
function create() {
socket.getConnection.emit('character:create', { name: name.value });
// emit('character:create');
name.value = '';
}
</script>

View File

@ -44,7 +44,7 @@ function onPointerClick(pointer: Phaser.Input.Pointer) {
position.x = worldPoint.x + config.tile_size.y; position.x = worldPoint.x + config.tile_size.y;
position.y = worldPoint.y; position.y = worldPoint.y;
socket.connection?.emit('move', { x: position.x, y: position.y }); socket.getConnection.emit('move', { x: position.x, y: position.y });
} }
//Directions for player sprites + animations //Directions for player sprites + animations
@ -57,14 +57,13 @@ function onPointerClick(pointer: Phaser.Input.Pointer) {
} else if (px > 0 && py < 0) { } else if (px > 0 && py < 0) {
console.log('top right'); console.log('top right');
} }
} }
if (!props.player) { if (!props.player) {
scene.input.on(Phaser.Input.Events.POINTER_UP, onPointerClick); scene.input.on(Phaser.Input.Events.POINTER_UP, onPointerClick);
} }
socket.connection?.on('player_moved', (data) => { socket.getConnection.on('player_moved', (data: any) => {
console.log('player_moved', data); console.log('player_moved', data);
if (data.id !== props.player?.id) { if (data.id !== props.player?.id) {

View File

@ -9,7 +9,7 @@ export const useSocketStore: StoreDefinition<any> = defineStore('socket', {
character: null as any, character: null as any,
}), }),
getters: { getters: {
getConnection: (state: any) => state.connection, getConnection: (state: any) => state.connection as Socket,
getCharacter: (state: any) => state.character, getCharacter: (state: any) => state.character,
}, },
actions: { actions: {

9
src/types/TCharacter.ts Normal file
View File

@ -0,0 +1,9 @@
import { z } from "zod";
const CharacterObject = z.object({
name: z.string(),
});
type TCharacter = z.infer<typeof CharacterObject>;
export { CharacterObject, type TCharacter };

View File

@ -4,6 +4,6 @@ const UserObject = z.object({
username: z.string(), username: z.string(),
}); });
type UserType = z.infer<typeof UserObject>; type TUser = z.infer<typeof UserObject>;
export { UserObject, type UserType }; export { UserObject, type TUser };