示例#1
0
        public XmlEditorPanel(CityEventXmlContainer xmlEvent, string workingDirectory, TabItem parentTab = null)
        {
            InitializeComponent();

            _container        = xmlEvent;
            _workingDirectory = workingDirectory;
            _parentTab        = parentTab;

            LoadXmlEvent();
        }
示例#2
0
        private List <CityEventXmlContainer> GetAllXmlContainers()
        {
            List <CityEventXmlContainer> returnList = new List <CityEventXmlContainer>();
            List <XmlEditorPanel>        xmlEditors = GetAllXmlEditors();

            foreach (XmlEditorPanel xmlEditor in xmlEditors)
            {
                CityEventXmlContainer foundXmlContainer = xmlEditor._container;

                if (foundXmlContainer != null)
                {
                    returnList.Add(foundXmlContainer);
                }
            }

            return(returnList);
        }
示例#3
0
        public XmlEvent(CityEventXmlContainer xmlContainer)
        {
            m_eventInitialisedMessages = xmlContainer._initialisedMessages.ToList();
            m_eventStartedMessages     = xmlContainer._beginMessages.ToList();
            m_eventEndedMessages       = xmlContainer._endedMessages.ToList();

            m_eventData.m_eventName        = "XMLEvent-" + xmlContainer._name;
            m_eventData.m_canBeWatchedOnTV = xmlContainer._canBeWatchedOnTV;
            m_eventData.m_entryCost        = xmlContainer._costs._entry;

            m_capacity        = xmlContainer._eventCapacity;
            m_eventLength     = xmlContainer._eventLength;
            m_eventChances    = xmlContainer._chances;
            m_eventCosts      = xmlContainer._costs;
            m_eventIncentives = xmlContainer._incentives;
            m_userEventName   = xmlContainer._userEventName;

            SetUpIncentives(m_eventIncentives);
        }
示例#4
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _xmlContainerList.Items.Clear();
            ApplyAllXmlPanels();

            if (_editors != null)
            {
                foreach (XmlEditorPanel editor in _editors)
                {
                    if (editor._container != null)
                    {
                        CityEventXmlContainer _container = editor._container;

                        CheckBox _checkBox = new CheckBox();
                        _checkBox.Content  = _container._userEventName == "" ? _container._name : _container._userEventName;
                        _checkBox.Checked += (object sender2, RoutedEventArgs e2) =>
                        {
                            if (!_editorsToSave.Contains(editor))
                            {
                                _editorsToSave.Add(editor);
                                CheckToEnableSave();
                            }
                        };

                        _checkBox.Unchecked += (object sender2, RoutedEventArgs e2) =>
                        {
                            if (_editorsToSave.Contains(editor))
                            {
                                _editorsToSave.Remove(editor);
                                CheckToEnableSave();
                            }
                        };

                        _xmlContainerList.Items.Add(_checkBox);
                    }
                }
            }
        }
示例#5
0
        public bool ApplyXmlEvent()
        {
            bool success = true;

            _container = new CityEventXmlContainer()
            {
                _name                   = _eventName.Text,
                _userEventName          = _readableName.Text,
                _eventBuildingClassName = _buildingName.Text,

                _supportsRandomEvents = _randomEvents.IsChecked.HasValue ? _randomEvents.IsChecked.Value : false,
                _supportUserEvents    = _playerEvents.IsChecked.HasValue ? _playerEvents.IsChecked.Value : false,
                _canBeWatchedOnTV     = _watchedOnTv.IsChecked.HasValue ? _watchedOnTv.IsChecked.Value : false,
                _initialisedMessages  = TearDownText(_initialisedMessages),
                _beginMessages        = TearDownText(_startedMessages),
                _endedMessages        = TearDownText(_endedMessages),

                _chances = new CityEventXmlChances()
                {
                    _children = (int)(Math.Round(_children.Value)),
                    _teens    = (int)(Math.Round(_teens.Value)),
                    _adults   = (int)(Math.Round(_adults.Value)),
                    _seniors  = (int)(Math.Round(_seniors.Value)),

                    _lowWealth    = (int)(Math.Round(_lowWealth.Value)),
                    _mediumWealth = (int)(Math.Round(_mediumWealth.Value)),
                    _highWealth   = (int)(Math.Round(_highWealth.Value)),

                    _uneducated   = (int)(Math.Round(_uneducated.Value)),
                    _oneSchool    = (int)(Math.Round(_oneSchool.Value)),
                    _twoSchools   = (int)(Math.Round(_twoSchools.Value)),
                    _threeSchools = (int)(Math.Round(_threeSchools.Value)),

                    _badHappiness       = (int)(Math.Round(_badHappiness.Value)),
                    _poorHappiness      = (int)(Math.Round(_poorHappiness.Value)),
                    _goodHappiness      = (int)(Math.Round(_goodHappiness.Value)),
                    _excellentHappiness = (int)(Math.Round(_excellentHappiness.Value)),
                    _superbHappiness    = (int)(Math.Round(_superbHappiness.Value)),

                    _veryUnhappyWellbeing = (int)(Math.Round(_veryUnhappy.Value)),
                    _unhappyWellbeing     = (int)(Math.Round(_unhappy.Value)),
                    _satisfiedWellbeing   = (int)(Math.Round(_satisfied.Value)),
                    _happyWellbeing       = (int)(Math.Round(_happy.Value)),
                    _veryHappyWellbeing   = (int)(Math.Round(_veryHappy.Value)),
                },

                _costs = new CityEventXmlCosts()
                {
                },

                _incentives = new CityEventXmlIncentive[]
                {
                }
            };

            success = success && SafelyConvert.SafelyParseWithError(_capacity.Text, ref _container._eventCapacity, "capacity");
            success = success && SafelyConvert.SafelyParseWithError(_length.Text, ref _container._eventLength, "event length");

            success = success && SafelyConvert.SafelyParseWithError(_creationCost.Text, ref _container._costs._creation, "creation cost");
            success = success && SafelyConvert.SafelyParseWithError(_perHeadCost.Text, ref _container._costs._perHead, "cost per citizen");
            success = success && SafelyConvert.SafelyParseWithError(_advertSignCost.Text, ref _container._costs._advertisingSigns, "advertising sign cost");
            success = success && SafelyConvert.SafelyParseWithError(_advertTVCost.Text, ref _container._costs._advertisingTV, "advertising TV cost");
            success = success && SafelyConvert.SafelyParseWithError(_entryCost.Text, ref _container._costs._entry, "ticket cost");

            List <CityEventXmlIncentive> incentiveList = new List <CityEventXmlIncentive>();

            foreach (TabItem tab in _incentiveTabs.Items)
            {
                IncentiveEditorPanel editor = tab.Content as IncentiveEditorPanel;

                if (editor != null)
                {
                    success = success && editor.ApplyUserEvent();

                    if (success)
                    {
                        incentiveList.Add(editor._incentive);
                    }
                }
            }

            _container._incentives = incentiveList.ToArray();

            return(success);
        }
