public CityEvent GetEventForBuilding(ref Building thisBuilding, List <CityEventXml> xmlEvents)
        {
            CityEvent _buildingEvent = null;
            List <CityEventXmlContainer> _validEvents       = new List <CityEventXmlContainer>();
            SimulationManager            _simulationManager = Singleton <SimulationManager> .instance;

            foreach (CityEventXml xmlEvent in xmlEvents)
            {
                foreach (CityEventXmlContainer containedEvent in xmlEvent._containedEvents)
                {
                    if (containedEvent._eventBuildingClassName == thisBuilding.Info.name && containedEvent._supportsRandomEvents)
                    {
                        _validEvents.Add(containedEvent);
                    }
                }
            }

            if (_validEvents.Count > 0)
            {
                CityEventXmlContainer pickedEvent = _validEvents[_simulationManager.m_randomizer.Int32((uint)_validEvents.Count)];

                if (pickedEvent != null)
                {
                    _buildingEvent = new XmlEvent(pickedEvent);
                }
            }
            else
            {
                CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Couldn't find any events for " + thisBuilding.Info.name);
            }

            return(_buildingEvent);
        }
Пример #2
0
        public void AddEvent(CityEvent eventToAdd)
        {
            if (eventToAdd != null)
            {
                BuildingManager buildingManager = Singleton <BuildingManager> .instance;
                Building        monument        = buildingManager.m_buildings.m_buffer[eventToAdd.m_eventData.m_eventBuilding];

                if ((monument.m_flags & Building.Flags.Active) != Building.Flags.None && (monument.m_flags & Building.Flags.Created) != Building.Flags.None)
                {
                    m_nextEvents.Add(eventToAdd);

                    string message = eventToAdd.GetCitizenMessageInitialised();

                    if (message != "")
                    {
                        MessageManager _messageManager = Singleton <MessageManager> .instance;
                        _messageManager.QueueMessage(new CitizenCustomMessage(_messageManager.GetRandomResidentID(), message));
                    }

                    LoggingWrapper.Log("Event created at " + monument.Info.name + " for " + eventToAdd.m_eventData.m_eventStartTime.ToShortDateString() + ". Current date: " + CITY_TIME.ToShortDateString());

                    Debug.Log("Event starting at " + eventToAdd.m_eventData.m_eventStartTime.ToLongTimeString() + ", " + eventToAdd.m_eventData.m_eventStartTime.ToShortDateString());
                    Debug.Log("Event building is " + monument.Info.name);
                    Debug.Log("Current date: " + CITY_TIME.ToLongTimeString() + ", " + CITY_TIME.ToShortDateString());
                }
                else
                {
                    LoggingWrapper.LogError("Couldn't create an event, as the building is inactive or not created!");
                }
            }
            else
            {
                LoggingWrapper.LogError("Couldn't create an event, as it was null!");
            }
        }
        public CityEvent GetXmlEventFromData(CityEventData data)
        {
            CityEvent dataEvent = null;

            if (data.m_eventName != "")
            {
                foreach (CityEventXml xmlEvent in CityEventManager.instance.m_xmlEvents)
                {
                    foreach (CityEventXmlContainer containedEvent in xmlEvent._containedEvents)
                    {
                        if ("XMLEvent-" + containedEvent._name == data.m_eventName)
                        {
                            dataEvent             = new XmlEvent(containedEvent);
                            dataEvent.m_eventData = data;
                            CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Created an XML event: " + data.m_eventName);
                            break;
                        }
                    }

                    if (dataEvent != null)
                    {
                        break;
                    }
                }
            }

            return(dataEvent);
        }
