Ejemplo n.º 1
0
        public static void Postfix(ref Building buildingData, ExtractingFacilityAI __instance, ref ushort __state)
        {
            int cargoDiff;

            if (Mod.IsIndustriesBuilding(__instance))
            {
                // Output
                cargoDiff = Convert.ToInt32((buildingData.m_customBuffer1 - __state) / RI_Data.GetFactorCargo(__instance.m_outputResource));
                //DebugLog.LogToFileOnly($"ID:{buildingID}={(ushort)Mathf.Clamp(__state + cargoDiff, 0, 64000)} ({__state + cargoDiff}), state:{__state}, buff:{buildingData.m_customBuffer1}, diff:{cargoDiff}");
                buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state + cargoDiff, 0, 64000);
            }
            else
            {
                DebugLog.LogToFileOnly($"Unknown EF instance {__instance.name} ({__instance.GetType()})");
            }
        }
Ejemplo n.º 2
0
        public static void Postfix(ushort buildingID, ref Building buildingData, ProcessingFacilityAI __instance, ref ushort[] __state)
        {
            if (Mod.IsIndustriesBuilding(__instance))
            {
                if (RealCityEconomyExtension.Can16timesUpdate(buildingID))
                {
                    int   allInputRate    = 0;
                    float reduceInputRate = 1f;
                    if (__instance.m_inputResource1 != TransferManager.TransferReason.None)
                    {
                        allInputRate += __instance.m_inputRate1;
                    }
                    if (__instance.m_inputResource2 != TransferManager.TransferReason.None)
                    {
                        allInputRate += __instance.m_inputRate2;
                    }
                    if (__instance.m_inputResource3 != TransferManager.TransferReason.None)
                    {
                        allInputRate += __instance.m_inputRate3;
                    }
                    if (__instance.m_inputResource4 != TransferManager.TransferReason.None)
                    {
                        allInputRate += __instance.m_inputRate4;
                    }

                    if (allInputRate != 0)
                    {
                        reduceInputRate = (float)allInputRate / __instance.m_outputRate;
                    }

                    int cargoDiff;
                    // Input
                    if (__instance.m_inputResource1 != TransferManager.TransferReason.None)
                    {
                        cargoDiff = Convert.ToInt32((__state[1] - buildingData.m_customBuffer2) / RI_Data.GetFactorCargo(__instance.m_inputResource1));
                        buildingData.m_customBuffer2 = (ushort)Mathf.Clamp(__state[1] - (cargoDiff << 4), 0, 64000);
                    }

                    if (__instance.m_inputResource2 != TransferManager.TransferReason.None)
                    {
                        cargoDiff = Convert.ToInt32((__state[2] - Mod.CombineBytes(buildingData.m_teens, buildingData.m_youngs)) / RI_Data.GetFactorCargo(__instance.m_inputResource2));
                        Mod.SplitBytes((ushort)Mathf.Clamp(__state[2] - (cargoDiff << 4), 0, 64000), ref buildingData.m_teens, ref buildingData.m_youngs);
                    }

                    if (__instance.m_inputResource3 != TransferManager.TransferReason.None)
                    {
                        cargoDiff = Convert.ToInt32((__state[3] - Mod.CombineBytes(buildingData.m_adults, buildingData.m_seniors)) / RI_Data.GetFactorCargo(__instance.m_inputResource3));
                        Mod.SplitBytes((ushort)Mathf.Clamp(__state[3] - (cargoDiff << 4), 0, 64000), ref buildingData.m_adults, ref buildingData.m_seniors);
                    }

                    if (__instance.m_inputResource4 != TransferManager.TransferReason.None)
                    {
                        cargoDiff = Convert.ToInt32((__state[4] - Mod.CombineBytes(buildingData.m_education1, buildingData.m_education2)) / RI_Data.GetFactorCargo(__instance.m_inputResource4));
                        Mod.SplitBytes((ushort)Mathf.Clamp(__state[4] - (cargoDiff << 4), 0, 64000), ref buildingData.m_education1, ref buildingData.m_education2);
                    }

                    // Output (materials being produced)
                    if (__instance.m_outputResource != TransferManager.TransferReason.None)
                    {
                        cargoDiff = Convert.ToInt32((buildingData.m_customBuffer1 - __state[0]) * reduceInputRate / RI_Data.GetFactorCargo(__instance.m_outputResource));
                        buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state[0] + (cargoDiff << 4), 0, 64000);
                    }
                }
                else
                {
                    buildingData.m_customBuffer2 = (ushort)Mathf.Clamp(__state[1], 0, 64000);
                    Mod.SplitBytes((ushort)Mathf.Clamp(__state[2], 0, 64000), ref buildingData.m_teens, ref buildingData.m_youngs);
                    Mod.SplitBytes((ushort)Mathf.Clamp(__state[3], 0, 64000), ref buildingData.m_adults, ref buildingData.m_seniors);
                    Mod.SplitBytes((ushort)Mathf.Clamp(__state[4], 0, 64000), ref buildingData.m_education1, ref buildingData.m_education2);
                    buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state[0], 0, 64000);
                }
            }
        }
Ejemplo n.º 3
0
        public static void Postfix(ref InstanceID ___m_InstanceID, ref UILabel ___m_expenses)
        {
            ushort          id       = ___m_InstanceID.Building;
            Building        building = Singleton <BuildingManager> .instance.m_buildings.m_buffer[id];
            UniqueFactoryAI ai       = (UniqueFactoryAI)building.Info.m_buildingAI;
            int             volume;
            byte            health = Singleton <BuildingManager> .instance.m_buildings.m_buffer[id].m_health;

            volume = health * ai.m_inputRate1 * 16 / 100;
            long input1 = volume * IndustryBuildingAI.GetResourcePrice(ai.m_inputResource1) / (long)RI_Data.GetFactorCargo(ai.m_inputResource1) / 10000;

            volume = health * ai.m_inputRate2 * 16 / 100;
            long input2 = volume * IndustryBuildingAI.GetResourcePrice(ai.m_inputResource2) / (long)RI_Data.GetFactorCargo(ai.m_inputResource2) / 10000;

            volume = health * ai.m_inputRate3 * 16 / 100;
            long input3 = volume * IndustryBuildingAI.GetResourcePrice(ai.m_inputResource3) / (long)RI_Data.GetFactorCargo(ai.m_inputResource3) / 10000;

            volume = health * ai.m_inputRate4 * 16 / 100;
            long input4 = volume * IndustryBuildingAI.GetResourcePrice(ai.m_inputResource4) / (long)RI_Data.GetFactorCargo(ai.m_inputResource4) / 10000;

            ___m_expenses.text = (input1 + input2 + input3 + input4).ToString(Settings.moneyFormatNoCents, LocaleManager.cultureInfo);
        }