定点查看

This commit is contained in:
unanmed 2023-01-06 22:18:33 +08:00
parent ac55517d57
commit 36cf6150e4
10 changed files with 118 additions and 17 deletions

View File

@ -1247,6 +1247,14 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
case 72: // H打开帮助页面 case 72: // H打开帮助页面
core.useItem('I560', true); core.useItem('I560', true);
break; break;
case 75: // J定点查看
if (
core.getBlockCls(...flags.mouseLoc)?.startsWith('enemy')
) {
core.plugin.showFixed.value = false;
core.plugin.fixedDetailOpened.value = true;
}
break;
case 77: // M快速标记 case 77: // M快速标记
const [x, y] = flags.mouseLoc; const [x, y] = flags.mouseLoc;
const mx = Math.round(x + core.bigmap.offsetX / 32); const mx = Math.round(x + core.bigmap.offsetX / 32);

View File

@ -92,6 +92,10 @@ import { has, setCanvasSize } from '../plugin/utils';
import { debounce } from 'lodash'; import { debounce } from 'lodash';
import { isMobile } from '../plugin/use'; import { isMobile } from '../plugin/use';
const props = defineProps<{
fromBook?: boolean;
}>();
const critical = ref<HTMLCanvasElement>(); const critical = ref<HTMLCanvasElement>();
const def = ref<HTMLCanvasElement>(); const def = ref<HTMLCanvasElement>();
@ -173,15 +177,20 @@ function generateData(data: [number, number][]): ChartConfiguration['data'] {
} }
const update = debounce((atk: Chart, def: Chart) => { const update = debounce((atk: Chart, def: Chart) => {
const [x, y] = props.fromBook ? [void 0, void 0] : flags.mouseLoc;
allCri.value = getCriticalDamage( allCri.value = getCriticalDamage(
enemy, enemy,
addAtk.value * ratio, addAtk.value * ratio,
addDef.value * ratio addDef.value * ratio,
x,
y
); );
allDef.value = getDefDamage( allDef.value = getDefDamage(
enemy, enemy,
addDef.value * ratio, addDef.value * ratio,
addAtk.value * ratio addAtk.value * ratio,
x,
y
); );
if (allCri.value.length > originCri.length) originCri = allCri.value; if (allCri.value.length > originCri.length) originCri = allCri.value;
if (allDef.value.length > originDef.length) originDef = allDef.value; if (allDef.value.length > originDef.length) originDef = allDef.value;

View File

@ -48,7 +48,10 @@ export function getSpecialHint(enemy: Enemy & DetailedEnemy) {
export function getDefDamage( export function getDefDamage(
enemy: DetailedEnemy, enemy: DetailedEnemy,
addDef: number = 0, addDef: number = 0,
addAtk: number = 0 addAtk: number = 0,
x?: number,
y?: number,
floorId?: FloorIds
) { ) {
const ratio = core.status.thisMap.ratio; const ratio = core.status.thisMap.ratio;
const res: [number, number][] = []; const res: [number, number][] = [];
@ -59,10 +62,16 @@ export function getDefDamage(
const max = 100 - Math.floor(addDef / ratio); const max = 100 - Math.floor(addDef / ratio);
for (let i = 0; i <= max; i++) { for (let i = 0; i <= max; i++) {
const dam = core.getDamageInfo(enemy.id, { const dam = core.getDamageInfo(
def: core.getStatus('def') + ratio * i + addDef, enemy.id,
atk: core.getStatus('atk') + addAtk {
}); def: core.getStatus('def') + ratio * i + addDef,
atk: core.getStatus('atk') + addAtk
},
x,
y,
floorId
);
if (res.length === 0) { if (res.length === 0) {
origin = dam?.damage; origin = dam?.damage;
@ -88,7 +97,10 @@ export function getDefDamage(
export function getCriticalDamage( export function getCriticalDamage(
enemy: DetailedEnemy, enemy: DetailedEnemy,
addAtk: number = 0, addAtk: number = 0,
addDef: number = 0 addDef: number = 0,
x?: number,
y?: number,
floorId?: FloorIds
): [number, number][] { ): [number, number][] {
const ratio = core.status.thisMap.ratio; const ratio = core.status.thisMap.ratio;
const res: [number, number][] = []; const res: [number, number][] = [];
@ -99,10 +111,16 @@ export function getCriticalDamage(
const max = 100 - Math.floor(addAtk / ratio); const max = 100 - Math.floor(addAtk / ratio);
for (let i = 0; i <= max; i++) { for (let i = 0; i <= max; i++) {
const dam = core.getDamageInfo(enemy.id, { const dam = core.getDamageInfo(
atk: core.getStatus('atk') + ratio * i + addAtk, enemy.id,
def: core.getStatus('def') + addDef {
}); atk: core.getStatus('atk') + ratio * i + addAtk,
def: core.getStatus('def') + addDef
},
x,
y,
floorId
);
if (res.length === 0) { if (res.length === 0) {
origin = dam?.damage; origin = dam?.damage;

View File

@ -23,6 +23,10 @@ export default function init() {
showFixed.value = false; showFixed.value = false;
show(ev); show(ev);
}); });
return {
showFixed
};
} }
export function getDetailedEnemy<I extends EnemyIds>( export function getDetailedEnemy<I extends EnemyIds>(

View File

@ -8,6 +8,7 @@ import Desc from '../ui/desc.vue';
import Skill from '../ui/skill.vue'; import Skill from '../ui/skill.vue';
import SkillTree from '../ui/skillTree.vue'; import SkillTree from '../ui/skillTree.vue';
import Fly from '../ui/fly.vue'; import Fly from '../ui/fly.vue';
import FixedDetail from '../ui/fixedDetail.vue';
export const bookOpened = ref(false); export const bookOpened = ref(false);
export const toolOpened = ref(false); export const toolOpened = ref(false);
@ -19,6 +20,7 @@ export const skillOpened = ref(false);
export const skillTreeOpened = ref(false); export const skillTreeOpened = ref(false);
export const flyOpened = ref(false); export const flyOpened = ref(false);
export const showStudiedSkill = ref(false); export const showStudiedSkill = ref(false);
export const fixedDetailOpened = ref(false);
export const transition = ref(true); export const transition = ref(true);
export const noClosePanel = ref(false); export const noClosePanel = ref(false);
@ -34,7 +36,8 @@ const UI_LIST: [Ref<boolean>, Component][] = [
[descOpened, Desc], [descOpened, Desc],
[skillOpened, Skill], [skillOpened, Skill],
[skillTreeOpened, SkillTree], [skillTreeOpened, SkillTree],
[flyOpened, Fly] [flyOpened, Fly],
[fixedDetailOpened, FixedDetail]
]; ];
/** ui栈 */ /** ui栈 */
@ -69,7 +72,8 @@ export default function init() {
skillOpened, skillOpened,
skillTreeOpened, skillTreeOpened,
flyOpened, flyOpened,
showStudiedSkill showStudiedSkill,
fixedDetailOpened
}; };
} }

View File

@ -178,6 +178,12 @@ interface PluginUis {
/** 是否展示已学习的技能 */ /** 是否展示已学习的技能 */
readonly showStudiedSkill: Ref<boolean>; readonly showStudiedSkill: Ref<boolean>;
/** 定点查看是否打开 */
readonly fixedDetailOpened: Ref<boolean>;
/** 是否展示移动鼠标显示怪物信息的盒子 */
readonly showFixed: Ref<boolean>;
/** ui栈 */ /** ui栈 */
readonly uiStack: Ref<Component[]>; readonly uiStack: Ref<Component[]>;

View File

@ -30,7 +30,11 @@
</div> </div>
</Scroll> </Scroll>
</div> </div>
<BookDetail v-if="detail" @close="closeDetail()"></BookDetail> <BookDetail
v-if="detail"
:from-book="true"
@close="closeDetail()"
></BookDetail>
</template> </template>
<script setup lang="tsx"> <script setup lang="tsx">

View File

@ -10,7 +10,10 @@
</div> </div>
<Transition name="detail"> <Transition name="detail">
<EnemySpecial v-if="panel === 'special'"></EnemySpecial> <EnemySpecial v-if="panel === 'special'"></EnemySpecial>
<EnemyCritical v-else-if="panel === 'critical'"></EnemyCritical> <EnemyCritical
:from-book="fromBook"
v-else-if="panel === 'critical'"
></EnemyCritical>
<EnemyTarget v-else-if="panel === 'target'"></EnemyTarget> <EnemyTarget v-else-if="panel === 'target'"></EnemyTarget>
</Transition> </Transition>
<div id="detail-more"> <div id="detail-more">
@ -81,6 +84,10 @@ const panel = ref('special');
let detail: HTMLDivElement; let detail: HTMLDivElement;
const props = defineProps<{
fromBook?: boolean;
}>();
const emits = defineEmits<{ const emits = defineEmits<{
(e: 'close'): void; (e: 'close'): void;
}>(); }>();
@ -97,9 +104,15 @@ function close() {
} }
function key(e: KeyboardEvent) { function key(e: KeyboardEvent) {
if (keycode(e.keyCode) === KeyCode.Enter) { const c = keycode(e.keyCode);
if (c === KeyCode.Enter || c === KeyCode.Space || c === KeyCode.KeyC) {
close(); close();
} }
if (!props.fromBook) {
if (c === KeyCode.KeyX || c === KeyCode.Escape) {
close();
}
}
} }
onMounted(async () => { onMounted(async () => {

View File

@ -80,6 +80,7 @@ async function calHeight() {
vw = window.innerWidth; vw = window.innerWidth;
width.value = vh * 0.28; width.value = vh * 0.28;
await new Promise(res => requestAnimationFrame(res)); await new Promise(res => requestAnimationFrame(res));
if (!main) return;
main = document.getElementById('enemy-fixed') as HTMLDivElement; main = document.getElementById('enemy-fixed') as HTMLDivElement;
const style = getComputedStyle(main); const style = getComputedStyle(main);
const h = parseFloat(style.height); const h = parseFloat(style.height);

34
src/ui/fixedDetail.vue Normal file
View File

@ -0,0 +1,34 @@
<template>
<div id="fixed-detail">
<BookDetail :from-book="false" @close="close"></BookDetail>
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref } from 'vue';
import { getDetailedEnemy } from '../plugin/ui/fixed';
import BookDetail from './bookDetail.vue';
core.plugin.bookDetailPos = 0;
function close() {
core.plugin.fixedDetailOpened.value = false;
}
onMounted(() => {
const [x, y] = flags.mouseLoc;
const e = core.getBlockId(x, y);
if (!e || !core.getClsFromId(e)?.startsWith('enemy')) return;
const enemy = core.material.enemys[e as EnemyIds];
const detail = getDetailedEnemy(enemy, x, y);
core.plugin.bookDetailEnemy = detail;
core.plugin.bookDetailEnemy = getDetailedEnemy(enemy, x, y);
});
</script>
<style lang="less" scoped>
#fixed-detail {
width: 80%;
height: 100%;
}
</style>