private static DynamicPanelInfo CreateDynamicPanelInfo(UIDynamicPanels __instance, UIView view, string customWorldInfoPanelName, string customOldWorldInfoPanelName)
{
DynamicPanelInfo dynamicPanelInfo = new();
var customOldWorldInfoPanel = Array.Find(__instance.m_DynamicPanels, element => element.name == customOldWorldInfoPanelName);
if(customOldWorldInfoPanel == null)
{
return null;
}
var customOldUIClone = Object.Instantiate(customOldWorldInfoPanel.instance);
customOldUIClone.gameObject.name = customWorldInfoPanelName;
typeof(DynamicPanelInfo).GetField("m_Name", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(dynamicPanelInfo, customWorldInfoPanelName);
typeof(DynamicPanelInfo).GetField("m_PanelRoot", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(dynamicPanelInfo, customOldUIClone);
typeof(DynamicPanelInfo).GetField("m_SingleInstance", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(dynamicPanelInfo, true);
typeof(DynamicPanelInfo).GetField("m_IsModal", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(dynamicPanelInfo, false);
dynamicPanelInfo.viewOwner = view;
GameObject gameObject = Object.Instantiate(dynamicPanelInfo.panelRoot.gameObject);
var old_component = gameObject.GetComponent<UniqueFactoryWorldInfoPanel>();
Object.DestroyImmediate(old_component);
if(customWorldInfoPanelName == "NewUniqueFactoryWorldInfoPanel")
{
var new_component = gameObject.AddComponent<NewUniqueFactoryWorldInfoPanel>();
PrefabUtil.TryCopyAttributes<BuildingWorldInfoPanel>(old_component, new_component, false);
}
else if(customWorldInfoPanelName == "RestaurantAIWorldInfoPanel")
{
var new_component = gameObject.AddComponent<RestaurantAIWorldInfoPanel>();
PrefabUtil.TryCopyAttributes<BuildingWorldInfoPanel>(old_component, new_component, false);
}
gameObject.hideFlags = HideFlags.DontSave;
gameObject.name = "(Library) " + customWorldInfoPanelName;
UIComponent uicomponent = view.AttachUIComponent(gameObject);
uicomponent.isVisible = false;
dynamicPanelInfo.AddInstance(uicomponent);
return dynamicPanelInfo;
}