-
Notifications
You must be signed in to change notification settings - Fork 23
lib_achievements.php (новые ачивки)
Alex Chuchunkov edited this page May 14, 2015
·
1 revision
class Achievement (abstract)
- базовые свойства для всех ачивок, типа short_title, css_class;
- методы push (обновить информацию в БД по свойствам объекта), set (обновить свойства объекта по данным из БД)
class AchievementsManager
- управляет всеми ачивками - сообщает им о событиях с помощью emit
- обновляет у всех статус seen
- достает все ачивки из базы для пользователя
- считает какую-то статистику для вики
class EventTypes
- ставит в соответствие типам событий названия интерфейсов
interface ListenerInterface (и TaskDoneListenerInterface, SignedUpListenerInterface, ...)
- определяют метод dispatch, который принимает событие и реагирует на него
trait AchievementWithLevels
- добавляет классу Achievement свойства level, progress
- добавляет метод how_to_get_next
- переписывает методы set, pull, чтобы они знали о level и progress
trait GivenOnTrigger
- трейт, в котором dispatch сразу выдает человеку ачивку, если у него её еще нет
Классический пример комбинации из всего этого зоопарка:
class AistAchievement extends Achievement implements SignedUpListenerInterface {
use GivenOnTrigger;
public $short_title = "Аист";
public $caption = "За регистрацию";
public $css_class = "aist";
}
И использования AchievementManager::emit
$am = new AchievementsManager((int)$_SESSION['user_id']);
$am->emit(EventTypes::TASK_DONE);