示例#1
0
        public static void InitializePKE()
        {
            PKEMeter.Logic.PKEGaugesGetter gauge = PKEMeter.PKEMeterAPI.GetGauge();

            Point?lastNearestShardTile       = null;
            float lastGaugedManaShardPercent = 0f;
            int   gaugeTimer = 0;

            PKEMeter.PKEMeterAPI.SetGauge((plr, pos) => {
                var config = FMCConfig.Instance;
                float detectChancePerTick = config.Get <float>(nameof(config.PKEDetectChancePerTick));

                PKEMeter.Logic.PKEGaugeValues existingGauge = gauge?.Invoke(plr, pos)
                                                              ?? new PKEMeter.Logic.PKEGaugeValues(0f, 0f, 0f, 0f);

                if (gaugeTimer-- <= 0)
                {
                    gaugeTimer = 15;
                    lastGaugedManaShardPercent = FMCMod.GaugeNearbyManaShards(pos, out lastNearestShardTile);
                }

                float illumAmt = 0;
                if (lastNearestShardTile.HasValue)
                {
                    ManaCrystalShardTile.GetIlluminationAt(
                        lastNearestShardTile.Value.X,
                        lastNearestShardTile.Value.Y,
                        out illumAmt
                        );
                }

                if (illumAmt > 0f)
                {
                    existingGauge.BluePercent  = lastGaugedManaShardPercent;
                    existingGauge.BluePercent += (1f - lastGaugedManaShardPercent) * Math.Min(illumAmt, 1f);
                }
                else
                {
                    if (detectChancePerTick > Main.rand.NextFloat())
                    {
                        existingGauge.BluePercent = FMCMod.ApplyInterferenceToManaShardGauge(lastGaugedManaShardPercent);
                    }
                }

                return(existingGauge);
            });

            PKEMeter.PKEMeterAPI.SetMeterText("FindableManaCrystals", (plr, pos, gauges) => {
                Color color = new Color(32, 64, 255);
                color       = color * (0.5f + (Main.rand.NextFloat() * 0.5f));

                return(new PKEMeter.Logic.PKETextMessage(
                           message: "CLASS II ETHEREAL GEOFORM",
                           color: color,
                           priority: lastGaugedManaShardPercent * 0.99999f
                           ));
            });

            PKEMeter.PKEMeterAPI.SetPKEBlueTooltip(() => "GEOFORM");
        }
示例#2
0
        ////////////////

        public static void InitializePKE()
        {
            PKEMeter.Logic.PKEGaugesGetter gauge = PKEMeter.PKEMeterAPI.GetGauge();

            int gaugeTimer = 0;

            PKEMeter.PKEMeterAPI.SetGauge((plr, pos) => {
                PKEMeter.Logic.PKEGaugeValues existingGauge = gauge?.Invoke(plr, pos)
                                                              ?? new PKEMeter.Logic.PKEGaugeValues(0f, 0f, 0f, 0f);

                if (gaugeTimer-- <= 0)
                {
                    gaugeTimer = 10;
                    BossReignsMod.LastGaugedBackgroundPKEPercent = BossReignsAPI.GetBackgroundPKEPercent();
                }

                existingGauge.RedPercent = BossReignsMod.LastGaugedBackgroundPKEPercent;                   // Red channel
                return(existingGauge);
            });

            PKEMeter.PKEMeterAPI.SetMeterText("BossReignsArrival", (plr, pos, gauges) => {
                return(new PKEMeter.Logic.PKETextMessage(
                           message: "WARNING - CLASS V+ PKE-EMITTING ENTITIES AT LARGE",
                           color: Color.Red *(0.5f + (Main.rand.NextFloat() * 0.5f)),
                           priority: gauges.RedPercent >= 0.99f ? 1f : 0f
                           ));
            });

            PKEMeter.PKEMeterAPI.SetPKERedTooltip(() => "AMBIENT");
        }