Add multiple icon support
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
import { ShowRealmFrameStore, selectedCharID } from "../../ts/stores";
|
import { ShowRealmFrameStore, selectedCharID } from "../../ts/stores";
|
||||||
import { PlusIcon, SmileIcon, TrashIcon, UserIcon, ActivityIcon, BookIcon, User, CurlyBraces, Volume2Icon } from 'lucide-svelte'
|
import { PlusIcon, SmileIcon, TrashIcon, UserIcon, ActivityIcon, BookIcon, User, CurlyBraces, Volume2Icon } from 'lucide-svelte'
|
||||||
import Check from "../UI/GUI/CheckInput.svelte";
|
import Check from "../UI/GUI/CheckInput.svelte";
|
||||||
import { addCharEmotion, addingEmotion, getCharImage, rmCharEmotion, selectCharImg, makeGroupImage, removeChar } from "../../ts/characters";
|
import { addCharEmotion, addingEmotion, getCharImage, rmCharEmotion, selectCharImg, makeGroupImage, removeChar, changeCharImage } from "../../ts/characters";
|
||||||
import LoreBook from "./LoreBook/LoreBookSetting.svelte";
|
import LoreBook from "./LoreBook/LoreBookSetting.svelte";
|
||||||
import { alertConfirm, alertNormal, alertSelectChar, alertTOS, showHypaV2Alert } from "../../ts/alert";
|
import { alertConfirm, alertNormal, alertSelectChar, alertTOS, showHypaV2Alert } from "../../ts/alert";
|
||||||
import BarIcon from "./BarIcon.svelte";
|
import BarIcon from "./BarIcon.svelte";
|
||||||
@@ -292,17 +292,43 @@
|
|||||||
{:else if subMenu === 1}
|
{:else if subMenu === 1}
|
||||||
<h2 class="mb-2 text-2xl font-bold mt-2">{language.characterDisplay}</h2>
|
<h2 class="mb-2 text-2xl font-bold mt-2">{language.characterDisplay}</h2>
|
||||||
<span class="text-textcolor mt-2 mb-2">{currentChar.type !== 'group' ? language.charIcon : language.groupIcon}</span>
|
<span class="text-textcolor mt-2 mb-2">{currentChar.type !== 'group' ? language.charIcon : language.groupIcon}</span>
|
||||||
<button on:click={async () => {await selectCharImg($selectedCharID);currentChar = currentChar}}>
|
{#if currentChar.type === 'group'}
|
||||||
{#if currentChar.data.image === ''}
|
<button on:click={async () => {await selectCharImg($selectedCharID);currentChar = currentChar}}>
|
||||||
<div class="rounded-md h-32 w-32 shadow-lg bg-textcolor2 cursor-pointer hover:text-green-500" />
|
{#await getCharImage(currentChar.data.image, 'css')}
|
||||||
{:else}
|
<div class="rounded-md h-24 w-24 shadow-lg bg-textcolor2 cursor-pointer ring"></div>
|
||||||
{#await getCharImage(currentChar.data.image, (currentChar.type === 'character' && currentChar.data.largePortrait) ? 'lgcss' : 'css')}
|
|
||||||
<div class="rounded-md h-32 w-32 shadow-lg bg-textcolor2 cursor-pointer hover:text-green-500"></div>
|
|
||||||
{:then im}
|
{:then im}
|
||||||
<div class="rounded-md h-32 w-32 shadow-lg bg-textcolor2 cursor-pointer hover:text-green-500" style={im} />
|
<div class="rounded-md h-24 w-24 shadow-lg bg-textcolor2 cursor-pointer ring" style={im} />
|
||||||
{/await}
|
{/await}
|
||||||
{/if}
|
</button>
|
||||||
</button>
|
{:else}
|
||||||
|
<div class="p-2 border-darkborderc border rounded-md flex flex-wrap gap-2">
|
||||||
|
{#if currentChar.data.image !== '' && currentChar.data.image}
|
||||||
|
<button>
|
||||||
|
{#await getCharImage(currentChar.data.image, currentChar.data.largePortrait ? 'lgcss' : 'css')}
|
||||||
|
<div class="rounded-md h-24 w-24 shadow-lg bg-textcolor2 cursor-pointer ring"></div>
|
||||||
|
{:then im}
|
||||||
|
<div class="rounded-md h-24 w-24 shadow-lg bg-textcolor2 cursor-pointer ring" style={im} />
|
||||||
|
{/await}
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
|
{#if currentChar.data.ccAssets}
|
||||||
|
{#each currentChar.data.ccAssets as assets, i}
|
||||||
|
<button on:click={async () => {changeCharImage($selectedCharID, i);currentChar = currentChar}}>
|
||||||
|
{#await getCharImage(assets.uri, currentChar.data.largePortrait ? 'lgcss' : 'css')}
|
||||||
|
<div class="rounded-md h-24 w-24 shadow-lg bg-textcolor2 cursor-pointer hover:ring transition-shadow"></div>
|
||||||
|
{:then im}
|
||||||
|
<div class="rounded-md h-24 w-24 shadow-lg bg-textcolor2 cursor-pointer hover:ring transition-shadow" style={im} />
|
||||||
|
{/await}
|
||||||
|
</button>
|
||||||
|
{/each}
|
||||||
|
{/if}
|
||||||
|
<button on:click={async () => {await selectCharImg($selectedCharID);currentChar = currentChar}}>
|
||||||
|
<div class="rounded-md h-24 w-24 cursor-pointer border-darkborderc border border-dashed flex justify-center items-center hover:border-blue-500">
|
||||||
|
<PlusIcon />
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
{#if currentChar.type === 'character' && currentChar.data.image !== ''}
|
{#if currentChar.type === 'character' && currentChar.data.image !== ''}
|
||||||
<div class="flex items-center mt-4">
|
<div class="flex items-center mt-4">
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ export async function getCharImage(loc:string, type:'plain'|'css'|'contain'|'lgc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function selectCharImg(charId:number) {
|
export async function selectCharImg(charIndex:number) {
|
||||||
const selected = await selectSingleFile(['png', 'webp', 'gif', 'jpg', 'jpeg'])
|
const selected = await selectSingleFile(['png', 'webp', 'gif', 'jpg', 'jpeg'])
|
||||||
if(!selected){
|
if(!selected){
|
||||||
return
|
return
|
||||||
@@ -80,7 +80,37 @@ export async function selectCharImg(charId:number) {
|
|||||||
const img = selected.data
|
const img = selected.data
|
||||||
let db = get(DataBase)
|
let db = get(DataBase)
|
||||||
const imgp = await saveImage(await reencodeImage(img))
|
const imgp = await saveImage(await reencodeImage(img))
|
||||||
db.characters[charId].image = imgp
|
dumpCharImage(charIndex)
|
||||||
|
db.characters[charIndex].image = imgp
|
||||||
|
setDatabase(db)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function dumpCharImage(charIndex:number) {
|
||||||
|
let db = get(DataBase)
|
||||||
|
const char = db.characters[charIndex] as character
|
||||||
|
if(!char.image || char.image === ''){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
char.ccAssets ??= []
|
||||||
|
char.ccAssets.push({
|
||||||
|
type: 'icon',
|
||||||
|
name: 'iconx',
|
||||||
|
uri: char.image,
|
||||||
|
ext: 'png'
|
||||||
|
})
|
||||||
|
char.image = ''
|
||||||
|
db.characters[charIndex] = char
|
||||||
|
setDatabase(db)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function changeCharImage(charIndex:number,changeIndex:number) {
|
||||||
|
let db = get(DataBase)
|
||||||
|
const char = db.characters[charIndex] as character
|
||||||
|
const image = char.ccAssets[changeIndex].uri
|
||||||
|
char.ccAssets.splice(changeIndex, 1)
|
||||||
|
dumpCharImage(charIndex)
|
||||||
|
char.image = image
|
||||||
|
db.characters[charIndex] = char
|
||||||
setDatabase(db)
|
setDatabase(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -807,6 +807,11 @@ export function getUnpargeables(db:Database, uptype:'basename'|'pure' = 'basenam
|
|||||||
addUnparge(vit)
|
addUnparge(vit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(cha.ccAssets){
|
||||||
|
for(const asset of cha.ccAssets){
|
||||||
|
addUnparge(asset.uri)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user