예제 #1
0
        private void PopulateCompassEditor(string direction)
        {
            // Populate the Compass Editor (top-right) in response to a selection change in
            // either the compass or exits list. There are four possibilities for direction:
            //   - an existing compass direction
            //   - a new compass direction
            //   - not a compass direction
            //   - null

            if (direction == null)
            {
                CompassEditor.Mode = CompassEditorControl.CompassEditorMode.NoSelection;
                return;
            }
            else if (!m_directionNames.Contains(direction))
            {
                CompassEditor.Mode = CompassEditorControl.CompassEditorMode.NotACompassExit;
                return;
            }
            else if (m_directionListIndexes.ContainsKey(direction))
            {
                CompassEditor.Mode = CompassEditorControl.CompassEditorMode.ExistingCompassExit;
                ExitListData data = (ExitListData)listView.Items[m_directionListIndexes[direction]];
                CompassEditor.toName.Text = data.To;
                CompassEditor.ExitID = data.Name;
                CompassEditor.Destination = data.To;
                CompassEditor.DirectionName = direction;

                if (data.LookOnly)
                {
                    CompassEditor.CorrespondingExitExists = false;
                    CompassEditor.AllowCreateInverseExit = false;
                }
                else
                {
                    // See if a corresponding exit exists in the "to" room
                    bool exitsInverseExists = ExitsInverseExists(CompassEditor.Destination, direction);
                    CompassEditor.CorrespondingExitExists = exitsInverseExists;
                    CompassEditor.AllowCreateInverseExit = !exitsInverseExists;
                }
            }
            else
            {
                CompassEditor.Mode = CompassEditorControl.CompassEditorMode.NewCompassExit;
                CompassEditor.to.Items.Clear();
                foreach (string objectName in m_controller.GetObjectNames("object")
                    .Where(n => n != m_data.Name)
                    .OrderBy(n => n, StringComparer.CurrentCultureIgnoreCase))
                {
                    CompassEditor.to.Items.Add(objectName);
                }
                CompassEditor.create.IsEnabled = false;
                CompassEditor.to.IsEnabled = true;
                CompassEditor.DirectionName = direction;
                CompassEditor.AllowCreateInverseExit = true;
            }

            CompassEditor.direction.Text = TextAdventures.Utility.Strings.CapFirst(direction);
            CompassEditor.chkCorresponding.IsChecked = DefaultCreateInverseSetting;
        }
예제 #2
0
        public void Populate(IEditorData data)
        {
            m_data = data;

            listView.Items.Clear();
            compassControl.Clear();
            m_directionListIndexes.Clear();
            CompassEditor.SimpleMode = m_controller.SimpleMode;
            PopulateCompassEditor(null);

            if (data != null)
            {
                IEnumerable<string> exits = m_controller.GetObjectNames("exit", data.Name, true);
                foreach (string exit in exits)
                {
                    IEditorData exitData = m_controller.GetEditorData(exit);

                    ExitListData exitListData = new ExitListData
                    {
                        Name = exitData.Name,
                        ToRoom = exitData.GetAttribute("to") as IEditableObjectReference,
                        Alias = exitData.GetAttribute("alias") as string,
                        LookOnly = (exitData.GetAttribute("lookonly") as bool? == true)
                    };

                    int addedIndex = listView.Items.Add(exitListData);

                    if (m_directionNames.Contains(exitListData.Alias))
                    {
                        int direction = m_directionNames.IndexOf(exitListData.Alias);
                        compassControl.Populate(direction, exitListData.To, exitListData.LookOnly);
                        m_directionListIndexes[exitListData.Alias] = addedIndex;
                    }
                }
            }
        }