添加觉醒绑定

This commit is contained in:
2025-04-17 18:47:32 +08:00
parent 9e9d18c7cf
commit 7360031728
9 changed files with 85 additions and 26 deletions
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -14,10 +14,15 @@ export default defineComponent({
type: Object as PropType<Record<string, { lv: number }>>, type: Object as PropType<Record<string, { lv: number }>>,
default: () => ({}), default: () => ({}),
}, },
bindAwake: {
type: Number,
default: ()=>50,
},
}, },
setup(props) { setup(props) {
const skills = computed(() => props.skills) const skills = computed(() => props.skills)
const lvInfo = useVModel(props, 'lvInfo') const lvInfo = useVModel(props, 'lvInfo')
const bindAwake = useVModel(props, 'bindAwake')
const getSkill = (lvStart: number, lvEnd: number, position: number) => { const getSkill = (lvStart: number, lvEnd: number, position: number) => {
if (position >= 0) if (position >= 0)
@@ -48,6 +53,13 @@ export default defineComponent({
else activeSkill.value = skill.id else activeSkill.value = skill.id
} }
const awakeSkill_1 = computed(() =>
skills.value.find((item) => item.learnLv == 50 && item.type == 'active'),
)
const awakeSkill_2 = computed(() =>
skills.value.find((item) => item.learnLv == 85 && item.type == 'active'),
)
const actionSkillLv = (skill: ISkill, operation: string) => { const actionSkillLv = (skill: ISkill, operation: string) => {
if (operation == 'add') { if (operation == 'add') {
lvInfo.value[skill.id.toString()] = { lvInfo.value[skill.id.toString()] = {
@@ -71,6 +83,11 @@ export default defineComponent({
} }
} }
const chooseBindAwake = (lv:number) => {
bindAwake.value = lv
console.log(bindAwake.value,lv)
}
const renderSkill = (skill: ISkill, index: number) => { const renderSkill = (skill: ISkill, index: number) => {
const info = lvInfo.value?.[skill.id.toString()] const info = lvInfo.value?.[skill.id.toString()]
let color = 'white' let color = 'white'
@@ -81,7 +98,7 @@ export default defineComponent({
<div class="relative w-35px h-55px"> <div class="relative w-35px h-55px">
{activeSkill.value == skill.id && renderSkillAction(skill)} {activeSkill.value == skill.id && renderSkillAction(skill)}
<div <div
class="w-34px absolute h-auto flex flex-col gap-2px py-2px items-center bg-#2c2d2c rounded-2px z-2 top-1px left-1px" class={["w-36px absolute h-48px flex flex-col box-border items-center py-3px z-2",skill.learnLv == 100 ? '' : 'skill']}
onClick={(e) => { onClick={(e) => {
e.stopPropagation() e.stopPropagation()
chooseSkill(skill) chooseSkill(skill)
@@ -94,16 +111,33 @@ export default defineComponent({
key={index} key={index}
> >
<img <img
class={['h-30px w-30px', skill.type === 'passive' ? 'passive' : '']} class={['h-28px w-28px', skill.type === 'passive' ? 'passive' : '']}
src={getImageURL(skill.icon)} src={getImageURL(skill.icon)}
></img> ></img>
<div <div class="w-100% flex items-center justify-center" style={{ color }}>
class="w-30px mx-2px bg-black flex items-center justify-center rounded-2px"
style={{ color }}
>
{info?.lv ?? 0} {info?.lv ?? 0}
</div> </div>
</div> </div>
{skill.learnLv == 100 && (
<>
<div class={`pos-absolute w-196px h-54px box-border translate-x--50% left-18px top--3px flex justify-between items-center py-2px px-3px awake_${bindAwake.value}`}>
<div class="w-36px flex flex-col box-border items-center py-2px z-2" onClick={()=>chooseBindAwake(50)}>
<img
class="h-28px w-28px mt-2px"
src={getImageURL(awakeSkill_1.value?.icon ?? '')}
></img>
<div class="w-100% mt-1px flex items-center justify-center text-#ffc701">1次</div>
</div>
<div class="w-36px flex flex-col box-border items-center py-2px z-2" onClick={()=>chooseBindAwake(85)}>
<img
class="h-28px w-28px mt-1px"
src={getImageURL(awakeSkill_2.value?.icon ?? '')}
></img>
<div class="w-100% mt-1px flex items-center justify-center text-#ffc701">2次</div>
</div>
</div>
</>
)}
</div> </div>
</> </>
) )
@@ -112,10 +146,8 @@ export default defineComponent({
const renderSkillAction = (skill: ISkill) => ( const renderSkillAction = (skill: ISkill) => (
<> <>
<> <>
<div class="absolute"> <div class="absolute skill-active w-88px h-78px translate-x--50% left-16px top--1px">
<div class="w-36px h-55px bg-gradient-linear bg-gradient-[180deg,#f8e26c_0%,#f87c43_94.34%] z-1"></div> <div class="flex justify-between px-5px relative top-55px">
<div class="bottom--5px relative z-5 transform -translate-x-1/4 border-1px border-solid border-black left--2">
<div class="flex gap-1 bg-gradient-linear bg-gradient-[180deg,#351d14_0%,#070507_100%] p-1 border-solid border-#9A6329 border-1px">
<img <img
src={`${new URL('./img/min.svg', import.meta.url).href}`} src={`${new URL('./img/min.svg', import.meta.url).href}`}
onClick={(e: Event) => { onClick={(e: Event) => {
@@ -145,7 +177,6 @@ export default defineComponent({
}} }}
></img> ></img>
</div> </div>
</div>
</div> </div>
</> </>
</> </>
@@ -167,20 +198,24 @@ export default defineComponent({
</> </>
)} )}
{lvList.map((lv, index) => ((getSkill(lv, lvList[index + 1] ?? 150, -1) as ISkill[])?.length ?? 0) > 0 ?( {lvList.map((lv, index) =>
<div class="skill-tree-line flex items-center gap-10px px-10px" key={index}> ((getSkill(lv, lvList[index + 1] ?? 150, -1) as ISkill[])?.length ?? 0) > 0 ? (
{lv == 1 || lv % 10 == 0 ? ( <div class="skill-tree-line flex items-center gap-10px px-10px" key={index}>
<div class="w-34px h-34px flex items-center justify-center text-white">{lv}</div> {lv == 1 || lv % 10 == 0 ? (
) : ( <div class="w-34px h-34px flex items-center justify-center text-white">{lv}</div>
<div class="w-34px h-34px"></div> ) : (
)} <div class="w-34px h-34px"></div>
{columns.map((column, i) => { )}
const skill = getSkill(lv, lvList[index + 1] ?? 150, column) as ISkill {columns.map((column, i) => {
return skill ? renderSkill(skill, index) : <div class="w-34px h-34px"></div> const skill = getSkill(lv, lvList[index + 1] ?? 150, column) as ISkill
})} return skill ? renderSkill(skill, index) : <div class="w-34px h-34px"></div>
<div class="w-20px h-34px" onClick={() => (activeSkill.value = -1)}></div> })}
</div> <div class="w-20px h-34px" onClick={() => (activeSkill.value = -1)}></div>
):(<></>))} </div>
) : (
<></>
),
)}
</div> </div>
</> </>
) )
@@ -12,3 +12,23 @@
.passive { .passive {
filter: grayscale(100%) invert(3%) sepia(14%) saturate(874%) hue-rotate(65deg) brightness(105%) contrast(102%); filter: grayscale(100%) invert(3%) sepia(14%) saturate(874%) hue-rotate(65deg) brightness(105%) contrast(102%);
} }
.skill{
background-image: url('./img/skill.png');
background-size: 100% 100%;
}
.skill-active{
background-image: url('./img/skillActive.png');
background-size: 100% 100%;
}
.awake_50{
background-image: url('./img/awake_50.png');
background-size: 100% 100%;
}
.awake_85{
background-image: url('./img/awake_85.png');
background-size: 100% 100%;
}
+1 -1
View File
@@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<div class="h-90vh w-auto overflow-y-auto overflow-x-hidden"> <div class="h-90vh w-auto overflow-y-auto overflow-x-hidden">
<SkillTree :skills="infoStore.skills" :lvInfo="configStore.config?.skills"></SkillTree> <SkillTree :skills="infoStore.skills" v-model:lvInfo="configStore.config.skills" v-model:bindAwake="configStore.config.bindAwake"></SkillTree>
</div> </div>
</div> </div>
</template> </template>
+4
View File
@@ -51,6 +51,7 @@ export interface IConfig {
} }
> >
sundry: Record<string, any> sundry: Record<string, any>
bindAwake: number
} }
const defaultEqusConfig = { const defaultEqusConfig = {
@@ -82,6 +83,7 @@ export const useConfigStore = defineStore('configStore', () => {
jades: {}, jades: {},
avatar: {}, avatar: {},
sundry: {}, sundry: {},
bindAwake: 50
}) })
const skillCountConfig = ref<IResultSkillCount[]>([]) const skillCountConfig = ref<IResultSkillCount[]>([])
@@ -107,12 +109,14 @@ export const useConfigStore = defineStore('configStore', () => {
jades: {}, jades: {},
avatar: {}, avatar: {},
sundry: {}, sundry: {},
bindAwake: 50
} }
if (!config.value?.equips) config.value.equips = {} if (!config.value?.equips) config.value.equips = {}
if (!config.value?.skills) config.value.skills = {} if (!config.value?.skills) config.value.skills = {}
if (!config.value?.jades) config.value.jades = {} if (!config.value?.jades) config.value.jades = {}
if (!config.value?.avatar) config.value.avatar = {} if (!config.value?.avatar) config.value.avatar = {}
if (!config.value?.sundry) config.value.sundry = {} if (!config.value?.sundry) config.value.sundry = {}
if (!config.value?.bindAwake) config.value.bindAwake = 50
const part = [...infoStore.parts, '宠物', '副武器'].filter( const part = [...infoStore.parts, '宠物', '副武器'].filter(
(a) => !config.value?.equips.hasOwnProperty(a), (a) => !config.value?.equips.hasOwnProperty(a),