/// <summary>Clears and entirely destroys the UI and WorldUI's. Calling this is not a requirement and can only be reversed by calling Start again.</summary> public static void Destroy(){ ClearAll(); if(GUINode!=null){ GameObject.Destroy(GUINode); GUINode=null; GUICamera=null; CameraNode=null; CameraTransform=null; } if(GlobalUpdater!=null){ GameObject.Destroy(GlobalUpdater); GlobalUpdater=null; } Started=false; Variables=null; LastWorldUI=null; FirstWorldUI=null; // Clear batch pool: UIBatchPool.Clear(); }
/// <summary>Used internally - don't call this one. Startup the UI for use in the Editor with AOT Nitro.</summary> /// <param name="nitroAot">True if no gameobject should be generated.</param> public static void Start(bool nitroAot){ if(!Started){ Started=true; // Setup atlas stacks: AtlasStacks.Start(); // Hookup the wrench logging method: Wrench.Log.OnLog+=OnLogMessage; // Hookup the InfiniText logging method: InfiniText.Fonts.OnLog+=OnLogMessage; // Startup the tag handlers: Wrench.TagHandlers.Setup(); // Startup the file protocols (internally also starts up the CSS engine): FileProtocols.Setup(); // Setup the text/language service: if(Variables==null){ Variables=new FullVariableSet(); if(!nitroAot){ // Sign up to the variable on change event - whenever a custom var is changed, we need to refresh the screen. Variables.OnChange+=OnVariableChange; // Ensure that variables is set to whatever the default/current language is. OnLanguageChange(Wrench.Text.Language); // Sign on to the event that occurs when the language changes. Wrench.Text.OnLanguageChanged+=OnLanguageChange; // Sign on to the event that occurs when the gender changes. Wrench.Text.OnGenderChanged+=ResolveAllVariables; } } // Setup the callback queue: Callbacks.Start(); // Setup the character providers (for e.g. Emoji): CharacterProviders.Setup(); Layer=LayerMask.NameToLayer("PowerUI"); if(Layer<0){ // Invalid layer. #if UNITY_EDITOR // Create the new layer now (this will actually be a permanent change): Layer=PowerUI.LayerManager.Add(); #else throw new Exception("Error: PowerUI layer not found. Go to Edit->Project Settings->Tags and add a layer called PowerUI to fix this."+ " Don't forget to make sure it doesn't render with your main camera too!" ); #endif } // Default FPS: SetRate(DefaultRate); #if !NoNitroRuntime // Setup the compiler: NitroCode.Setup(); #endif } if(nitroAot){ return; } GUINode=GameObject.Find("#PowerUI"); if(GUINode==null){ // Not started yet. // Create the UI game object: GUINode=new GameObject(); GUINode.name="#PowerUI"; // Create the camera: CameraNode=new GameObject(); CameraNode.name="Camera"; // Create the updater: GlobalUpdater=GUINode.AddComponent<StandardUpdater>(); // Setup the camera: GUICamera=CameraNode.AddComponent<Camera>(); }else{ // Already started, but we might have updated. if(CameraNode==null){ // This can happen if the PowerUI assembly is actively reloaded (e.g. runtime updates). CameraNode=GameObject.Find("#PowerUI/Camera"); CameraTransform=CameraNode.transform; GUICamera=CameraNode.GetComponent<Camera>(); }else{ // Already started! return; } } // Hide the PowerUI layer from all cameras other than GUICamera: Camera[] cameras=Camera.allCameras; int layerMask=~(1<<UI.Layer); for(int i=0;i<cameras.Length;i++){ // Grab the camera: Camera camera=cameras[i]; // Is it the GUICamera? if(camera==GUICamera){ continue; } // Hide the UI layer from it: camera.cullingMask&=layerMask; } // Setup the transform: CameraTransform=CameraNode.transform; CameraTransform.parent=GUINode.transform; GUICamera.nearClipPlane=0.2f; GUICamera.depth=CameraDepth; GUICamera.clearFlags=CameraClearFlags.Depth; GUICamera.cullingMask=(1<<UI.Layer); GUICamera.renderingPath=RenderingPath.Forward; SetCameraDistance(60f); SetFieldOfView(60f); Renderer=new Renderman(); // Render Mesh.OutputGameObject with the GUI camera: Renderer.RenderWithCamera(UI.Layer); document=Renderer.RootDocument; document.window.top=document.window; // Some overriding default UI settings: document.html.Style.Computed.ChangeTagProperty("color",new PowerUI.Css.Value("#ffffff",PowerUI.Css.ValueType.Color)); document.html.Style.Computed.ChangeTagProperty("font-size",new PowerUI.Css.Value("14px",PowerUI.Css.ValueType.Pixels)); document.body.Style.Computed.ChangeTagProperty("overflow",new PowerUI.Css.Value("hidden hidden",PowerUI.Css.ValueType.Point)); UpdateTextDirection(); // Fire the camera event: CameraGotCreated(GUICamera); }