Хуки
Интерфейс IHook
Итак, хук - это объект, прицепляемый к другому объекту. В RogueLibs типы хуков наследуют от IHook
и IHook<T>
.
RogueLibsPatcher.dll создаёт поля под названиями __RogueLibsHooks
во всех типах, на которые можно прицепить хуки. Объект класса IHookController
потом назначается в это поле для управления прицепленными хуками. Он предоставляет методы для получения, прицепления и отцепления хуков от текущего объекта. Думайте о нём как о коллекции хуков.
Вы можете создавать свои хуки наследуя от IHook<T>
или от HookBase<T>
:
public class MyCustomHook : HookBase<InvItem>
{
protected override void Initialize() { }
public void StoreInfo(string data)
{
Debug.Log($"Сохранено {data}.");
Data = data;
}
public string LoadInfo()
{
Debug.Log($"Загружено {Data}.");
return Data;
}
private string Data;
}
Использование
Вы можете использовать хуки для хранения всякой информации:
MyCustomHook hook = item.AddHook<MyCustomHook>();
hook.StoreInfo("какая-то-информация");
Потом вы можете использовать эту информацию где-нибудь в другом месте:
MyCustomHook hook = item.GetHook<MyCustomHook>();
if (hook != null)
{
string data = hook.LoadInfo();
}
Вы можете прицеплять несколько хуков одного типа тоже:
MyCustomHook hook = item.AddHook<MyCustomHook>();
hook.StoreInfo("какая-то-информация");
MyCustomHook hook = item.AddHook<MyCustomHook>();
hook.StoreInfo("что-то-другое");
MyCustomHook hook = item.AddHook<MyCustomHook>();
hook.StoreInfo("что-нибудь-ещё");
foreach (MyCustomHook hook in item.GetHooks<MyCustomHook>())
{
string data = hook.LoadInfo();
}
Если вы хотите прицеплять хуки к объектам прямо когда они инициализируются, используйте Фабрики хуков.