diff --git a/380.звуки.js b/380.звуки.js new file mode 100644 index 0000000..df1f623 --- /dev/null +++ b/380.звуки.js @@ -0,0 +1,65 @@ +function Звуки(ключники, события) { + this.создать = function() { + this.задано = {}; + this.загружено = {}; + события.подписать(this); + var тут = this; + ключники.push(function(ключ, путь, значение) { + тут.обработатьКлюч(ключ, путь, значение); + }); + }; + + this.обработатьКлюч = function(ключ, путь, значение) { + if (!путь[0].startsWith("звуки")) + { + return; + } + + var имя = путь[1]; + var свойство = путь.slice(2).join("."); + + if (!this.задано[имя]) + { + this.задано[имя] = {}; + } + this.задано[имя][свойство] = значение; + }; + + this.обработатьСобытие = function(событие) { + for (var имя in this.задано) + { + var значения = this.задано[имя]; + if (!значения.файл) + { + continue; + } + for (var свойство in значения) + { + if (свойство.startsWith("события")) + { + var значение = значения[свойство]; + if (событие == значение) + { + this.воспроизвести(значения.файл); + return; + } + } + } + } + }; + + this.воспроизвести = function(файл) + { + if (!this.загружено[файл]) + { + this.загружено[файл] = new Audio(файл); + } + var звук = this.загружено[файл]; + звук.pause(); + звук.currentTime = 0; + звук.play(); + }; + + // Конструктор. + this.создать(); +} diff --git a/700.пуск.js b/700.пуск.js index 237e958..768f1ea 100644 --- a/700.пуск.js +++ b/700.пуск.js @@ -11,4 +11,5 @@ // Запустить. мир.физика.создать(); мир.столкновения.создать(); +мир.звуки = new Звуки(мир.ключники, мир.события); мир.обновить(); diff --git a/800.пример.json.js b/800.пример.json.js index 7726408..8014510 100644 --- a/800.пример.json.js +++ b/800.пример.json.js @@ -414,11 +414,6 @@ function ПодкидываниеСтрелы() { мир.подкидываниеСтрелы = new ПодкидываниеСтрелы(); мир.подкидываниеСтрелы.завершить = function() { мир.подкидываниеСтрелы = null; - - /**/var audio = new Audio("р/звуки/543927__eminyildirim__pistol-gun-cocking.wav"); - /**/audio.play(); - /**/console.debug("воспроизвели аудио"); - }; @@ -431,7 +426,7 @@ function ОтладкаСобытий() { this.обработатьСобытие = function(событие) { if (событие == "закинули стрелу") { - console.debug("событие", событие); + //console.debug("событие", событие); } }; diff --git a/index.html b/index.html index f2fa94c..f0585d7 100644 --- a/index.html +++ b/index.html @@ -60,6 +60,7 @@ +