void Update() { if (!initializedBuildingsPanel) { sceneExplorer = FindObjectOfType <SceneExplorer>(); buildingsBufferRefChain = new ReferenceChain(); buildingsBufferRefChain = buildingsBufferRefChain.Add(BuildingManager.instance.gameObject); buildingsBufferRefChain = buildingsBufferRefChain.Add(BuildingManager.instance); buildingsBufferRefChain = buildingsBufferRefChain.Add(typeof(BuildingManager).GetField("m_buildings")); buildingsBufferRefChain = buildingsBufferRefChain.Add(typeof(Array16 <Building>).GetField("m_buffer")); zonedBuildingInfoPanel = GameObject.Find("(Library) ZonedBuildingWorldInfoPanel").GetComponent <ZonedBuildingWorldInfoPanel>(); if (zonedBuildingInfoPanel != null) { AddZonedBuildingPanelControls(); initializedBuildingsPanel = true; } } if (zonedBuildingInfoPanel.component.isVisible) { InstanceID instance = Util.GetPrivate <InstanceID>(zonedBuildingInfoPanel, "m_InstanceID"); var building = BuildingManager.instance.m_buildings.m_buffer[instance.Building]; zonedBuildingAssetNameLabel.text = "AssetName: " + building.Info.name; } }
void Update() { var hoveredLocal = hoveredComponent; if (drawDebugInfo && hoveredLocal != null) { if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.F)) { var uiView = FindObjectOfType <UIView>(); if (uiView == null) { return; } var current = hoveredLocal; var refChain = new ReferenceChain(); refChain = refChain.Add(current); while (current != null) { refChain = refChain.Add(current.gameObject); current = current.parent; } ; refChain = refChain.Add(uiView.gameObject); var sceneExplorer = FindObjectOfType <SceneExplorer>(); sceneExplorer.ExpandFromRefChain(refChain.Reverse); sceneExplorer.visible = true; } if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.G)) { if (hoveredComponents.Count > 1 && hoveredComponent != null) { var index = hoveredComponents.IndexOf(hoveredComponent); var newIndex = (index + hoveredComponents.Count + 1) % hoveredComponents.Count; hoveredComponent = hoveredComponents[newIndex]; } } } }
void AddZonedBuildingPanelControls() { zonedBuildingInfoPanel.component.Find <UILabel>("AllGood").isVisible = false; zonedBuildingInfoPanel.component.Find <UIPanel>("ProblemsPanel").isVisible = false; zonedBuildingAssetNameLabel = CreateLabel ( "AssetName: <>", 160, 24, zonedBuildingInfoPanel.component, new Vector3(8.0f, 48.0f, 0.0f), UIAlignAnchor.TopLeft ); zonedBuildingShowExplorerButton = CreateButton ( "Find in SceneExplorer", 160, 24, zonedBuildingInfoPanel.component, new Vector3(-8.0f, 100.0f, 0.0f), UIAlignAnchor.TopRight, (component, param) => { InstanceID instance = Util.GetPrivate <InstanceID>(zonedBuildingInfoPanel, "m_InstanceID"); sceneExplorer.ExpandFromRefChain(buildingsBufferRefChain.Add(instance.Building)); sceneExplorer.visible = true; } ); zonedBuildingDumpMeshTextureButton = CreateButton ( "Dump mesh+texture", 160, 24, zonedBuildingInfoPanel.component, new Vector3(-8.0f, 132.0f, 0.0f), UIAlignAnchor.TopRight, (component, param) => { InstanceID instance = Util.GetPrivate <InstanceID>(zonedBuildingInfoPanel, "m_InstanceID"); var building = BuildingManager.instance.m_buildings.m_buffer[instance.Building]; var material = building.Info.m_material; var mesh = building.Info.m_mesh; var assetName = building.Info.name; Log.Warning(String.Format("Dumping asset \"{0}\"", assetName)); Util.DumpMeshToOBJ(mesh, String.Format("{0}.obj", assetName)); Util.DumpTextureToPNG(material.GetTexture("_MainTex"), String.Format("{0}_MainTex.png", assetName)); Util.DumpTextureToPNG(material.GetTexture("_XYSMap"), String.Format("{0}_xyz.png", assetName)); Util.DumpTextureToPNG(material.GetTexture("_ACIMap"), String.Format("{0}_aci.png", assetName)); Log.Warning("Done!"); } ); }
void AddVehiclePanelControls(WorldInfoPanel infoPanel, out UILabel assetNameLabel, out UIButton showExplorerButton, out UIButton dumpMeshTextureButton) { infoPanel.component.Find <UILabel>("Type").isVisible = false; assetNameLabel = CreateLabel ( "AssetName: <>", 160, 24, infoPanel.component, new Vector3(8.0f, 48.0f, 0.0f), UIAlignAnchor.TopLeft ); showExplorerButton = CreateButton ( "Find in SceneExplorer", 160, 24, infoPanel.component, new Vector3(-8.0f, -57.0f, 0.0f), UIAlignAnchor.BottomRight, (component, param) => { InstanceID instance = ReflectionUtil.GetPrivate <InstanceID>(infoPanel, "m_InstanceID"); if (instance.Vehicle == 0) { sceneExplorer.ExpandFromRefChain(vehiclesParkedBufferRefChain.Add(instance.ParkedVehicle)); } else { sceneExplorer.ExpandFromRefChain(vehiclesBufferRefChain.Add(instance.Vehicle)); } sceneExplorer.visible = true; } ); dumpMeshTextureButton = CreateButton ( "Dump asset", 160, 24, infoPanel.component, new Vector3(-8.0f, -25.0f, 0.0f), UIAlignAnchor.BottomRight, (component, param) => { var instance = ReflectionUtil.GetPrivate <InstanceID>(infoPanel, "m_InstanceID"); var vehicleInfo = instance.Vehicle == 0 ? VehicleManager.instance.m_parkedVehicles.m_buffer[instance.ParkedVehicle].Info : VehicleManager.instance.m_vehicles.m_buffer[instance.Vehicle].Info; var assetName = vehicleInfo.name; DumpUtil.DumpAsset(assetName, vehicleInfo.m_mesh, vehicleInfo.m_material, vehicleInfo.m_lodMesh, vehicleInfo.m_lodMaterial); } ); }
void AddBuildingPanelControls(WorldInfoPanel infoPanel, out UILabel assetNameLabel, out UIButton showExplorerButton, Vector3 showExplorerButtonOffset, out UIButton dumpMeshTextureButton, Vector3 dumpMeshTextureButtonOffset) { infoPanel.component.Find <UILabel>("AllGood").isVisible = false; infoPanel.component.Find <UIPanel>("ProblemsPanel").isVisible = false; assetNameLabel = CreateLabel ( "AssetName: <>", 160, 24, infoPanel.component, new Vector3(8.0f, 48.0f, 0.0f), UIAlignAnchor.TopLeft ); showExplorerButton = CreateButton ( "Find in SceneExplorer", 160, 24, infoPanel.component, showExplorerButtonOffset, UIAlignAnchor.TopRight, (component, param) => { InstanceID instance = ReflectionUtil.GetPrivate <InstanceID>(infoPanel, "m_InstanceID"); sceneExplorer.ExpandFromRefChain(buildingsBufferRefChain.Add(instance.Building)); sceneExplorer.visible = true; } ); dumpMeshTextureButton = CreateButton ( "Dump asset", 160, 24, infoPanel.component, dumpMeshTextureButtonOffset, UIAlignAnchor.TopRight, (component, param) => { var instance = ReflectionUtil.GetPrivate <InstanceID>(infoPanel, "m_InstanceID"); var building = BuildingManager.instance.m_buildings.m_buffer[instance.Building]; var assetName = building.Info.name; DumpUtil.DumpAsset(assetName, building.Info.m_mesh, building.Info.m_material, building.Info.m_lodMesh, building.Info.m_lodMaterial); } ); }
void AddCitizenPanelControls(WorldInfoPanel infoPanel, out UILabel assetNameLabel, out UIButton showExplorerButton, Vector3 showExplorerButtonOffset, out UIButton showInstanceButton, Vector3 showInstanceButtonOffset, out UIButton showUnitButton, Vector3 showUniteButtonOffset ) { assetNameLabel = CreateLabel ( "AssetName: <>", 160, 24, infoPanel.component, new Vector3(8.0f, 48.0f, 0.0f), UIAlignAnchor.TopLeft ); showExplorerButton = CreateButton ( "Find citizen in SE", 160, 24, infoPanel.component, showExplorerButtonOffset, UIAlignAnchor.TopRight, (component, param) => { InstanceID instance = ReflectionUtil.GetPrivate <InstanceID>(infoPanel, "m_InstanceID"); if (instance.Type == InstanceType.CitizenInstance) { var ci = CitizenManager.instance.m_instances.m_buffer[instance.CitizenInstance]; if (ci.m_citizen == 0) { return; } sceneExplorer.ExpandFromRefChain(citizenInstancesBufferRefChain.Add((int)ci.m_citizen)); } else if (instance.Type == InstanceType.Citizen) { sceneExplorer.ExpandFromRefChain(citizensBufferRefChain.Add((int)instance.Citizen)); } sceneExplorer.visible = true; } ); showInstanceButton = CreateButton ( "Find instance in SE ", 160, 24, infoPanel.component, showInstanceButtonOffset, UIAlignAnchor.TopRight, (component, param) => { var instance = ReflectionUtil.GetPrivate <InstanceID>(infoPanel, "m_InstanceID"); if (instance.Type == InstanceType.CitizenInstance) { sceneExplorer.ExpandFromRefChain(citizenInstancesBufferRefChain.Add(instance.CitizenInstance)); sceneExplorer.visible = true; } else if (instance.Type == InstanceType.Citizen) { for (var index = 0; index < CitizenManager.instance.m_instances.m_buffer.Length; index++) { var ci = CitizenManager.instance.m_instances.m_buffer[index]; if (ci.m_flags == CitizenInstance.Flags.None || ci.Info == null || ci.m_citizen != instance.Citizen) { continue; } sceneExplorer.ExpandFromRefChain(citizenInstancesBufferRefChain.Add(index)); sceneExplorer.visible = true; break; } } } ); showUnitButton = CreateButton ( "Find unit in SE ", 160, 24, infoPanel.component, showUniteButtonOffset, UIAlignAnchor.TopRight, (component, param) => { var instance = ReflectionUtil.GetPrivate <InstanceID>(infoPanel, "m_InstanceID"); if (instance.Type == InstanceType.CitizenInstance) { var ci = CitizenManager.instance.m_instances.m_buffer[instance.CitizenInstance]; var citizen = ci.m_citizen; if (citizen == 0) { return; } for (var index = 0; index < CitizenManager.instance.m_units.m_buffer.Length; index++) { var cu = CitizenManager.instance.m_units.m_buffer[index]; if (cu.m_flags == CitizenUnit.Flags.None) { continue; } uint unit = 0; if (cu.m_citizen0 == citizen) { unit = cu.m_citizen0; } else if (cu.m_citizen1 == citizen) { unit = cu.m_citizen1; } else if (cu.m_citizen2 == citizen) { unit = cu.m_citizen2; } else if (cu.m_citizen3 == citizen) { unit = cu.m_citizen3; } else if (cu.m_citizen4 == citizen) { unit = cu.m_citizen4; } if (unit == 0) { continue; } sceneExplorer.ExpandFromRefChain(citizensUnitsBufferRefChain.Add(index)); sceneExplorer.visible = true; break; } sceneExplorer.visible = true; } else if (instance.Type == InstanceType.Citizen) { if (instance.Citizen == 0) { return; } for (var index = 0; index < CitizenManager.instance.m_units.m_buffer.Length; index++) { var cu = CitizenManager.instance.m_units.m_buffer[index]; if (cu.m_flags == CitizenUnit.Flags.None) { continue; } uint unit = 0; if (cu.m_citizen0 == instance.Citizen) { unit = cu.m_citizen0; } else if (cu.m_citizen1 == instance.Citizen) { unit = cu.m_citizen1; } else if (cu.m_citizen2 == instance.Citizen) { unit = cu.m_citizen2; } else if (cu.m_citizen3 == instance.Citizen) { unit = cu.m_citizen3; } else if (cu.m_citizen4 == instance.Citizen) { unit = cu.m_citizen4; } if (unit == 0) { continue; } sceneExplorer.ExpandFromRefChain(citizensUnitsBufferRefChain.Add(index)); sceneExplorer.visible = true; break; } } } ); }
void Update() { if (!initializedBuildingsPanel) { sceneExplorer = FindObjectOfType<SceneExplorer>(); buildingsBufferRefChain = new ReferenceChain(); buildingsBufferRefChain = buildingsBufferRefChain.Add(BuildingManager.instance.gameObject); buildingsBufferRefChain = buildingsBufferRefChain.Add(BuildingManager.instance); buildingsBufferRefChain = buildingsBufferRefChain.Add(typeof(BuildingManager).GetField("m_buildings")); buildingsBufferRefChain = buildingsBufferRefChain.Add(typeof(Array16<Building>).GetField("m_buffer")); zonedBuildingInfoPanel = GameObject.Find("(Library) ZonedBuildingWorldInfoPanel").GetComponent<ZonedBuildingWorldInfoPanel>(); if (zonedBuildingInfoPanel != null) { AddZonedBuildingPanelControls(); initializedBuildingsPanel = true; } } if (zonedBuildingInfoPanel.component.isVisible) { InstanceID instance = Util.GetPrivate<InstanceID>(zonedBuildingInfoPanel, "m_InstanceID"); var building = BuildingManager.instance.m_buildings.m_buffer[instance.Building]; zonedBuildingAssetNameLabel.text = "AssetName: " + building.Info.name; } }
void Update() { if (!initializedZonedBuildingsPanel) { sceneExplorer = FindObjectOfType<SceneExplorer>(); buildingsBufferRefChain = new ReferenceChain(); buildingsBufferRefChain = buildingsBufferRefChain.Add(BuildingManager.instance.gameObject); buildingsBufferRefChain = buildingsBufferRefChain.Add(BuildingManager.instance); buildingsBufferRefChain = buildingsBufferRefChain.Add(typeof(BuildingManager).GetField("m_buildings")); buildingsBufferRefChain = buildingsBufferRefChain.Add(typeof(Array16<Building>).GetField("m_buffer")); zonedBuildingInfoPanel = GameObject.Find("(Library) ZonedBuildingWorldInfoPanel").GetComponent<ZonedBuildingWorldInfoPanel>(); if (zonedBuildingInfoPanel != null) { AddBuildingPanelControls(zonedBuildingInfoPanel, out zonedBuildingAssetNameLabel, out zonedBuildingShowExplorerButton, new Vector3(-8.0f, 100.0f, 0.0f), out zonedBuildingDumpMeshTextureButton, new Vector3(-8.0f, 132.0f, 0.0f) ); initializedZonedBuildingsPanel = true; } } if (!initializedServiceBuildingsPanel) { sceneExplorer = FindObjectOfType<SceneExplorer>(); serviceBuildingInfoPanel = GameObject.Find("(Library) CityServiceWorldInfoPanel").GetComponent<CityServiceWorldInfoPanel>(); if (serviceBuildingInfoPanel != null) { AddBuildingPanelControls(serviceBuildingInfoPanel, out serviceBuildingAssetNameLabel, out serviceBuildingShowExplorerButton, new Vector3(-8.0f, 100.0f, 0.0f), out serviceBuildingDumpMeshTextureButton, new Vector3(-8.0f, 132.0f, 0.0f) ); initializedServiceBuildingsPanel = true; } } if (!initializedCitizenVehiclePanel) { sceneExplorer = FindObjectOfType<SceneExplorer>(); vehiclesBufferRefChain = new ReferenceChain(); vehiclesBufferRefChain = vehiclesBufferRefChain.Add(VehicleManager.instance.gameObject); vehiclesBufferRefChain = vehiclesBufferRefChain.Add(VehicleManager.instance); vehiclesBufferRefChain = vehiclesBufferRefChain.Add(typeof(VehicleManager).GetField("m_vehicles")); vehiclesBufferRefChain = vehiclesBufferRefChain.Add(typeof(Array16<Vehicle>).GetField("m_buffer")); vehiclesParkedBufferRefChain = new ReferenceChain(); vehiclesParkedBufferRefChain = vehiclesParkedBufferRefChain.Add(VehicleManager.instance.gameObject); vehiclesParkedBufferRefChain = vehiclesParkedBufferRefChain.Add(VehicleManager.instance); vehiclesParkedBufferRefChain = vehiclesParkedBufferRefChain.Add(typeof(VehicleManager).GetField("m_parkedVehicles")); vehiclesParkedBufferRefChain = vehiclesParkedBufferRefChain.Add(typeof(Array16<VehicleParked>).GetField("m_buffer")); citizenVehicleInfoPanel = GameObject.Find("(Library) CitizenVehicleWorldInfoPanel").GetComponent<CitizenVehicleWorldInfoPanel>(); if (citizenVehicleInfoPanel != null) { AddVehiclePanelControls( citizenVehicleInfoPanel, out citizenVehicleAssetNameLabel, out citizenVehicleShowExplorerButton, out citizenVehicleDumpTextureMeshButton ); initializedCitizenVehiclePanel = true; } } if (!initializedCityServiceVehiclePanel) { sceneExplorer = FindObjectOfType<SceneExplorer>(); cityServiceVehicleInfoPanel = GameObject.Find("(Library) CityServiceVehicleWorldInfoPanel").GetComponent<CityServiceVehicleWorldInfoPanel>(); if (cityServiceVehicleInfoPanel != null) { AddVehiclePanelControls( cityServiceVehicleInfoPanel, out cityServiceVehicleAssetNameLabel, out cityServiceVehicleShowExplorerButton, out cityServiceVehicleDumpTextureMeshButton); initializedCityServiceVehiclePanel = true; } } if (!initializedPublicTransportVehiclePanel) { sceneExplorer = FindObjectOfType<SceneExplorer>(); publicTransportVehicleInfoPanel = GameObject.Find("(Library) PublicTransportVehicleWorldInfoPanel").GetComponent<PublicTransportVehicleWorldInfoPanel>(); if (publicTransportVehicleInfoPanel != null) { AddVehiclePanelControls( publicTransportVehicleInfoPanel, out publicTransportVehicleAssetNameLabel, out publicTransportVehicleShowExplorerButton, out publicTransportVehicleDumpTextureMeshButton); initializedPublicTransportVehiclePanel = true; } } if (zonedBuildingInfoPanel.component.isVisible) { InstanceID instance = Util.GetPrivate<InstanceID>(zonedBuildingInfoPanel, "m_InstanceID"); var building = BuildingManager.instance.m_buildings.m_buffer[instance.Building]; zonedBuildingAssetNameLabel.text = "AssetName: " + building.Info.name; } if (serviceBuildingInfoPanel.component.isVisible) { InstanceID instance = Util.GetPrivate<InstanceID>(serviceBuildingInfoPanel, "m_InstanceID"); var building = BuildingManager.instance.m_buildings.m_buffer[instance.Building]; serviceBuildingAssetNameLabel.text = "AssetName: " + building.Info.name; } if (citizenVehicleInfoPanel.component.isVisible) { InstanceID instance = Util.GetPrivate<InstanceID>(citizenVehicleInfoPanel, "m_InstanceID"); if (instance.Vehicle == 0) { var vehicle = VehicleManager.instance.m_parkedVehicles.m_buffer[instance.ParkedVehicle]; citizenVehicleAssetNameLabel.text = "AssetName: " + vehicle.Info.name; } else { var vehicle = VehicleManager.instance.m_vehicles.m_buffer[instance.Vehicle]; citizenVehicleAssetNameLabel.text = "AssetName: " + vehicle.Info.name; } } if (cityServiceVehicleInfoPanel.component.isVisible) { InstanceID instance = Util.GetPrivate<InstanceID>(cityServiceVehicleInfoPanel, "m_InstanceID"); if (instance.Vehicle == 0) { var vehicle = VehicleManager.instance.m_parkedVehicles.m_buffer[instance.ParkedVehicle]; cityServiceVehicleAssetNameLabel.text = "AssetName: " + vehicle.Info.name; } else { var vehicle = VehicleManager.instance.m_vehicles.m_buffer[instance.Vehicle]; cityServiceVehicleAssetNameLabel.text = "AssetName: " + vehicle.Info.name; } } if (publicTransportVehicleInfoPanel.component.isVisible) { InstanceID instance = Util.GetPrivate<InstanceID>(publicTransportVehicleInfoPanel, "m_InstanceID"); if (instance.Vehicle == 0) { var vehicle = VehicleManager.instance.m_parkedVehicles.m_buffer[instance.ParkedVehicle]; publicTransportVehicleAssetNameLabel.text = "AssetName: " + vehicle.Info.name; } else { var vehicle = VehicleManager.instance.m_vehicles.m_buffer[instance.Vehicle]; publicTransportVehicleAssetNameLabel.text = "AssetName: " + vehicle.Info.name; } } }
public void ExpandFromRefChain(ReferenceChain refChain) { if (refChain == null) { Log.Error("SceneExplorer: ExpandFromRefChain(): Null refChain"); return; } if (refChain.Length == 0) { Log.Error("SceneExplorer: ExpandFromRefChain(): Invalid refChain, expected Length >= 0"); return; } if (refChain.ChainTypes[0] != ReferenceChain.ReferenceType.GameObject) { Log.Error(String.Format("SceneExplorer: ExpandFromRefChain(): invalid chain type for element [0] - expected {0}, got {1}", ReferenceChain.ReferenceType.GameObject, refChain.ChainTypes[0])); return; } sceneRoots.Clear(); ClearExpanded(); searchDisplayString = String.Format("Showing results for \"{0}\"", refChain.ToString()); var rootGameObject = (GameObject)refChain.ChainObjects[0]; sceneRoots.Add(rootGameObject, true); var expandedRefChain = new ReferenceChain().Add(rootGameObject); state.expandedGameObjects.Add(expandedRefChain, true); for (int i = 1; i < refChain.Length; i++) { switch (refChain.ChainTypes[i]) { case ReferenceChain.ReferenceType.GameObject: var go = (GameObject)refChain.ChainObjects[i]; expandedRefChain = expandedRefChain.Add(go); state.expandedGameObjects.Add(expandedRefChain, true); break; case ReferenceChain.ReferenceType.Component: var component = (Component)refChain.ChainObjects[i]; expandedRefChain = expandedRefChain.Add(component); state.expandedComponents.Add(expandedRefChain, true); break; case ReferenceChain.ReferenceType.Field: var field = (FieldInfo)refChain.ChainObjects[i]; expandedRefChain = expandedRefChain.Add(field); state.expandedObjects.Add(expandedRefChain, true); break; case ReferenceChain.ReferenceType.Property: var property = (PropertyInfo)refChain.ChainObjects[i]; expandedRefChain = expandedRefChain.Add(property); state.expandedObjects.Add(expandedRefChain, true); break; case ReferenceChain.ReferenceType.Method: break; case ReferenceChain.ReferenceType.EnumerableItem: var index = (int)refChain.ChainObjects[i]; state.selectedArrayStartIndices[expandedRefChain] = index; state.selectedArrayEndIndices[expandedRefChain] = index; expandedRefChain = expandedRefChain.Add(index); state.expandedObjects.Add(expandedRefChain, true); break; } } state.currentRefChain = refChain.Copy(); state.currentRefChain.IdentOffset = -state.currentRefChain.Length; }