示例#6
0
        public void ParseXMLEvent()
        {
            XmlSerializer _serialiser = new XmlSerializer(typeof(CityEventXml));

            string toParse = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                             "<EventContainer xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" +
                             "  <Events>\n" +
                             "    <Event EventName=\"testEvent\" BuildingName=\"testBuilding\" UserEventName=\"Test event name\" Capacity=\"4321\" LengthInHours=\"12.3\" Force=\"true\" SupportsUserEvents=\"true\" CanBeWatchedOnTV=\"true\">\n" +
                             "      <InitialisedMessages>\n" +
                             "        <Message>Variable {0} displays the number of days until the event, eg \"An event in {0}!\" would display as \"An event in 1 day!\", or \"An event in less than a day!\" ingame. Place this where you need it.</Message>\n" +
                             "        <Message>Add messages here!</Message>\n" +
                             "        <Message>Add messages here!</Message>\n" +
                             "        <Message>Add messages here!</Message>\n" +
                             "      </InitialisedMessages>\n" +
                             "      <BeginMessages>\n" +
                             "        <Message>Add messages here!</Message>\n" +
                             "        <Message>Add messages here!</Message>\n" +
                             "      </BeginMessages>\n" +
                             "      <EndMessages>\n" +
                             "        <Message>Add messages here!</Message>\n" +
                             "        <Message>Add messages here!</Message>\n" +
                             "        <Message>Add messages here!</Message>\n" +
                             "      </EndMessages>\n" +
                             "      <ChanceOfAttendingPercentage>\n" +
                             "        <Males>1</Males>\n" +
                             "        <Females>2</Females>\n" +
                             "        <Children>3</Children>\n" +
                             "        <Teens>4</Teens>\n" +
                             "        <YoungAdults>5</YoungAdults>\n" +
                             "        <Adults>6</Adults>\n" +
                             "        <Seniors>7</Seniors>\n" +
                             "        <LowWealth>8</LowWealth>\n" +
                             "        <MediumWealth>9</MediumWealth>\n" +
                             "        <HighWealth>10</HighWealth>\n" +
                             "        <Uneducated>11</Uneducated>\n" +
                             "        <OneSchool>12</OneSchool>\n" +
                             "        <TwoSchools>13</TwoSchools>\n" +
                             "        <ThreeSchools>14</ThreeSchools>\n" +
                             "        <BadHappiness>15</BadHappiness>\n" +
                             "        <PoorHappiness>16</PoorHappiness>\n" +
                             "        <GoodHappiness>17</GoodHappiness>\n" +
                             "        <ExcellentHappiness>18</ExcellentHappiness>\n" +
                             "        <SuperbHappiness>19</SuperbHappiness>\n" +
                             "        <VeryUnhappyWellbeing>20</VeryUnhappyWellbeing>\n" +
                             "        <UnhappyWellbeing>21</UnhappyWellbeing>\n" +
                             "        <SatisfiedWellbeing>22</SatisfiedWellbeing>\n" +
                             "        <HappyWellbeing>23</HappyWellbeing>\n" +
                             "        <VeryHappyWellbeing>24</VeryHappyWellbeing>\n" +
                             "      </ChanceOfAttendingPercentage>\n" +
                             "      <Costs>\n" +
                             "        <Creation>1</Creation>\n" +
                             "        <PerHead>2</PerHead>\n" +
                             "        <AdvertisingSigns>3</AdvertisingSigns>\n" +
                             "        <AdvertisingTV>4</AdvertisingTV>\n" +
                             "        <EntryCost>5</EntryCost>\n" +
                             "      </Costs>\n" +
                             "      <Incentives>\n" +
                             "        <Incentive Name=\"testIncentive\" Cost=\"123\" ReturnCost=\"456\" ActiveWhenRandomEvent=\"true\">\n" +
                             "          <Description>Test description.</Description>\n" +
                             "          <PositiveEffect>3</PositiveEffect>\n" +
                             "          <NegativeEffect>5</NegativeEffect>\n" +
                             "        </Incentive>\n" +
                             "      </Incentives>\n" +
                             "    </Event>\n" +
                             "  </Events>\n" +
                             "</EventContainer>\n";

            StringReader _xmlReader = new StringReader(toParse);
            CityEventXml xmlEvent   = _serialiser.Deserialize(_xmlReader) as CityEventXml;

            Assert.IsNotNull(xmlEvent);

            CityEventXmlContainer currentContainer = xmlEvent._containedEvents[0];

            Assert.IsNotNull(currentContainer);
            Assert.AreEqual("testEvent", currentContainer._name);
            Assert.AreEqual("testBuilding", currentContainer._eventBuildingClassName);
            Assert.AreEqual("Test event name", currentContainer._userEventName);
            Assert.AreEqual(4321, currentContainer._eventCapacity);
            Assert.AreEqual(12.3, currentContainer._eventLength);
            Assert.IsTrue(currentContainer._force);
            Assert.IsTrue(currentContainer._canBeWatchedOnTV);
            Assert.IsTrue(currentContainer._supportUserEvents);

            Assert.AreEqual(4, currentContainer._initialisedMessages.Length);
            Assert.AreEqual(2, currentContainer._beginMessages.Length);
            Assert.AreEqual(3, currentContainer._endedMessages.Length);

            Assert.AreEqual(1, currentContainer._chances._males);
            Assert.AreEqual(2, currentContainer._chances._females);
            Assert.AreEqual(3, currentContainer._chances._children);
            Assert.AreEqual(4, currentContainer._chances._teens);
            Assert.AreEqual(5, currentContainer._chances._youngAdults);
            Assert.AreEqual(6, currentContainer._chances._adults);
            Assert.AreEqual(7, currentContainer._chances._seniors);
            Assert.AreEqual(8, currentContainer._chances._lowWealth);
            Assert.AreEqual(9, currentContainer._chances._mediumWealth);
            Assert.AreEqual(10, currentContainer._chances._highWealth);
            Assert.AreEqual(11, currentContainer._chances._uneducated);
            Assert.AreEqual(12, currentContainer._chances._oneSchool);
            Assert.AreEqual(13, currentContainer._chances._twoSchools);
            Assert.AreEqual(14, currentContainer._chances._threeSchools);
            Assert.AreEqual(15, currentContainer._chances._badHappiness);
            Assert.AreEqual(16, currentContainer._chances._poorHappiness);
            Assert.AreEqual(17, currentContainer._chances._goodHappiness);
            Assert.AreEqual(18, currentContainer._chances._excellentHappiness);
            Assert.AreEqual(19, currentContainer._chances._superbHappiness);
            Assert.AreEqual(20, currentContainer._chances._veryUnhappyWellbeing);
            Assert.AreEqual(21, currentContainer._chances._unhappyWellbeing);
            Assert.AreEqual(22, currentContainer._chances._satisfiedWellbeing);
            Assert.AreEqual(23, currentContainer._chances._happyWellbeing);
            Assert.AreEqual(24, currentContainer._chances._veryHappyWellbeing);

            Assert.AreEqual(1, currentContainer._costs._creation);
            Assert.AreEqual(2, currentContainer._costs._perHead);
            Assert.AreEqual(3, currentContainer._costs._advertisingSigns);
            Assert.AreEqual(4, currentContainer._costs._advertisingTV);
            Assert.AreEqual(5, currentContainer._costs._entry);

            Assert.IsNotNull(currentContainer._incentives);
            Assert.IsNotNull(currentContainer._incentives[0]);

            CityEventXmlIncentive currentIncentive = currentContainer._incentives[0];

            Assert.AreEqual("testIncentive", currentIncentive._name);
            Assert.AreEqual(123, currentIncentive._cost);
            Assert.AreEqual(456, currentIncentive._returnCost);
            Assert.IsTrue(currentIncentive._activeWhenRandomEvent);
            Assert.AreEqual("Test description.", currentIncentive._description);
            Assert.AreEqual(3, currentIncentive._positiveEffect);
            Assert.AreEqual(5, currentIncentive._negativeEffect);
        }