Skip to content

Commit 3bda029

Browse files
Optimize message display
1 parent 9ea2998 commit 3bda029

File tree

3 files changed

+40
-21
lines changed

3 files changed

+40
-21
lines changed

src/cubism5/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { LAppModel } from '@demo/lappmodel.js';
77
import { LAppPal } from '@demo/lapppal';
88
import logger from '../logger.js';
99

10+
LAppPal.printMessage = () => {};
11+
1012
// Custom subdelegate class, responsible for Canvas-related initialization and rendering management
1113
class AppSubdelegate extends LAppSubdelegate {
1214
/**

src/message.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,29 +25,35 @@ let messageTimer: NodeJS.Timeout | null = null;
2525
* @param {string | string[]} text - Message text or array of texts.
2626
* @param {number} timeout - Timeout for message display (ms).
2727
* @param {number} priority - Priority of the message.
28+
* @param {boolean} [override=true] - Whether to override existing message.
2829
*/
2930
function showMessage(
3031
text: string | string[],
3132
timeout: number,
3233
priority: number,
34+
override: boolean = true
3335
) {
36+
let currentPriority = parseInt(sessionStorage.getItem('waifu-message-priority'), 10);
37+
if (isNaN(currentPriority)) {
38+
currentPriority = 0;
39+
}
3440
if (
3541
!text ||
36-
(sessionStorage.getItem('waifu-text') &&
37-
Number(sessionStorage.getItem('waifu-text')) > priority)
42+
(override && currentPriority > priority) ||
43+
(!override && currentPriority >= priority)
3844
)
3945
return;
4046
if (messageTimer) {
4147
clearTimeout(messageTimer);
4248
messageTimer = null;
4349
}
4450
text = randomSelection(text) as string;
45-
sessionStorage.setItem('waifu-text', String(priority));
51+
sessionStorage.setItem('waifu-message-priority', String(priority));
4652
const tips = document.getElementById('waifu-tips')!;
4753
tips.innerHTML = text;
4854
tips.classList.add('waifu-tips-active');
4955
messageTimer = setTimeout(() => {
50-
sessionStorage.removeItem('waifu-text');
56+
sessionStorage.removeItem('waifu-message-priority');
5157
tips.classList.remove('waifu-tips-active');
5258
}, timeout);
5359
}

src/widget.ts

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ interface Tips {
4343
hitokoto: string;
4444
welcome: string;
4545
referrer: string;
46+
hoverBody: string;
47+
tapBody: string;
4648
};
4749
/**
4850
* Time configuration.
@@ -85,6 +87,21 @@ function registerEventListener(tips: Tips) {
8587
let userAction = false;
8688
let userActionTimer: any;
8789
const messageArray = tips.message.default;
90+
tips.seasons.forEach(({ date, text }) => {
91+
const now = new Date(),
92+
after = date.split('-')[0],
93+
before = date.split('-')[1] || after;
94+
if (
95+
Number(after.split('/')[0]) <= now.getMonth() + 1 &&
96+
now.getMonth() + 1 <= Number(before.split('/')[0]) &&
97+
Number(after.split('/')[1]) <= now.getDate() &&
98+
now.getDate() <= Number(before.split('/')[1])
99+
) {
100+
text = randomSelection(text);
101+
text = (text as string).replace('{year}', String(now.getFullYear()));
102+
messageArray.push(text);
103+
}
104+
});
88105
let lastHoverElement: any;
89106
window.addEventListener('mousemove', () => (userAction = true));
90107
window.addEventListener('keydown', () => (userAction = true));
@@ -99,7 +116,7 @@ function registerEventListener(tips: Tips) {
99116
}, 20000);
100117
}
101118
}, 1000);
102-
showMessage(welcomeMessage(tips.time, tips.message.welcome, tips.message.referrer), 7000, 11);
119+
103120
window.addEventListener('mouseover', (event) => {
104121
// eslint-disable-next-line prefer-const
105122
for (let { selector, text } of tips.mouseover) {
@@ -128,23 +145,16 @@ function registerEventListener(tips: Tips) {
128145
return;
129146
}
130147
});
131-
tips.seasons.forEach(({ date, text }) => {
132-
const now = new Date(),
133-
after = date.split('-')[0],
134-
before = date.split('-')[1] || after;
135-
if (
136-
Number(after.split('/')[0]) <= now.getMonth() + 1 &&
137-
now.getMonth() + 1 <= Number(before.split('/')[0]) &&
138-
Number(after.split('/')[1]) <= now.getDate() &&
139-
now.getDate() <= Number(before.split('/')[1])
140-
) {
141-
text = randomSelection(text);
142-
text = (text as string).replace('{year}', String(now.getFullYear()));
143-
messageArray.push(text);
144-
}
148+
window.addEventListener('live2d:hoverbody', () => {
149+
const text = randomSelection(tips.message.hoverBody);
150+
showMessage(text, 4000, 8, false);
151+
});
152+
window.addEventListener('live2d:tapbody', () => {
153+
const text = randomSelection(tips.message.tapBody);
154+
showMessage(text, 4000, 9);
145155
});
146156

147-
const devtools = () => { };
157+
const devtools = () => {};
148158
console.log('%c', devtools);
149159
devtools.toString = () => {
150160
showMessage(tips.message.console, 6000, 9);
@@ -164,7 +174,7 @@ function registerEventListener(tips: Tips) {
164174
*/
165175
async function loadWidget(config: Config) {
166176
localStorage.removeItem('waifu-display');
167-
sessionStorage.removeItem('waifu-text');
177+
sessionStorage.removeItem('waifu-message-priority');
168178
document.body.insertAdjacentHTML(
169179
'beforeend',
170180
`<div id="waifu">
@@ -182,6 +192,7 @@ async function loadWidget(config: Config) {
182192
tips = await response.json();
183193
models = tips.models;
184194
registerEventListener(tips);
195+
showMessage(welcomeMessage(tips.time, tips.message.welcome, tips.message.referrer), 7000, 11);
185196
}
186197
const model = await ModelManager.initCheck(config, models);
187198
await model.loadModel('');

0 commit comments

Comments
 (0)