3

Двойная отправка флота по даблклику

Собсно, если даблкликнуть по кнопке "уничтожить", то на планету назначения улетает два флота. Возможно аналогичное поведения и на других кнопках.

"Консул сказал, мы выполнили!" )

4 ответа

А какое поведение корректное в твоем понимании?

Ну т.е. сейчас есть возможность рассылать один и тот же состав по разным планетам и так далее.

А что если игрок отправил 1 флот, а через 5 секунд решил ещё столько же?

Правильное поведение: при нажатии кнопки отправки дизейблятся. После подтверждения от сервера, что он получил команду и флот успешно отправлен - окошко закрывается. При повторном открытии окна отправки кнопки отправки снова активны.

Вот пусть на 5 секунд вторичная отправка и будет заблокирована )

Т.е. посылка двух флотов на одну планету должна выполняться в два дейтсвия. Отправить - уничтожить, отправить - уничтожить.

Отправка нескольких флотов с одного окна не логичное поведение, имхо.

 

Это плохо. :( И странно, что у меня ни разу такого не случилось - у меня "дребезжит" левая кнопка мышки и временами вместо клика делает два клика или дабл клик. В интернетах пишут, что это типовая болезнь игровых мышек через некоторое время. Неприятное и непредсказуемое явление. :(

У меня медленная компутера. Кнопка уничтожить активна до 5 секунд )

Ага, все ясно. Значит у меня кнопка "уничтожить" сразу становится неактивной, поэтому нет двойных срабатываний.

Вобще, после последнего апдейта, интерфейс космоса стал задумчивым, по ощущениям. Долго соображает при вводе количества, после "уничтожить" размышляет какое-то время перед закрытием окна. (комп быстрый, памяти достаточно, интернет неплохой).

Значит стоит ожидать неприятностей. Если технически возможно послать два флота через одну кнопку, значит рано или поздно фаза тормозов интерфейса совпадет с очередным двойным кликом.

Актуальность проблемы усилилась из-за включения шансовой смерти при двойной отправке

Да, и где-то в районе месяца назад Зав писал, что нужно прикрутить подтверждение от сервера ;-)

Подтверждение от сервера в коде есть. Нет собственно включения/выключения кнопок при событиях.

Достаточно добавить в начало обработчика  "click .btn-attack" проверку и изменение состояния кнопок:

if (e.currentTarget.classList.contains("disabled"))
return;
var enableSendButtons = function(enabled) {
var buttons = document.querySelectorAll(".btn-attack");
for (var i = 0; i < buttons.length; ++i) {
buttons[i].classList.toggle("disabled", !enabled);
}
}

И перед серверными вызовами Meteor.call("space.sendFleet" и "space.attackReptileFleet" вызвать
enableSendButtons(false),

А в обработчике ответа сервера на эти вызовы
Notifications.error("Не удалось отправить флот", e.error)

Дополнить до
(Notifications.error("Не удалось отправить флот", e.error), enableSendButtons(true))