Beispiel #1
0
        // Token: 0x06000088 RID: 136 RVA: 0x00006CB4 File Offset: 0x00004EB4
        public override void Tick()
        {
            base.Tick();
            if (this.debug && Find.TickManager.TicksGame % 100 == 0)
            {
                string debugMsg = "At Tick: " + Find.TickManager.TicksGame;
                debugMsg = string.Concat(new string[]
                {
                    debugMsg,
                    " : (",
                    (this.MixerThingDef != null) ? this.MixerThingDef.defName : "Null",
                    ") : Prod: ",
                    this.isProducing ? "True" : "false",
                    " : Num: ",
                    this.NumProd.ToString(),
                    " : PWT: ",
                    this.ProdWorkTicks.ToString()
                });
                Log.Message(debugMsg, false);
            }

            if (this.IsWorking(this) && this.MixerThingDef != null && !Building_MSDrugMix.StockLimitReached(this, this.MixerThingDef, this.StockLimit, out _))
            {
                if (this.ProdWorkTicks > 0 && this.isProducing)
                {
                    this.ProdWorkTicks--;
                    if (this.mixSustainer == null)
                    {
                        this.StartMixSustainer();
                        return;
                    }
                    if (this.mixSustainer.Ended)
                    {
                        this.StartMixSustainer();
                        return;
                    }
                    this.mixSustainer.Maintain();
                    return;
                }
                else if (this.isProducing && this.NumProd > 0 && this.MixerThingDef != null)
                {
                    if (this.debug)
                    {
                        Log.Message("Production point: " + this.MixerThingDef.defName + " : " + this.ProdWorkTicks.ToString(), false);
                    }
                    if (this.ValidateOutput(this.MixerThingDef, out int hasSpace, out List <Building> candidatesOut) && hasSpace > 0)
                    {
                        if (hasSpace >= this.NumProd)
                        {
                            if (this.debug)
                            {
                                Log.Message("Ejecting: " + this.MixerThingDef.defName + " : " + this.NumProd.ToString(), false);
                            }
                            this.MixerEject(this, this.MixerThingDef, this.NumProd, candidatesOut, out int Surplus);
                            this.NumProd = Surplus;
                        }
                        else
                        {
                            if (this.debug)
                            {
                                Log.Message("Ejecting: " + this.MixerThingDef.defName + " : " + hasSpace.ToString(), false);
                            }
                            this.MixerEject(this, this.MixerThingDef, hasSpace, candidatesOut, out int Surplus2);
                            this.NumProd -= hasSpace - Surplus2;
                        }
                    }
                    if (this.NumProd == 0)
                    {
                        this.TotalProdWorkTicks = 0;
                        return;
                    }
                }
                else if (this.isProducing && this.MixerThingDef != null && this.ValidateRecipe(this.MixerThingDef, out bool UseMax, out List <RCPItemCanUse> RecipeList, out int minProd, out int maxProd, out int ticks))
                {
                    if (this.debug)
                    {
                        Log.Message(string.Concat(new object[]
                        {
                            "StartProduction: ",
                            this.MixerThingDef.defName,
                            " :  RCP Items: ",
                            RecipeList.Count
                        }), false);
                    }
                    if (RecipeList.Count > 0)
                    {
                        for (int i = 0; i < RecipeList.Count; i++)
                        {
                            ThingDef recipeThingDef = RecipeList[i].def;
                            int      num;
                            if (UseMax)
                            {
                                num = RecipeList[i].Max;
                            }
                            else
                            {
                                num = RecipeList[i].Min;
                            }
                            if (this.debug)
                            {
                                Log.Message(string.Concat(new string[]
                                {
                                    "Removing: ",
                                    UseMax ? "Max" : "Min",
                                    ": ",
                                    num.ToString(),
                                    " (",
                                    recipeThingDef.defName,
                                    ")"
                                }), false);
                            }
                            this.RemoveRecipeItems(recipeThingDef, num);
                        }
                        this.NumProd = minProd;
                        if (UseMax)
                        {
                            this.NumProd = maxProd;
                        }
                        this.ProdWorkTicks      = (int)((float)ticks * this.effeciencyFactor * (float)this.NumProd);
                        this.TotalProdWorkTicks = this.ProdWorkTicks;
                    }
                }
            }
        }
        // Token: 0x0600008E RID: 142 RVA: 0x00007A9C File Offset: 0x00005C9C
        private static void DoNotFoundGroupsOverlay(Building_MSDrugMix b, ThingDef def, int grp)
        {
            if (Find.CurrentMap == null || Find.CurrentMap != b.Map)
            {
                return;
            }

            var listRCP = MSDrugMixUtility.GetRCPList(def);
            var alerts  = new List <ThingDef>();

            if (listRCP.Count > 0)
            {
                foreach (var item in listRCP)
                {
                    if (item.mixgrp == grp)
                    {
                        alerts.AddDistinct(item.def);
                    }
                }
            }

            if (alerts.Count <= 0)
            {
                return;
            }

            var OutOfFuelMat = MaterialPool.MatFrom("UI/Overlays/OutOfFuel", ShaderDatabase.MetaOverlay);
            var i            = 0;

            foreach (var alert in alerts)
            {
                if (!alert.defName.StartsWith("Chunk") || alert.defName.StartsWith("Chunk") && i < 1)
                {
                    var mat     = MaterialPool.MatFrom(alert.uiIcon, ShaderDatabase.MetaOverlay, Color.white);
                    var BaseAlt = AltitudeLayer.WorldClipper.AltitudeFor();
                    if (mat != null)
                    {
                        var altInd  = 21;
                        var plane   = MeshPool.plane08;
                        var drawPos = b.TrueCenter();
                        drawPos.y  = BaseAlt + (0.046875f * altInd);
                        drawPos.x += i;
                        drawPos.z += grp - 2;
                        var num2 = ((float)Math.Sin(
                                        (Time.realtimeSinceStartup + (397f * (b.thingIDNumber % 571))) * 4f) + 1f) * 0.5f;
                        num2 = 0.3f + (num2 * 0.7f);
                        for (var j = 0; j < 2; j++)
                        {
                            var material = FadedMaterialPool.FadedVersionOf(j < 1 ? mat : OutOfFuelMat, num2);

                            if (material != null)
                            {
                                Graphics.DrawMesh(plane, drawPos, Quaternion.identity, material, 0);
                            }
                        }
                    }
                }

                i++;
            }
        }