private void SetPingTimer(RoR2.UI.PingIndicator pingIndicator, RoR2.UI.PingIndicator.PingType pingType) { float fixedTimer = 0f; switch (pingType) { case RoR2.UI.PingIndicator.PingType.Default: fixedTimer = _config.DefaultPingLifetime.Value; break; case RoR2.UI.PingIndicator.PingType.Enemy: fixedTimer = _config.EnemyPingLifetime.Value; break; case RoR2.UI.PingIndicator.PingType.Interactable: fixedTimer = _config.InteractablePingLifetime.Value; break; } pingIndicator.SetObjectValue("fixedTimer", fixedTimer); }
/// <summary> /// Override method for RoR2.PingerController.SetCurrentPing /// </summary> public void SetCurrentPing(On.RoR2.PingerController.orig_SetCurrentPing orig, RoR2.PingerController self, RoR2.PingerController.PingInfo newPingInfo) { // For some reason, if you ping somewhere that is not pingable, it will create a // Ping at 0,0,0. If that happens, we just leave, since that isn't possible in the // regular game either, or if so, not at exactly those coordinates if (newPingInfo.origin == Vector3.zero) { return; } // If the targeted game object already has a ping, don't do anything // This is here to avoid stacking of different player pings on interactibles if (newPingInfo.targetGameObject != null && _pingIndicators.Any(indicator => indicator && indicator.pingTarget == newPingInfo.targetGameObject)) { return; } self.NetworkcurrentPing = newPingInfo; // Here we create an instance of PingIndicator // since we're not jumping into PingerController.RebuildPing() to create one. GameObject go = (GameObject)Object.Instantiate(Resources.Load("Prefabs/PingIndicator")); RoR2.UI.PingIndicator pingIndicator = go.GetComponent <RoR2.UI.PingIndicator>(); pingIndicator.pingOwner = self.gameObject; pingIndicator.pingOrigin = newPingInfo.origin; pingIndicator.pingNormal = newPingInfo.normal; pingIndicator.pingTarget = newPingInfo.targetGameObject; pingIndicator.RebuildPing(); SetPingIndicatorColor(pingIndicator); float fixedTimer = 0f; RoR2.UI.PingIndicator.PingType pingType = pingIndicator.GetObjectValue <RoR2.UI.PingIndicator.PingType>("pingType"); switch (pingType) { case RoR2.UI.PingIndicator.PingType.Default: fixedTimer = _config.DefaultPingLifetime.Value; break; case RoR2.UI.PingIndicator.PingType.Enemy: fixedTimer = _config.EnemyPingLifetime.Value; AddEnemyText(pingIndicator); break; case RoR2.UI.PingIndicator.PingType.Interactable: fixedTimer = _config.InteractiblePingLifetime.Value; AddLootText(pingIndicator); ShowUnlockedItemNotification(pingIndicator); break; } pingIndicator.SetObjectValue("fixedTimer", fixedTimer); // We add the ping indicator to our own local list _pingIndicators.Add(pingIndicator); if (self.hasAuthority) { self.CallCmdPing(self.currentPing); } }