add volume

This commit is contained in:
2026-09-10 12:26:21 +07:00
parent 7256a76935
commit d4dc2a39a9
44 changed files with 66 additions and 47 deletions
+16 -1
View File
@@ -59,6 +59,8 @@ const game = ref<Game>({
const screens = ref<ScreenState[]>([])
const mapItems = ref<MapItem[]>([])
const mapSaving = ref(false)
const screenVolume = ref(25)
const screenPosition = ref(0)
const mapScale = ref(1)
const mapOffset = ref({ x: 0, y: 0 })
let dragState: { item: MapItem; startX: number; startY: number; itemX: number; itemY: number } | undefined
@@ -219,7 +221,12 @@ async function sendScreenCommand(command: ScreenCommand) {
if (command === 'SCREEN_COMMAND_PLAY' || command === 'SCREEN_COMMAND_REPLAY') {
if (!window.confirm('Запустить медиа на всех экранах?')) return
}
const res = await client.SendScreenCommand({ gameId: Number(gameId), command, positionMs: 0, volume: 25 })
const res = await client.SendScreenCommand({
gameId: Number(gameId),
command,
positionMs: Math.max(0, Math.round(screenPosition.value * 1000)),
volume: Math.max(0, Math.min(100, Math.round(screenVolume.value))),
})
if (res.error != '') message.error(res.error || 'Не удалось выполнить команду экранов')
}
@@ -641,6 +648,14 @@ useSimplePolling(() => {
<n-button size="small" @click="sendScreenCommand('SCREEN_COMMAND_STOP')">Стоп</n-button>
<n-button size="small" @click="sendScreenCommand('SCREEN_COMMAND_REPLAY')">Повтор</n-button>
</n-space>
<n-space class="screen-mode-controls" align="center">
<n-text>Громкость</n-text>
<n-input-number v-model:value="screenVolume" :min="0" :max="100" :step="5" size="small" />
<n-button size="small" @click="sendScreenCommand('SCREEN_COMMAND_VOLUME')">Применить</n-button>
<n-text>Позиция, сек.</n-text>
<n-input-number v-model:value="screenPosition" :min="0" :step="5" size="small" />
<n-button size="small" @click="sendScreenCommand('SCREEN_COMMAND_SEEK')">Перемотать</n-button>
</n-space>
</div>
<div class="map-block">
+5 -1
View File
@@ -102,7 +102,11 @@ watch(state, async (value) => {
if (!media) return
media.currentTime = (value.positionMs || 0) / 1000
media.volume = Math.max(0, Math.min(1, (value.volume ?? 100) / 100))
if (value.command === 'SCREEN_COMMAND_PLAY' || value.command === 'SCREEN_COMMAND_RESUME' || value.command === 'SCREEN_COMMAND_REPLAY') {
if (value.command === 'SCREEN_COMMAND_SEEK') {
return
} else if (value.command === 'SCREEN_COMMAND_VOLUME') {
return
} else if (value.command === 'SCREEN_COMMAND_PLAY' || value.command === 'SCREEN_COMMAND_RESUME' || value.command === 'SCREEN_COMMAND_REPLAY') {
if (value.command === 'SCREEN_COMMAND_REPLAY') media.currentTime = 0
void media.play()
} else if (value.command === 'SCREEN_COMMAND_PAUSE') {