1
0
forked from noxious/client

#245 : Added color field to character hair

This commit is contained in:
Dennis Postma 2025-02-18 17:54:31 +01:00
parent db650449ac
commit 489c6c3ba0
3 changed files with 26 additions and 10 deletions

View File

@ -151,8 +151,9 @@ export type CharacterType = {
export type CharacterHair = { export type CharacterHair = {
id: string id: string
name: string name: string
sprite?: Sprite sprite: string | Sprite
gender: CharacterGender gender: CharacterGender
color: string
isSelectable: boolean isSelectable: boolean
} }

View File

@ -25,6 +25,21 @@
<option disabled selected value="">Select sprite</option> <option disabled selected value="">Select sprite</option>
<option v-for="sprite in assetManagerStore.spriteList" :key="sprite.id" :value="sprite.id">{{ sprite.name }}</option> <option v-for="sprite in assetManagerStore.spriteList" :key="sprite.id" :value="sprite.id">{{ sprite.name }}</option>
</select> </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> </div>
<button class="btn-cyan px-4 py-1.5 min-w-24" type="submit">Save</button> <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> <button class="btn-red px-4 py-1.5 min-w-24" type="button" @click.prevent="removeCharacterHair">Remove</button>
@ -34,11 +49,12 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import config from '@/application/config'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { CharacterGender, CharacterHair, Sprite } from '@/application/types' import type { CharacterGender, CharacterHair, Sprite } from '@/application/types'
import { downloadCache } from '@/application/utilities' import { downloadCache } from '@/application/utilities'
import { socketManager } from '@/managers/SocketManager' import { socketManager } from '@/managers/SocketManager'
import { CharacterHairStorage, TileStorage } from '@/storage/storages' import { CharacterHairStorage } from '@/storage/storages'
import { useAssetManagerStore } from '@/stores/assetManagerStore' import { useAssetManagerStore } from '@/stores/assetManagerStore'
import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue' import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
@ -48,18 +64,15 @@ const selectedCharacterHair = computed(() => assetManagerStore.selectedCharacter
const characterName = ref('') const characterName = ref('')
const characterGender = ref<CharacterGender>('MALE' as CharacterGender.MALE) const characterGender = ref<CharacterGender>('MALE' as CharacterGender.MALE)
const characterColor = ref<string>('#000000')
const characterIsSelectable = ref<boolean>(false) const characterIsSelectable = ref<boolean>(false)
const characterSpriteId = ref<string | null | undefined>(null) const characterSpriteId = ref<string | null | undefined>(null)
const genderOptions: CharacterGender[] = ['MALE' as CharacterGender.MALE, 'FEMALE' as CharacterGender.FEMALE] const genderOptions: CharacterGender[] = ['MALE' as CharacterGender.MALE, 'FEMALE' as CharacterGender.FEMALE]
if (!selectedCharacterHair.value) {
console.error('No character hair selected')
}
if (selectedCharacterHair.value) { if (selectedCharacterHair.value) {
characterName.value = selectedCharacterHair.value.name characterName.value = selectedCharacterHair.value.name
characterGender.value = selectedCharacterHair.value.gender characterGender.value = selectedCharacterHair.value.gender
characterColor.value = selectedCharacterHair.value.color
characterIsSelectable.value = selectedCharacterHair.value.isSelectable characterIsSelectable.value = selectedCharacterHair.value.isSelectable
characterSpriteId.value = selectedCharacterHair.value.sprite?.id characterSpriteId.value = selectedCharacterHair.value.sprite?.id
} }
@ -93,6 +106,7 @@ async function saveCharacterHair() {
id: selectedCharacterHair.value!.id, id: selectedCharacterHair.value!.id,
name: characterName.value, name: characterName.value,
gender: characterGender.value, gender: characterGender.value,
color: characterColor.value,
isSelectable: characterIsSelectable.value, isSelectable: characterIsSelectable.value,
spriteId: characterSpriteId.value spriteId: characterSpriteId.value
} }
@ -112,6 +126,7 @@ watch(selectedCharacterHair, (characterHair: CharacterHair | null) => {
if (!characterHair) return if (!characterHair) return
characterName.value = characterHair.name characterName.value = characterHair.name
characterGender.value = characterHair.gender characterGender.value = characterHair.gender
characterColor.value = characterHair.color
characterIsSelectable.value = characterHair.isSelectable characterIsSelectable.value = characterHair.isSelectable
characterSpriteId.value = characterHair.sprite?.id characterSpriteId.value = characterHair.sprite?.id
}) })

View File

@ -104,7 +104,7 @@ async function deleteSprite() {
return return
} }
await downloadCache('sprite', new SpriteStorage()) await downloadCache('sprites', new SpriteStorage())
await refreshSpriteList() await refreshSpriteList()
}) })
} }
@ -116,7 +116,7 @@ async function copySprite() {
return return
} }
await downloadCache('sprite', new SpriteStorage()) await downloadCache('sprites', new SpriteStorage())
await refreshSpriteList(false) await refreshSpriteList(false)
}) })
} }
@ -160,7 +160,7 @@ async function saveSprite() {
return return
} }
await downloadCache('sprite', new SpriteStorage()) await downloadCache('sprites', new SpriteStorage())
await refreshSpriteList(false) await refreshSpriteList(false)
}) })
} }