Добавление title и description в настройки

This commit is contained in:
2023-03-30 15:40:45 +04:00
parent 2728d8511a
commit e22032dab6
13 changed files with 75 additions and 42 deletions
+39 -6
View File
@@ -1,22 +1,22 @@
/**
* Объект настроек шутки
*/
export interface JokeSettings {
export class JokeSettings {
/**
* Флаг блокировки срабатывания
*/
enabled: boolean;
enabled: boolean = true;
/**
* Вероятность срабатывания в процентах
*/
chance: number;
chance: number = 20;
}
/**
* Объект, описывающий шутку
*/
export abstract class Joke {
export abstract class Joke<T extends JokeSettings> {
/**
* Идентификатор шутки
*/
@@ -35,7 +35,40 @@ export abstract class Joke {
/**
* Настройки шутки
*/
settings: JokeSettings;
_settings: T;
/**
* Получение полного списка настроек
*/
get settings(): T {
return this._settings;
}
/**
* Запись новых настроек
*
* @param settings
*/
set settings(settings: T) {
for (const entry of Object.entries(settings)) {
const id = entry[0];
const value = entry[1];
switch (id) {
case "name":
case "title":
this.title = value;
break;
case "description":
this.description = value;
break;
default:
(<any>this._settings)[id] = value;
}
}
}
/**
* Проверка вероятности
@@ -78,7 +111,7 @@ export abstract class Joke {
/**
* Объект, описывающий шутку, которая может быть остановлена
*/
export abstract class StopableJoke extends Joke {
export abstract class StopableJoke<T extends JokeSettings> extends Joke<T> {
/**
* Остановка шутки, если возможно
*/