Example #1
0
        public static bool IsSingleAllowed(ThingDef td)
        {
            ResearchProjectDef rpd;

            if (!thingDic.TryGetValue(td, out rpd))
            {
                Log.Error("IsSingleAllowed tried to get td not in dic");
            }
            return(td.BaseMarketValue >= ShardMaker.RequiredValueForOneShard(rpd) || td.BaseMarketValue >= ShardMaker.forceSingleThreshold);
        }
Example #2
0
        public static float GetShardRatio(ResearchProjectDef shardProj, ResearchProjectDef appliedProj)
        {
            if (!Base.researchDic.ContainsKey(appliedProj))
            {
                return(1f);
            }
            float shardValue   = ShardMaker.RequiredValueForOneShard(shardProj);
            float appliedValue = ShardMaker.RequiredValueForOneShard(appliedProj);

            return(shardValue / appliedValue);
        }
Example #3
0
        public static bool IsStackAllowed(ThingDef td, int size)
        {
            if (td.stackLimit < size)
            {
                return(false);
            }
            ResearchProjectDef rpd;

            if (!thingDic.TryGetValue(td, out rpd))
            {
                Log.Error("IsSingleAllowed tried to get td not in dic");
            }
            float shardValue = ShardMaker.RequiredValueForOneShard(rpd);

            return
                (((td.BaseMarketValue < shardValue) &&
                  (td.BaseMarketValue < ShardMaker.forceSingleThreshold) &&
                  (td.BaseMarketValue * size >= shardValue)
                  ) ||
                 (td.BaseMarketValue * size < shardValue * 100));                        // 1 item not allowed, but stack is OR stack is under 100 shards
        }
Example #4
0
        public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
        {
            if (!req.HasThing || !Base.thingDic.ContainsKey(req.Thing.def))
            {
                return("");
            }
            ResearchProjectDef rpd = Base.thingDic[req.Thing.def];
            float baseVal          = Mathf.RoundToInt(ShardMaker.GetAverageValue(req.Thing.def) / ShardMaker.RequiredValueForOneShard(rpd));

            string s = "Base item yield: " + baseVal;

            if (TechprintingSettings.shardYieldRatio != 1f)
            {
                s += "\nShard yield multiplier (from settings): " + TechprintingSettings.shardYieldRatio.ToString("p1");
            }

            QualityCategory q;

            if (req.Thing.TryGetQuality(out q))
            {
                float rawValue   = (float)ShardMaker.CalcNumShardsForRaw(req.Thing, rpd);
                float multiplier = rawValue / baseVal;
                s += "\nQuality and condition multiplier: " + multiplier.ToString("p1");
                s += "\nAdjusted value: " + rawValue;
                if (rawValue > 100)
                {
                    int maxShards;
                    if (q == QualityCategory.Legendary || q == QualityCategory.Masterwork)
                    {
                        maxShards = TechprintingSettings.printAllItems ? Mathf.RoundToInt(Mathf.Max(rpd.techprintCount, 100)) : Mathf.RoundToInt(rpd.techprintCount);
                    }
                    else
                    {
                        maxShards = 100;
                    }
                    s += "\n\nMax shards for quality: " + maxShards;
                }
            }

            return(s);
        }