From da70e54452893b5eab3a5e8768caefd3de07b65a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9A=D0=B0=D0=BF?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BA=D0=BE?= Date: Wed, 25 Aug 2021 14:37:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BC=D0=B8=D0=B3=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=205=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 340.слежение.js | 133 --------------------------------------- 800.пример.json.js | 39 ++++++++++-- 2 files changed, 33 insertions(+), 139 deletions(-) delete mode 100644 340.слежение.js diff --git a/340.слежение.js b/340.слежение.js deleted file mode 100644 index 5bab23f..0000000 --- a/340.слежение.js +++ /dev/null @@ -1,133 +0,0 @@ -мир.слежение = { - умолчание: { - смещение: [0, 0], - скорость: 1, - }, - задано: {}, -}; - - -// // // // - - -мир.ключники.push(function(ключ, путь, значение){ - if (!путь[0].startsWith("слежение")) - { - return; - } - - var имя = путь[1]; - var свойство = путь.slice(2).join("."); - - if (!мир.слежение.задано[имя]) - { - мир.слежение.задано[имя] = {}; - } - мир.слежение.задано[имя][свойство] = значение; -}); - - -// // // // - - -мир.слежение.обновить = function() -{ - var за = мир.слежение.задано; - var ум = мир.слежение.умолчание; - - for (var имя in за) - { - var тело = null; - var имяТела = за[имя]["объект"]; - if (имяТела) - { - тело = мир.объекты.тела[имяТела]; - } - - var эл = null; - var формула = null; - if (имя == "камера") - { - эл = document.getElementById("корень"); - формула = function(x, y) - { - return [ - window.innerWidth / 2 - x, - window.innerHeight / 2 - y, - ]; - }; - } - else - { - эл = мир.слежение.элемент(за[имя]); - } - мир.слежение.обновитьЭлемент(эл, тело, за[имя], ум, формула); - } -}; - - -// // // // - - -мир.слежение.элемент = function(задано) -{ - var id = null; - var изображение = задано["изображение"]; - if (изображение) - { - id = мир.изображения.элементы[изображение].id; - } - return document.getElementById(id); -}; - - -// // // // - - -мир.слежение.обновитьЭлемент = function(элемент, тело, задано, умолчание, формула) -{ - if (!элемент || !тело) - { - return; - } - var скорость = задано.скорость ? задано.скорость : умолчание.скорость; - var смещениеX = задано["смещение.0"] ? задано["смещение.0"] : умолчание.смещение[0]; - var смещениеY = задано["смещение.1"] ? задано["смещение.1"] : умолчание.смещение[1]; - - // Сейчас. - var x0 = 0; - if (элемент.style.left.endsWith("px")) - { - x0 = элемент.style.left.slice(0, -2); - } - var y0 = 0; - if (элемент.style.top.endsWith("px")) - { - y0 = элемент.style.top.slice(0, -2); - } - // Цель. - var x1 = тело.position.x + смещениеX; - var y1 = тело.position.y + смещениеY; - // Более точная настройка. - // Сейчас лишь для камеры. - if (формула) - { - var итог = формула(x1, y1); - x1 = итог[0]; - y1 = итог[1]; - } - // Плавно. - function lerp(v0, v1, t) { - // Убираем мельтешение. - var delta = Math.abs(v0 - v1); - if (delta < 1) { - return v0; - } - return v0 * (1 - t) + v1 * t; - } - var x = lerp(x0, x1, скорость); - var y = lerp(y0, y1, скорость); - - элемент.style.left = `${x}px`; - элемент.style.top = `${y}px`; -}; diff --git a/800.пример.json.js b/800.пример.json.js index 3a4b495..a397887 100644 --- a/800.пример.json.js +++ b/800.пример.json.js @@ -510,7 +510,7 @@ function ОтладкаСобытий() { this.обработатьСобытие = function(событие) { if (событие.startsWith("игрокПаук")) { -console.debug("событие", событие); +//console.debug("событие", событие); } }; @@ -570,7 +570,7 @@ function ПовреждениеИгрока(события, колобок) { события.подписать(this); this.создатьМигание(); - this.мигаем = false; + this.повреждение = null; }; this.создатьМигание = function() @@ -597,12 +597,39 @@ function ПовреждениеИгрока(события, колобок) { if (событие.startsWith("игрокПаук")) { - if (this.мигаем) - { - return; - } + this.повредить(); + } + }; + + this.повредить = function() + { + if (!this.повреждение) + { колобок.classList.add("мигание"); } + this.повреждение = new Date(); + var тут = this; + setTimeout( + function() { тут.возможноПрекратить() }, + 5000 + ); + + }; + + this.возможноПрекратить = function() + { + if (!this.повреждение) + { + return; + } + + var сейчас = new Date(); + var прошло = сейчас - this.повреждение; + if (прошло > 4990) + { + колобок.classList.remove("мигание") + this.повреждение = null; + } }; // Конструктор.