static bool Prefix(TreasureRevealer __instance) { if (!enabled) { return(true); } if (tril.Count == 0) { GetAllTreasures(__instance); } float maxDistance = Module <TreasureRevealerManager> .Self.property.detectRange * settings.RangeMult; TreasureRevealerItem.ModeEnum mEnum = (!Module <TreasureRevealerManager> .Self.property.showBorder) ? TreasureRevealerItem.ModeEnum.Selection : TreasureRevealerItem.ModeEnum.Border; for (int i = 0; i < tril.Count; i++) { TreasureRevealerItem tri = tril[i]; if (tri != null && tri.gameObject != null && Vector3.Distance(Module <Player> .Self.GamePos, tri.pos) <= maxDistance) { tri.ResetState(mEnum, Module <TreasureRevealerManager> .Self.property.showName); } else { tri.ResetState(TreasureRevealerItem.ModeEnum.Preview, false); } } return(false); }
static void GetAllTreasures(TreasureRevealer __instance) { List <ItemDrop> itemDrop = Module <VoxelDungeonManager> .Self.GetItemDrop(Module <ScenarioModule> .Self.CurScenarioNameForGeneration); List <RevealLightPoint> list = new List <RevealLightPoint>(); List <Transform> dynamicPortalEnterPoint = Module <VoxelDungeonManager> .Self.GetDynamicPortalEnterPoint(Module <ScenarioModule> .Self.CurScenarioNameForGeneration); if (itemDrop == null && dynamicPortalEnterPoint == null) { Dbgl("no items!"); return; } Dbgl($"got {itemDrop.Count} items!"); tril.Clear(); using (List <ItemDrop> .Enumerator enumerator3 = itemDrop.GetEnumerator()) { while (enumerator3.MoveNext()) { ItemDrop t = enumerator3.Current; list.Add(new RevealLightPoint(t.transform, LightPointType.Treasure)); } } foreach (Transform t2 in dynamicPortalEnterPoint) { list.Add(new RevealLightPoint(t2, LightPointType.PortalEnter)); } string output = ""; for (int l = 0; l < list.Count; l++) { RevealLightPoint rlp = list[l]; TreasureRevealerItem component; if (rlp.type == LightPointType.Treasure) { component = UnityEngine.Object.Instantiate <GameObject>(__instance.template).GetComponent <TreasureRevealerItem>(); } else { component = UnityEngine.Object.Instantiate <GameObject>(__instance.templatePortal).GetComponent <TreasureRevealerItem>(); } string name = string.Empty; ItemDrop itemDrop2 = itemDrop.Find((ItemDrop itr) => itr.transform == rlp.transf); if (null != itemDrop2) { name = itemDrop2.Item.ItemBase.Name; output += name + "\r\n"; } float maxDistance = Module <TreasureRevealerManager> .Self.property.detectRange * settings.RangeMult; component.Init(rlp.transf, TreasureRevealerItem.ModeEnum.Preview, maxDistance, name, null); tril.Add(component); } Dbgl(output); }
static void Postfix(TreasureRevealer __instance) { if (!enabled) { return; } Dbgl("destroying"); for (int i = 0; i < tril.Count; i++) { TreasureRevealerItem tri = tril[i]; if (tri != null && tri.gameObject != null) { UnityEngine.Object.Destroy(tri.gameObject); UnityEngine.Object.Destroy(tri); } } tril.Clear(); }