コード例 #1
0
        public void OnDestroy()
        {
            foreach (var panel in customPanels)
            {
                panel.Disable();
            }

            customPanels.Clear();

            sceneExplorer = null;
        }
コード例 #2
0
        public void Awake()
        {
            sceneExplorer = FindObjectOfType <SceneExplorer>();

            if (sceneExplorer != null)
            {
                CreateBuildingsPanels();
                CreateVehiclePanels();
                CreateCitizenPanels();
                CreateLinePanel();
                CreateDistrictPanels();
                CreateRoadPanel();
            }
        }
コード例 #3
0
        public override void ConstructPanelContent()
        {
            // Tab bar
            var tabGroup = UIFactory.CreateHorizontalGroup(uiContent, "TabBar", true, true, true, true, 2, new Vector4(2, 2, 2, 2));

            UIFactory.SetLayoutElement(tabGroup, minHeight: 25, flexibleHeight: 0);

            // Scene Explorer
            SceneExplorer = new SceneExplorer(this);
            SceneExplorer.ConstructUI(uiContent);
            tabPages.Add(SceneExplorer);

            // Object search
            ObjectSearch = new ObjectSearch(this);
            ObjectSearch.ConstructUI(uiContent);
            tabPages.Add(ObjectSearch);

            // set up tabs
            AddTabButton(tabGroup, "Scene Explorer");
            AddTabButton(tabGroup, "Object Search");

            // default active state: Active
            UIManager.SetPanelActive(PanelType, true);
        }
コード例 #4
0
ファイル: ModTools.cs プロジェクト: Rychard/Skylines-ModTools
        public void Initialize(SimulationManager.UpdateMode _updateMode)
        {
            updateMode = _updateMode;

            if (!loggingInitialized)
            {
                Application.logMessageReceived += (condition, trace, type) =>
                {
                    if (!logExceptionsToConsole)
                    {
                        return;
                    }

                    if (Instance.console != null)
                    {
                        Instance.console.AddMessage(String.Format("{0} ({1})", condition, trace), type, true);
                        return;
                    }

                    if (type == LogType.Error || type == LogType.Exception || type == LogType.Assert)
                    {
                        Log.Error(condition);
                    }
                    else if (type == LogType.Warning)
                    {
                        Log.Warning(condition);
                    }
                    else
                    {
                        Log.Message(condition);
                    }
                };

                loggingInitialized = true;
            }

            sceneExplorer = gameObject.AddComponent<SceneExplorer>();
            watches = gameObject.AddComponent<Watches>();
            colorPicker = gameObject.AddComponent<ColorPicker>();

            sceneExplorerColorConfig = gameObject.AddComponent<SceneExplorerColorConfig>();

            LoadConfig();

            if (extendGamePanels && (updateMode == SimulationManager.UpdateMode.NewGame || updateMode == SimulationManager.UpdateMode.LoadGame))
            {
                panelExtender = gameObject.AddComponent<GamePanelExtender>();
            }

            if (useModToolsConsole)
            {
                console = gameObject.AddComponent<Console>();
            }

            if (config.hookUnityLogging)
            {
                UnityLoggingHook.EnableHook();
            }

            if (updateMode == SimulationManager.UpdateMode.Undefined && config.improvedWorkshopIntegration)
            {
                ImprovedWorkshopIntegration.Bootstrap();
            }
        }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
        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;
                }
            }
        }