Пример #4
0
        public bool EventStartsWithin(ushort buildingID, double hours, bool countStarted = false)
        {
            for (int index = 0; index < m_nextEvents.Count; ++index)
            {
                CityEvent thisEvent = m_nextEvents[index];

                if (thisEvent.m_eventData.m_eventBuilding == buildingID && (thisEvent.EventStartsWithin(hours) || (countStarted && thisEvent.m_eventData.m_eventStarted)))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #5
0
        public bool EventStartsBetween(DateTime date, TimeSpan length)
        {
            for (int index = 0; index < m_nextEvents.Count; ++index)
            {
                CityEvent thisEvent = m_nextEvents[index];

                if (thisEvent.EventActiveBetween(date, length))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #6
0
        public FastList <CityEvent> EventsThatStartWithin(double hours, bool countStarted = false)
        {
            FastList <CityEvent> _eventsWithin = new FastList <CityEvent>();

            for (int index = 0; index < m_nextEvents.Count; ++index)
            {
                CityEvent thisEvent = m_nextEvents[index];

                if (thisEvent.EventStartsWithin(hours) || (countStarted && thisEvent.m_eventData.m_eventStarted))
                {
                    _eventsWithin.Add(thisEvent);
                }
            }

            return(_eventsWithin);
        }
Пример #7
0
        public int EventStartsWithin(uint citizenID, ref Citizen person, double hours, bool countStarted = false)
        {
            int foundEventIndex = -1;

            for (int index = 0; index < m_nextEvents.Count; ++index)
            {
                CityEvent thisEvent = m_nextEvents[index];

                if ((thisEvent.EventStartsWithin(hours) && thisEvent.CitizenCanGo(citizenID, ref person)) || (countStarted && thisEvent.m_eventData.m_eventStarted))
                {
                    foundEventIndex = index;
                    break;
                }
            }

            return(foundEventIndex);
        }
Пример #8
0
        public void ClearDeadEvents()
        {
            bool clearAllEvents = false;

            CimTools.CimToolsHandler.CimToolBase.ModPanelOptions.GetOptionValue("ClearEvents", ref clearAllEvents);

            if (clearAllEvents)
            {
                CimTools.CimToolsHandler.CimToolBase.ModPanelOptions.SetOptionValue("ClearEvents", false);
            }

            if (m_nextEvents.Count > 0)
            {
                for (int index = 0; index < m_nextEvents.Count; ++index)
                {
                    bool      clearEvent = false || clearAllEvents;
                    CityEvent thisEvent  = m_nextEvents[index];

                    if ((thisEvent.m_eventData.m_eventEnded && (CITY_TIME - thisEvent.m_eventData.m_eventFinishTime).TotalHours > _eventEndBuffer))
                    {
                        clearEvent = true;

                        Debug.Log("Event finished");
                        LoggingWrapper.Log("Event finished");
                    }
                    else if (!thisEvent.m_eventData.m_eventStarted && !thisEvent.m_eventData.m_eventEnded && !thisEvent.EventStartsWithin(24 * 7))
                    {
                        clearEvent = true;

                        Debug.LogWarning("Event had more than a week of buffer. Removed.");
                        LoggingWrapper.LogWarning("Event had more than a week of buffer. Removed.");
                    }

                    if (clearEvent)
                    {
                        m_nextEvents.RemoveAt(index);
                        --index;
                    }
                    else
                    {
                        m_nextEvents[index].Update();
                    }
                }
            }
        }
Пример #9
0
        public CityEvent GetEventForBuilding(ref Building thisBuilding)
        {
            CityEvent buildingEvent = null;

            if (!Experiments.ExperimentsToggle.UseXMLEvents)
            {
                switch (thisBuilding.Info.name)
                {
                    //No longer supported
                }
            }
            else
            {
                buildingEvent = GetEventForBuilding(ref thisBuilding, CityEventManager.instance.m_xmlEvents);
            }

            return(buildingEvent);
        }
        public CityEvent GetEventFromData(CityEventData data)
        {
            CityEvent dataEvent = null;

            if (data.m_eventName != "")
            {
                if (data.m_eventName.Substring(0, 9) != "XMLEvent-")
                {
                    try
                    {
                        Type foundType = Assembly.GetExecutingAssembly().GetType(data.m_eventName);

                        if (foundType != null)
                        {
                            dataEvent = Activator.CreateInstance(foundType) as CityEvent;

                            if (dataEvent != null)
                            {
                                dataEvent.m_eventData = data;
                                CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Created a normal event: " + data.m_eventName);
                            }
                        }
                    }
                    catch
                    {
                        dataEvent = null;
                    }
                }
                else
                {
                    CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Found an XML event, rerouting.");
                    dataEvent = GetXmlEventFromData(data);
                }
            }

            return(dataEvent);
        }
        public CityEvent GetEventForBuilding(ref Building thisBuilding)
        {
            CityEvent buildingEvent = null;

            if (!Experiments.ExperimentsToggle.UseXMLEvents)
            {
                switch (thisBuilding.Info.name)
                {
                case "Modern Art Museum":
                    buildingEvent = new ArtExhibit();
                    break;

                case "Grand Mall":
                    buildingEvent = new ShopOpening();
                    break;

                case "Library":
                    buildingEvent = new BookSigning();
                    break;

                case "ExpoCenter":
                    switch (Singleton <SimulationManager> .instance.m_randomizer.Int32(5))
                    {
                    case 0:
                        buildingEvent = new BusinessExpo();
                        break;

                    case 1:
                        buildingEvent = new CaravanExpo();
                        break;

                    case 2:
                        buildingEvent = new ComicExpo();
                        break;

                    case 3:
                        buildingEvent = new ElectronicExpo();
                        break;

                    case 4:
                        buildingEvent = new GameExpo();
                        break;
                    }
                    break;

                case "Stadium":
                    buildingEvent = new FootballGame();
                    break;

                case "Opera House":
                    buildingEvent = new OperaEvent();
                    break;

                case "Posh Mall":
                    buildingEvent = new ShopOpening();
                    break;

                case "Observatory":
                    //coming soon
                    break;

                case "Official Park":
                    //buildingEvent = new Memorial();
                    break;

                case "Theater of Wonders":
                    buildingEvent = new TheaterEvent();
                    break;

                case "Trash Mall":
                    buildingEvent = new ShopOpening();
                    break;

                case "SeaWorld":
                    buildingEvent = new AquariumEvent();
                    break;
                }
            }
            else
            {
                buildingEvent = GetEventForBuilding(ref thisBuilding, CityEventManager.instance.m_xmlEvents);
            }

            return(buildingEvent);
        }
Пример #12
0
        public void CreateEvents()
        {
            SimulationManager _simulationManager = Singleton <SimulationManager> .instance;
            BuildingManager   _buildingManager   = Singleton <BuildingManager> .instance;

            PrintMonuments();

            if (m_forcedEvent != null)
            {
                m_nextEvents.Clear();
            }

            FastList <ushort> allBuildings = CityEventBuildings.instance.GetPotentialEventBuildings();

            if (allBuildings.m_size > 0)
            {
                if (m_forcedEvent != null)
                {
                    for (int index = 0; index < allBuildings.m_size; ++index)
                    {
                        ushort   buildingId = allBuildings[index];
                        Building monument   = _buildingManager.m_buildings.m_buffer[buildingId];

                        if (monument.Info.name == m_forcedEvent._eventBuildingClassName)
                        {
                            CityEvent xmlEvent = new XmlEvent(m_forcedEvent);
                            xmlEvent.SetUp(ref buildingId);
                            xmlEvent.m_eventData.m_eventStartTime  = CITY_TIME.AddHours(4d);
                            xmlEvent.m_eventData.m_eventFinishTime = xmlEvent.m_eventData.m_eventStartTime.AddHours(xmlEvent.GetEventLength());

                            AddEvent(xmlEvent);

                            LoggingWrapper.Log("Forced event created at " + monument.Info.name + " for " + xmlEvent.m_eventData.m_eventStartTime.ToShortTimeString() + ". Current date: " + CITY_TIME.ToShortTimeString());
                        }
                        else
                        {
                            LoggingWrapper.Log(monument.Info.name + " != " + m_forcedEvent._eventBuildingClassName);
                        }
                    }
                }
                else
                {
                    for (int count = 0; count < 10; ++count)
                    {
                        ushort randomMonumentId = allBuildings.m_buffer[_simulationManager.m_randomizer.UInt32((uint)allBuildings.m_size)];

                        if (randomMonumentId < _buildingManager.m_buildings.m_size)
                        {
                            Building  monument   = _buildingManager.m_buildings.m_buffer[randomMonumentId];
                            CityEvent foundEvent = CityEventBuildings.instance.GetEventForBuilding(ref monument);

                            if (foundEvent != null && (monument.m_flags & Building.Flags.Active) != Building.Flags.None)
                            {
                                foundEvent.SetUp(ref randomMonumentId);
                                AddEvent(foundEvent);
                                break;
                            }
                            else
                            {
                                Debug.Log("No event scheduled just yet. Checking again soon.");
                            }
                        }
                    }
                }
            }

            m_forcedEvent = null;

            if (!ExperimentsToggle.ForceEventToHappen)
            {
                m_nextEventCheck = CITY_TIME.AddHours(3);
            }
        }