public string GetFamiliesList(int buildIndex)
        {
            ResilientInfoV1 ri = m_resilients[buildIndex];

            string ret;

            if (ri.namesBuffer.Count > 0)
            {
                ret = Localization.trad.GetFamiliesHistory() + "\n";
                for (int i = 0; i < ri.namesBuffer.Count; i++)
                {
                    ret += ri.namesBuffer[i];                    //remove placeholder in front
                    if (i < ri.namesBuffer.Count - 1)
                    {
                        ret += Localization.trad.GetFamiliesSeparator();
                    }
                }
            }
            else
            {
                ret = Localization.trad.GetEmptyHouse();
            }

            return(ret);
        }
        //industrial goods export history
        public void UpdateGoodsExport(int buildIndex)
        {
            ResilientInfoV1 ri = m_resilients[buildIndex];

            Building build = Singleton <BuildingManager> .instance.m_buildings.m_buffer[ri.buildingID];

            int cbn1 = (int)build.m_customBuffer1;         //resources in stock
            int cbn2 = (int)build.m_customBuffer2;         //goods in stock

            if (cbn1 > ri.goodsBuffer1)                    //resources have been brought
            {
                ri.goodsBuffer2 -= ri.goodsBuffer1 - cbn1; //total resources imported
            }
            ri.goodsBuffer1 = cbn1;

            if (cbn2 < ri.goodsBuffer3) //goods have been picked up
            {
                ri.goodsBuffer4 += ri.goodsBuffer3 - cbn2;
            }

            //if (cbn2 > ri.goodsBuffer3) //goods have not been picked up (track production)
            //{
            //    ri.goodsBuffer4 += cbn2 - ri.goodsBuffer3;
            //}

            ri.goodsBuffer3 = cbn2;

            m_resilients[buildIndex] = ri;
        }
        public void UnsuscribeBuilding(ushort buildingID)
        {
            int index = GetResilientBuildingIndex(buildingID);

            if (index != -1)
            {
                ResilientInfoV1 ri = m_resilients[index];
                ri.unsuscribed      = true;
                m_resilients[index] = ri;
            }
        }
        public bool AddBuilding(ushort buildingID, bool resilient)
        {
            ResilientInfoV1 ri;

            int buildIndex = GetResilientBuildingIndex(buildingID);

            if (buildIndex != -1)
            {
                ri                       = m_resilients[buildIndex];
                ri.unsuscribed           = false;
                ri.unsuscribeTimer       = 0;
                ri.resiliencyActivated   = resilient;
                m_resilients[buildIndex] = ri;
                Singleton <BuildingManager> .instance.m_buildings.m_buffer[buildingID].m_majorProblemTimer = 0;
                Singleton <BuildingManager> .instance.m_buildings.m_buffer[buildingID].m_problems          = Notification.RemoveProblems(Singleton <BuildingManager> .instance.m_buildings.m_buffer[buildingID].m_problems, Notification.Problem.MajorProblem);
                return(false);
            }

            ri               = new ResilientInfoV1();
            ri.buildingID    = buildingID;
            ri.activatedDate = Singleton <SimulationManager> .instance.m_currentGameTime;
            ri.description   = "";
            Building build = Singleton <BuildingManager> .instance.m_buildings.m_buffer[buildingID];

            ri.chosenLevel = build.Info.m_class.m_level;

            ri.namesBuffer = new List <string>();

            ri.goodsBuffer1 = 0;
            ri.goodsBuffer2 = 0;
            ri.goodsBuffer3 = 0;
            //ri.goodsBuffer3 = build.m_customBuffer2;
            ri.goodsBuffer4 = 0;

            ri.totalIncome = 0L;



            //speed up abandonment
//			Singleton<BuildingManager>.instance.m_buildings.m_buffer[buildingID].m_electricityProblemTimer = 60;
//			Singleton<BuildingManager>.instance.m_buildings.m_buffer[buildingID].m_majorProblemTimer = 60;

            m_resilients.Add(ri);

            UpdateResidentFamilies(m_resilients.Count - 1);

            return(true);
        }
        //industrial extractor export history
        public void UpdatePrimaryResourceExport(int buildIndex)
        {
            ResilientInfoV1 ri = m_resilients[buildIndex];

            Building build = Singleton <BuildingManager> .instance.m_buildings.m_buffer[ri.buildingID];

            int cbn1 = (int)build.m_customBuffer1;

            if (cbn1 < ri.goodsBuffer1)            //material has been picked up
            {
                ri.goodsBuffer2 += ri.goodsBuffer1 - cbn1;
            }
            else             //material has been extracted
            {
                ri.goodsBuffer3 -= ri.goodsBuffer1 - cbn1;
            }

            ri.goodsBuffer1 = cbn1;

            m_resilients[buildIndex] = ri;
        }
        //commercial building history updates
        public void UpdateVisitsCount(int buildIndex)
        {
            ResilientInfoV1 ri = m_resilients[buildIndex];

            CitizenManager instance = Singleton <CitizenManager> .instance;

            Citizen.BehaviourData behaviour = new Citizen.BehaviourData();
            int aliveCount = 0;
            int totalCount = 0;

            uint num  = Singleton <BuildingManager> .instance.m_buildings.m_buffer[ri.buildingID].m_citizenUnits;
            int  num2 = 0;

            while (num != 0u)
            {
                if ((ushort)(instance.m_units.m_buffer[(int)((UIntPtr)num)].m_flags & CitizenUnit.Flags.Visit) != 0)
                {
                    instance.m_units.m_buffer[(int)((UIntPtr)num)].GetCitizenVisitBehaviour(ref behaviour, ref aliveCount, ref totalCount);
                }
                num = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_nextUnit;
                if (++num2 > 524288)
                {
                    CODebugBase <LogChannel> .Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace);

                    break;
                }
            }


            if (totalCount < ri.currentVisits)            //assume some visitors have left
            {
                ri.totalVisits += ri.currentVisits - totalCount;
            }

            ri.currentVisits = totalCount;

            m_resilients[buildIndex] = ri;
        }
        public string GetWorkersHistoryList(int buildIndex)
        {
            ResilientInfoV1 ri = m_resilients[buildIndex];

            string ret;

            if (ri.namesBuffer.Count > 0)
            {
                ret = Localization.trad.GetWorkersHistory(ri.namesBuffer.Count);                //+"\n";
//				for(int i = 0; i < ri.namesBuffer.Count; i++)
//				{
//					ret += ri.namesBuffer[i];
//					if(i < ri.namesBuffer.Count-1)
//						ret += Localization.trad.GetFamiliesSeparator();
//				}
            }
            else
            {
                ret = Localization.trad.GetEmptyFacility();
            }

            return(ret);
        }