generated from VLADIMIR/template_frontend
add volume
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -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') {
|
||||
|
||||
Reference in New Issue
Block a user