Ejemplo n.º 1
0
        public static EntityManagementValues ToModel(MainViewModel viewModel)
        {
            EntityManagementValues model = new EntityManagementValues();

            model.Name = viewModel.EntityName;

            model.PropertyManagementMode = viewModel.EntityManagementMode;

            model.SelectedProperties.AddRange(viewModel.EntityManagedProperties);

            foreach (var instanceViewModel in viewModel.Instances)
            {
                InstanceManagementValues instanceModel = new InstanceManagementValues();
                instanceModel.Name = instanceViewModel.Name;

                instanceModel.PropertyManagementMode =
                    instanceViewModel.PropertyManagementMode;

                instanceModel.SelectedProperties.AddRange(
                    instanceViewModel.SelectedProperties);

                model.InstanceManagementValuesList.Add(
                    instanceModel);
            }

            return(model);
        }
        public static MainViewModel ToViewModel(EntityManagementValues model)
        {
            MainViewModel viewModel = new MainViewModel();

            viewModel.Entity = FlatRedBall.Glue.Elements.ObjectFinder.Self.GetEntitySave(model.Name);


            viewModel.EntityManagementMode = model.PropertyManagementMode;

            foreach (var propertyName in model.SelectedProperties)
            {
                viewModel.EntityManagedProperties.Add(propertyName);
            }

            foreach (var instanceModel in model.InstanceManagementValuesList)
            {
                var instanceViewModel = new InstanceViewModel();
                instanceViewModel.Name = instanceModel.Name;

                instanceViewModel.PropertyManagementMode = instanceModel.PropertyManagementMode;

                instanceViewModel.IsContainer = instanceModel.IsContainer;

                instanceViewModel.SelectedProperties.AddRange(instanceModel.SelectedProperties);

                viewModel.Instances.Add(instanceViewModel);
            }

            return(viewModel);
        }
        private void GenerateEntitySaveUpdateDependencies(ICodeBlock codeBlock, IElement element)
        {
            EntityManagementValues managementValues = Values?.EntityManagementValueList?.FirstOrDefault(item => item.Name == element.Name);

            if (managementValues != null)
            {
                var innerCodeBlock = new CodeBlockBase(null);

                GenerateEntityUpdateDependencies(innerCodeBlock, element, managementValues);

                GenerateNamedObjectUpdateDependencies(innerCodeBlock, element, managementValues);

                var doAnyNamedObjectsHaveUpdateDependencies = innerCodeBlock.BodyCodeLines.Any();



                if (doAnyNamedObjectsHaveUpdateDependencies)
                {
                    var ifBlock = codeBlock.If("this.LastDependencyUpdate != currentTime");
                    // todo - need to call base here if we actually want to update dependencies
                    var shouldCallBase =
                        managementValues.PropertyManagementMode == Enums.PropertyManagementMode.FullyManaged ||
                        managementValues.SelectedProperties.Contains("Attachment");

                    if (shouldCallBase)
                    {
                        ifBlock.Line("base.UpdateDependencies(currentTime);");
                    }

                    ifBlock.Line("this.mLastDependencyUpdate = currentTime;");

                    ifBlock.InsertBlock(innerCodeBlock);
                }
            }
        }
