public static void UpdateAllDerivedElementFromBaseValues(bool performSave, bool regenerateCode)
{
if (EditorLogic.CurrentEntitySave != null)
{
List<EntitySave> derivedEntities = ObjectFinder.Self.GetAllEntitiesThatInheritFrom(EditorLogic.CurrentEntitySave.Name);
List<NamedObjectSave> nosList = ObjectFinder.Self.GetAllNamedObjectsThatUseEntity(EditorLogic.CurrentEntitySave.Name);
for (int i = 0; i < derivedEntities.Count; i++)
{
EntitySave entitySave = derivedEntities[i];
nosList.AddRange(ObjectFinder.Self.GetAllNamedObjectsThatUseEntity(entitySave.Name));
entitySave.UpdateFromBaseType();
// Update the tree nodes
EntityTreeNode treeNode = GlueState.Self.Find.EntityTreeNode(entitySave);
treeNode.UpdateReferencedTreeNodes(performSave);
if (regenerateCode)
{
CodeWriter.GenerateCode(entitySave);
}
}
foreach (NamedObjectSave nos in nosList)
{
nos.UpdateCustomProperties();
IElement element = nos.GetContainer();
if (element != null)
{
CodeWriter.GenerateCode(element);
}
}
}
else if (EditorLogic.CurrentScreenSave != null)
{
List<ScreenSave> derivedScreens = ObjectFinder.Self.GetAllScreensThatInheritFrom(EditorLogic.CurrentScreenSave.Name);
for (int i = 0; i < derivedScreens.Count; i++)
{
ScreenSave screenSave = derivedScreens[i];
screenSave.UpdateFromBaseType();
ScreenTreeNode treeNode = GlueState.Self.Find.ScreenTreeNode(screenSave);
treeNode.UpdateReferencedTreeNodes(performSave);
if (regenerateCode)
{
CodeWriter.GenerateCode(screenSave);
}
}
}
else
{
if (EditorLogic.CurrentNamedObject == null)
{
// This means the value is being set on the Screen itself
throw new NotImplementedException();
}
}
}