Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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);
            }
        }