Пример #1
0
        private void HandleAddStateKeyframe(object sender, EventArgs e)
        {
            string whyIsntValid = GetWhyAddingTimedStateIsInvalid();

            if (!string.IsNullOrEmpty(whyIsntValid))
            {
                MessageBox.Show(whyIsntValid);
            }
            else
            {
                ListBoxMessageBox lbmb = new ListBoxMessageBox();
                lbmb.RequiresSelection = true;
                lbmb.Message           = "Select a state";

                var element = SelectedState.Self.SelectedElement;

                foreach (var state in element.States)
                {
                    lbmb.Items.Add(state.Name);
                }

                foreach (var category in element.Categories)
                {
                    foreach (var state in category.States)
                    {
                        lbmb.Items.Add(category.Name + "/" + state.Name);
                    }
                }


                var dialogResult = lbmb.ShowDialog();

                if (dialogResult.HasValue && dialogResult.Value)
                {
                    var item = lbmb.SelectedItem;

                    var newVm = new AnimatedKeyframeViewModel()
                    {
                        StateName = (string)item,
                        // User just selected the state, so it better be valid!
                        HasValidState     = true,
                        InterpolationType = FlatRedBall.Glue.StateInterpolation.InterpolationType.Linear,
                        Easing            = FlatRedBall.Glue.StateInterpolation.Easing.Out
                    };

                    newVm.AvailableStates  = this.AvailableStates;
                    newVm.PropertyChanged += HandleAnimatedKeyframePropertyChanged;

                    if (mCurrentViewModel.SelectedAnimation.SelectedKeyframe != null)
                    {
                        // put this after the current animation
                        newVm.Time = mCurrentViewModel.SelectedAnimation.SelectedKeyframe.Time + 1f;
                    }
                    else if (mCurrentViewModel.SelectedAnimation.Keyframes.Count != 0)
                    {
                        newVm.Time = mCurrentViewModel.SelectedAnimation.Keyframes.Last().Time + 1f;
                    }

                    mCurrentViewModel.SelectedAnimation.Keyframes.Add(newVm);

                    mCurrentViewModel.SelectedAnimation.Keyframes.BubbleSort();

                    mCurrentViewModel.SelectedAnimation.SelectedKeyframe = newVm;
                }
            }
        }
Пример #2
0
        public void DisplayReferencesTo(ElementSave element)
        {
            var           elementName = element.Name;
            List <object> references  = new List <object>();

            foreach (var screen in ProjectState.Self.GumProjectSave.Screens)
            {
                foreach (var instanceInScreen in screen.Instances)
                {
                    if (instanceInScreen.BaseType == elementName)
                    {
                        references.Add(instanceInScreen);
                    }
                }

                foreach (var variable in screen.DefaultState.Variables.Where(item => item.GetRootName() == "Contained Type"))
                {
                    if (variable.Value as string == elementName)
                    {
                        references.Add(variable);
                    }
                }
            }

            foreach (var component in ProjectState.Self.GumProjectSave.Components)
            {
                if (component.BaseType == elementName)
                {
                    references.Add(component);
                }

                foreach (var instanceInScreen in component.Instances)
                {
                    if (instanceInScreen.BaseType == elementName)
                    {
                        references.Add(instanceInScreen);
                    }
                }

                foreach (var variable in component.DefaultState.Variables.Where(item => item.GetRootName() == "Contained Type"))
                {
                    if (variable.Value as string == elementName)
                    {
                        references.Add(variable);
                    }
                }
            }

            if (references.Count > 0)
            {
                //var stringBuilder = new StringBuilder();
                //stringBuilder.AppendLine($"The following objects reference {element}");
                //foreach(var reference in references)
                //{
                //    stringBuilder.AppendLine(reference.ToString());
                //}

                //GumCommands.Self.GuiCommands.ShowMessage(stringBuilder.ToString());

                ListBoxMessageBox lbmb = new ListBoxMessageBox();
                lbmb.RequiresSelection = true;
                lbmb.Message           = $"The following objects reference {element}";
                lbmb.ItemSelected     += (not, used) =>
                {
                    var selectedItem = lbmb.SelectedItem;

                    if (selectedItem is InstanceSave instance)
                    {
                        SelectedState.Self.SelectedInstance = instance;
                    }
                    else if (selectedItem is ElementSave selectedElement)
                    {
                        SelectedState.Self.SelectedElement = selectedElement;
                    }
                    else if (selectedItem is VariableSave variable)
                    {
                        ElementSave foundElement = ObjectFinder.Self.GumProjectSave.Screens
                                                   .FirstOrDefault(item => item.DefaultState.Variables.Contains(variable));
                        if (foundElement == null)
                        {
                            foundElement = ObjectFinder.Self.GumProjectSave.Components
                                           .FirstOrDefault(item => item.DefaultState.Variables.Contains(variable));
                        }
                        if (foundElement != null)
                        {
                            // what's the instance?
                            var instanceWithVariable = foundElement.GetInstance(variable.SourceObject);

                            if (instanceWithVariable != null)
                            {
                                SelectedState.Self.SelectedInstance = instanceWithVariable;
                            }
                        }
                    }
                };
                foreach (var reference in references)
                {
                    lbmb.Items.Add(reference);
                }
                lbmb.HideCancelNoDialog();
                lbmb.Show();
            }
            else
            {
                GumCommands.Self.GuiCommands.ShowMessage($"{element} is not referenced by any other Screen/Component");
            }
        }