diff --git a/src/application/types.ts b/src/application/types.ts index 546151c..989dd01 100644 --- a/src/application/types.ts +++ b/src/application/types.ts @@ -151,8 +151,9 @@ export type CharacterType = { export type CharacterHair = { id: string name: string - sprite?: Sprite + sprite: string | Sprite gender: CharacterGender + color: string isSelectable: boolean } diff --git a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue index f277d4d..d1bfea9 100644 --- a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue +++ b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue @@ -25,6 +25,21 @@ <option disabled selected value="">Select sprite</option> <option v-for="sprite in assetManagerStore.spriteList" :key="sprite.id" :value="sprite.id">{{ sprite.name }}</option> </select> + <div v-if="characterSpriteId" class="mt-4 flex flex-col"> + <div class="mt-4 p-2.5 block rounded-md default-border bg-gray-800"> + <h3 class="text-white mb-2">Preview</h3> + <div class="flex items-center justify-center p-4 bg-gray-700 rounded"> + <img :src="config.server_endpoint + '/textures/sprites/' + characterSpriteId + '/front.png'" class="max-w-[200px] max-h-[200px] object-contain" /> + </div> + </div> + </div> + </div> + <div class="form-field-full"> + <div class="space-x-6 flex items-center"> + <label for="color">Color</label> + <input v-model="characterColor" class="input-field" type="text" name="color" placeholder="Character Hair Color" /> + <div class="h-[38px] w-[38px] rounded" :style="{ backgroundColor: characterColor }"></div> + </div> </div> <button class="btn-cyan px-4 py-1.5 min-w-24" type="submit">Save</button> <button class="btn-red px-4 py-1.5 min-w-24" type="button" @click.prevent="removeCharacterHair">Remove</button> @@ -34,11 +49,12 @@ </template> <script setup lang="ts"> +import config from '@/application/config' import { SocketEvent } from '@/application/enums' import type { CharacterGender, CharacterHair, Sprite } from '@/application/types' import { downloadCache } from '@/application/utilities' import { socketManager } from '@/managers/SocketManager' -import { CharacterHairStorage, TileStorage } from '@/storage/storages' +import { CharacterHairStorage } from '@/storage/storages' import { useAssetManagerStore } from '@/stores/assetManagerStore' import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue' @@ -48,18 +64,15 @@ const selectedCharacterHair = computed(() => assetManagerStore.selectedCharacter const characterName = ref('') const characterGender = ref<CharacterGender>('MALE' as CharacterGender.MALE) +const characterColor = ref<string>('#000000') const characterIsSelectable = ref<boolean>(false) const characterSpriteId = ref<string | null | undefined>(null) - const genderOptions: CharacterGender[] = ['MALE' as CharacterGender.MALE, 'FEMALE' as CharacterGender.FEMALE] -if (!selectedCharacterHair.value) { - console.error('No character hair selected') -} - if (selectedCharacterHair.value) { characterName.value = selectedCharacterHair.value.name characterGender.value = selectedCharacterHair.value.gender + characterColor.value = selectedCharacterHair.value.color characterIsSelectable.value = selectedCharacterHair.value.isSelectable characterSpriteId.value = selectedCharacterHair.value.sprite?.id } @@ -93,6 +106,7 @@ async function saveCharacterHair() { id: selectedCharacterHair.value!.id, name: characterName.value, gender: characterGender.value, + color: characterColor.value, isSelectable: characterIsSelectable.value, spriteId: characterSpriteId.value } @@ -112,6 +126,7 @@ watch(selectedCharacterHair, (characterHair: CharacterHair | null) => { if (!characterHair) return characterName.value = characterHair.name characterGender.value = characterHair.gender + characterColor.value = characterHair.color characterIsSelectable.value = characterHair.isSelectable characterSpriteId.value = characterHair.sprite?.id }) diff --git a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue index 9351fa6..6bf4d28 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue @@ -104,7 +104,7 @@ async function deleteSprite() { return } - await downloadCache('sprite', new SpriteStorage()) + await downloadCache('sprites', new SpriteStorage()) await refreshSpriteList() }) } @@ -116,7 +116,7 @@ async function copySprite() { return } - await downloadCache('sprite', new SpriteStorage()) + await downloadCache('sprites', new SpriteStorage()) await refreshSpriteList(false) }) } @@ -160,7 +160,7 @@ async function saveSprite() { return } - await downloadCache('sprite', new SpriteStorage()) + await downloadCache('sprites', new SpriteStorage()) await refreshSpriteList(false) }) }