Создаём кастомную катастрофу
Вы можете создавать свои кастомные катастрофы при помощи класса CustomDisaster, предоставляемый RogueLibs. Вы можете настроить название, описание катастрофы и оба сообщения, отображающиеся в начале уровня. И, конечно же, вы можете определить условия, при которых катастрофа может (или должна) случиться, и что происходит в начале и в течение этой катастрофы. Также, вы можете быстро и просто создать мутатор убирающий катастрофу из пула.
Класс CustomDisaster
Чтобы сделать кастомную катастрофу, создайте класс наследующий от CustomDisaster:
public class MyCustomDisaster : CustomDisaster
{
/* ... */
}
Вам нужно реализовать 3 метода:
public class MyCustomDisaster : CustomDisaster
{
public override void Start() { /* ... */ }
public override void Finish() { /* ... */ }
public override IEnumerator? Updating() { /* ... */ }
}
Start вызывается когда катастрофа начинается. Finish вызывается когда катастрофа заканчивается.
Start и FinishЭти методы вызываются между уровнями, так что некоторые штуки могут быть недоступны на момент их вызова.
Updating возвращает корутину обновления катастрофы. Она начинается после оповещения о катастрофе. Она останавливается автоматически, когда катастрофа заканчивается. Если вашей катастрофе не надо обновляться, можете просто вернуть null.
Условия катастрофы
Если в ы хотите чтобы ваша катастрофа появлялась только под определёнными условиями, переопределите метод Test:
public class MyCustomDisaster : CustomDisaster
{
public override bool Test()
{
// например, если это уровень Парка
return CurrentDistrict == 2;
}
}
CustomDisaster предоставляет несколько полезных свойств для этого:
CurrentDistrict- индекс района текущего уровня. (0- Трущобы,1- Завод,2- Парк,3- Деловой центр,4- Пригород,5- Деревня Мэра)CurrentFloor- индекс этажа текущего уровня в районе. (0,1или2в обычном прохождении, и0или1с мутатором "Быстрая игра")CurrentLevel- индекс текущего уровня. (0-2- Трущобы,3-5- Завод,6-8- Парк,9-11- Деловой центр,12-14- Пригород,15- Деревня Мэра) (или0-1,2-3,4-5,6-7,8-9,10с Быстрой игрой), и больше в Бесконечной игре)
И, если вы хотите чтобы катастрофа точно появилась на уро вне, переопределите метод TestForced.
public class MyCustomDisaster : CustomDisaster
{
public override bool TestForced()
{
// например, если на уровне есть Мэр
return gc.agentList.Exists(a => a.agentName === VanillaAgents.Mayor);
}
}
На данный момент, TestForced не может заставить катастрофу появиться на уровне без катастроф. Он только работает на уровнях, у которых обычно есть катастрофы: *-3 (или *-2 с Быстрой игрой), или каждый уровень с мутатором Катастрофы на каждом уровне.