Ejemplo n.º 4
0
        private static void AddInstanceManagementValuesFor(EntityManagementValues values, NamedObjectSave instance)
        {
            var instanceValues = new InstanceManagementValues();

            instanceValues.Name = instance.InstanceName;

            UpdateInstanceValuesToInstance(instanceValues, instance);


            values.InstanceManagementValuesList.Add(instanceValues);
        }
        private void GenerateScreenSaveUpdateDependencies(ICodeBlock codeBlock, IElement element)
        {
            // Only do top level and lists, not contents of lists, or else they might get update dependencies called 2 times
            //foreach (var namedObject in element.AllNamedObjects)
            foreach (var namedObject in element.NamedObjects)
            {
                var isEntity = namedObject.SourceType == SourceType.Entity;

                EntitySave entity = null;

                bool isList = false;

                if (isEntity)
                {
                    entity = ObjectFinder.Self.GetEntitySave(namedObject.SourceClassType);
                }
                else if (namedObject.SourceType == SourceType.FlatRedBallType && namedObject.SourceClassType == "PositionedObjectList<T>")
                {
                    var classType = namedObject.SourceClassGenericType;

                    entity = ObjectFinder.Self.GetEntitySave(classType);

                    if (entity != null)
                    {
                        isList = true;
                    }
                }
                if (entity != null)
                {
                    EntityManagementValues managementValues =
                        Values?.EntityManagementValueList?.FirstOrDefault(item => item.Name == entity.Name);

                    bool shouldCallUpdateDependencies = managementValues != null &&
                                                        managementValues.SelectedProperties.Contains("Attachment");

                    if (shouldCallUpdateDependencies)
                    {
                        if (isList)
                        {
                            var forBlock = codeBlock.For($"int i = 0; i < {namedObject.FieldName}.Count; i++");
                            forBlock.Line($"{namedObject.FieldName}[i].UpdateDependencies(currentTime);");
                        }
                        else
                        {
                            codeBlock.Line($"{namedObject.FieldName}.UpdateDependencies(currentTime);");
                        }
                    }
                }
            }
        }
Ejemplo n.º 6
0
        private EntityManagementValues GetOrCreateEntityManagementValuesFor(EntitySave entitySave)
        {
            EntityManagementValues values = model.EntityManagementValueList.FirstOrDefault(item => item.Name == entitySave.Name);

            if (values == null)
            {
                values      = new EntityManagementValues();
                values.Name = entitySave.Name;
                model.EntityManagementValueList.Add(values);

                foreach (var instance in entitySave.AllNamedObjects)
                {
                    AddInstanceManagementValuesFor(values, instance);
                }
            }

            if (entitySave.IsManuallyUpdated)
            {
                values.PropertyManagementMode = Enums.PropertyManagementMode.SelectManagedProperties;
            }
            else
            {
                values.PropertyManagementMode = Enums.PropertyManagementMode.FullyManaged;
            }

            foreach (var instance in entitySave.AllNamedObjects)
            {
                var instanceValues = values.InstanceManagementValuesList.FirstOrDefault(
                    item => item.Name == instance.InstanceName);

                // Make sure there are no missing instance values
                if (instanceValues == null)
                {
                    // an instance was added, but there is no matching model here:
                    AddInstanceManagementValuesFor(values, instance);

                    instanceValues = values.InstanceManagementValuesList.FirstOrDefault(
                        item => item.Name == instance.InstanceName);
                }

                UpdateInstanceValuesToInstance(instanceValues, instance);
            }

            return(values);
        }
        private void GenerateNamedObjectUpdateDependencies(ICodeBlock codeBlock, IElement element, EntityManagementValues managementValues)
        {
            foreach (var namedObject in element.AllNamedObjects)
            {
                var isManuallyUpdated = namedObject.IsManuallyUpdated;

                InstanceManagementValues instanceManagementValues = null;

                if (isManuallyUpdated)
                {
                    instanceManagementValues = managementValues.InstanceManagementValuesList.FirstOrDefault(item => item.Name == namedObject.InstanceName);
                }

                var shouldGenerateUpdateDependenciesForObject =
                    namedObject.IsContainer == false &&
                    instanceManagementValues?.SelectedProperties?.Count > 0;

                if (shouldGenerateUpdateDependenciesForObject)
                {
                    GenerateVariableUpdateDependenciesFor(codeBlock, namedObject, instanceManagementValues);
                }
            }
        }
        private void GenerateEntityUpdateDependencies(CodeBlockBase codeBlock, IElement element, EntityManagementValues managementValues)
        {
            var ati = GetAssetTypeInfoFor(element);

            string name = "this";

            if (ati?.RuntimeTypeName == "Text")
            {
                GenerateTextVariableUpdateDependenciesFor(codeBlock, name, managementValues.SelectedProperties);
            }
            else if (ati?.RuntimeTypeName == "Sprite")
            {
                GenerateSpriteVariableUpdateDependenciesFor(codeBlock, name, managementValues.SelectedProperties);
            }
        }