diff --git a/800.пример.json.js b/800.пример.json.js index 073aaa2..b81f6e9 100644 --- a/800.пример.json.js +++ b/800.пример.json.js @@ -267,26 +267,6 @@ // Подкидывание стрелы // // // // -function ПодкидываниеСтрелы(мир) { - this.создать = function() { - мир.события.подписать(this); - }; - - this.обработатьСобытие = function(событие) { -console.debug("ИГР ПодкидываниеС.обработатьС", событие); - }; - - // Конструктор. - this.создать(); -} - -мир.подстр = new ПодкидываниеСтрелы(мир); - -мир.подкидываниеСтрелы = { - сенсор: null, - стрела: null, - подкинули: false, -}; мир.разобрать({ объекты: { @@ -343,43 +323,6 @@ console.debug("ИГР ПодкидываниеС.обработатьС", соб событие: "сенсор стрелы", }, }, - действия: { - сенсорСтрелы: [ - () => { - мир.подкидываниеСтрелы.сенсор = мир.физика.движок.timing.timestamp; - }, - "подкинутьСтрелу", - ], - игрокНачалПрыжок: [ - () => { - мир.подкидываниеСтрелы.сенсор = null; - мир.подкидываниеСтрелы.стрела = null; - мир.подкидываниеСтрелы.подкинули = false; - }, - ], - игрокПриземлился: [ - () => { мир.подкидываниеСтрелы.стрела = мир.физика.движок.timing.timestamp; }, - "подкинутьСтрелу", - ], - подкинутьСтрелу: [ - () => { - if ( - мир.подкидываниеСтрелы.подкинули || - !мир.подкидываниеСтрелы.стрела || - !мир.подкидываниеСтрелы.сенсор || - Math.abs(мир.подкидываниеСтрелы.стрела - мир.подкидываниеСтрелы.сенсор) > 0.00001 || - Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001 - ) { - return; - } - мир.подкидываниеСтрелы.подкинули = true; - Matter.Body.setVelocity( - мир.объекты.тела.стрела, - { x: 0, y: -мир.игрок.приземление.скорость * 1.2 } - ); - }, - ], - }, маскиПрыжков: { стрела: { объект: "стрела", @@ -388,3 +331,68 @@ console.debug("ИГР ПодкидываниеС.обработатьС", соб }, }, }); + +function ПодкидываниеСтрелы() { + this.создать = function() { + this.времяСтрелы = null; + this.времяПриземления = null; + this.подкинули = false; + this.закинули = null; + + мир.события.подписать(this); + }; + + this.обработатьСобытие = function(событие) { + if (событие == "сенсор стрелы") + { + this.времяСтрелы = мир.физика.движок.timing.timestamp; + this.подкинуть(); + } + else if (событие == "игрок приземлился") + { + this.времяПриземления = мир.физика.движок.timing.timestamp; + this.подкинуть(); + } + else if (событие = "игрок начал прыжок") + { + this.времяСтрелы = null; + this.времяПриземления = null; + this.подкинули = false; + } + }; + + this.подкинуть = function() { + if ( + this.подкинули || + !this.времяСтрелы || + !this.времяПриземления || + Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 || + Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001 + ) { + return; + } + + this.подкинули = true; + Matter.Body.setVelocity( + мир.объекты.тела.стрела, + { x: 0, y: -мир.игрок.приземление.скорость * 1.2 } + ); + + // Уведомить о достижении нужной скорости. + if ( + (мир.игрок.приземление.скорость > 16) && + this.закинули + ) { + мир.события.отписать(this); + this.закинули(); + } + }; + + // Конструктор. + this.создать(); +} + +мир.подкидываниеСтрелы = new ПодкидываниеСтрелы(); +мир.подкидываниеСтрелы.закинули = function() { + мир.подкидываниеСтрелы = null; +};