Создаём кастомную катастрофу
Вы можете создавать свои кастомные катастрофы при помощи класса 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 с Быстрой игрой), или каждый уровень с мутатором Катастрофы на каждом уровне.