Exemplo n.º 1
0
	/// <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();
	}
Exemplo n.º 2
0
	/// <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);
		
	}