コード例 #7
0
        public RemoteInspectorServer(ushort port = 8080) : base(port)
        {
            var viewEngine = new NustacheViewEngine("Views");

            Use("/ping", (request, response, path) =>
            {
                if (path != "")
                {
                    return(false);
                }

                response.Send("pong");
                return(true);
            });

            Use("/api/go", new GameObjectExplorerService());

            Use((request, response, relativePath) =>
            {
                Dictionary <string, object> content = null;
                var found       = false;
                Exception error = null;

                UnityMainThreadDispatcher.Instance().EnqueueAndWait(() =>
                {
                    try
                    {
                        // remove leading '/'
                        relativePath = relativePath.Substring(1);

                        if (string.IsNullOrEmpty(relativePath))
                        {
                            content = SceneExplorer.InspectRoot();
                            found   = true;
                        }
                        else
                        {
                            var gameObject = GameObject.Find(relativePath);
                            if (gameObject == null)
                            {
                                found = false;
                            }
                            else
                            {
                                found   = true;
                                content = SceneExplorer.InspectGameObject(gameObject);

                                var idString    = request.QueryString.Get("id");
                                var componentId = 0;

                                var findTargetId = !string.IsNullOrEmpty(idString) &&
                                                   int.TryParse(idString, out componentId);

                                if (findTargetId)
                                {
                                    content["componentDetails"] = SceneExplorer.CreateRemoteView(gameObject
                                                                                                 .GetComponents <Component>()
                                                                                                 .First(comp => comp.GetInstanceID() == componentId));
                                    var properties =
                                        (List <SceneExplorer.RemoteProperty>)((IDictionary <string, object>)content[
                                                                                  "componentDetails"])["properties"];
                                    for (int i = 0; i < properties.Count; i++)
                                    {
                                        var property   = properties[i];
                                        property.value = JsonConvert.SerializeObject(property.value,
                                                                                     Formatting.None, new JsonSerializerSettings
                                        {
                                            NullValueHandling     = NullValueHandling.Ignore,
                                            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                                            ContractResolver      = new IgnorePropertiesContractResolver()
                                        });
                                        properties[i] = property;
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception exception)
                    {
                        error = exception;
                    }
                });

                if (error != null)
                {
                    LogException(error);
                    response.SendException(error);
                    return(true);
                }

                if (!found)
                {
                    return(false);
                }

                try
                {
                    const string viewPath = "index.html";
//                    var contentJson = JsonConvert.SerializeObject( content, Formatting.Indented, new JsonSerializerSettings
//                    {
//                        NullValueHandling = NullValueHandling.Ignore,
//                        ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
//                        ContractResolver = new IgnorePropertiesContractResolver()
//                    } );
//
//                    var renderContext = JsonHelper.Deserialize( contentJson ) as Dictionary<string, object>;
                    var responseContent = viewEngine.Render(viewPath, content);

                    response.Send(responseContent, MimeTypes.Text.Html);
                    return(true);
                }
                catch (ViewNotFoundException)
                {
                    LogError("Main interface view not found");
                    return(false);
                }
            });

            Use(new StaticFileServer("Assets"));
        }
コード例 #8
0
            public bool HandleRequest(HttpListenerRequest request, HttpListenerResponse response, string relativePath)
            {
                var objectPath = relativePath.Substring(1);

                Dictionary <string, object> content = null;
                Exception error       = null;
                var       failContent = new Dictionary <string, object>();

                UnityMainThreadDispatcher.Instance().EnqueueAndWait(() =>
                {
                    try
                    {
                        if (objectPath == "")
                        {
                            content = SceneExplorer.InspectRoot();
                        }
                        else
                        {
                            var gameObject = GameObject.Find(objectPath);
                            if (gameObject == null)
                            {
                                error = new ObjectNotFoundException(objectPath);
                                return;
                            }

                            content = SceneExplorer.InspectGameObject(gameObject);

                            var idString    = request.QueryString.Get("id");
                            var componentId = 0;

                            var findTargetId = !string.IsNullOrEmpty(idString) &&
                                               int.TryParse(idString, out componentId);

                            if (findTargetId)
                            {
                                content["component"] = SceneExplorer.CreateRemoteView(gameObject
                                                                                      .GetComponents <Component>()
                                                                                      .First(comp => comp.GetInstanceID() == componentId));
                            }
                        }
                    }
                    catch (Exception exception)
                    {
                        error = exception;
                    }
                });

                if (error != null)
                {
                    response.SendJson(JsonReponse.Error(error.Message));
                }
                else if (failContent.Count > 0)
                {
                    response.SendJson(JsonReponse.Fail(failContent));
                }
                else
                {
                    response.SendJson(JsonReponse.Success(content));
                }

                return(true);
            }