Пример #1
0
        /// <summary>Asks the user to confirm something.</summary>
        public bool confirm(object request)
        {
            // Open the dialogue:
            BlockingDialogue dialogue = BlockingDialogues.Open("confirm", this, request);

            if (dialogue == null)
            {
                // It failed to open.
                // E.g. because 'prevent this page from opening other dialogues' was ticked.
                return(false);
            }

            // Return the response received from the user:
            return(dialogue.OkResponse);
        }
Пример #2
0
        /// <summary>Asks the user for some textual information.</summary>
        public string prompt(object request)
        {
            // Open the dialogue:
            BlockingDialogue dialogue = BlockingDialogues.Open("prompt", this, request);

            if (dialogue == null)
            {
                // It failed to open.
                // E.g. because 'prevent this page from opening other dialogues' was ticked.
                return("");
            }

            // Return the response received from the user:
            if (dialogue.Response is string)
            {
                return((string)dialogue.Response);
            }

            // Empty string otherwise
            return("");
        }
Пример #3
0
 /// <summary>Alerts the given message.</summary>
 public void alert(object value)
 {
     // Open the dialogue:
     BlockingDialogues.Open("alert", this, value);
 }
Пример #4
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)
        {
            return;
        }

        _Started = true;

        // Setup atlas stacks:
        AtlasStacks.Start();

        // Hookup the wrench logging method:
        Dom.Log.OnLog += OnLogMessage;

        // Hookup the InfiniText logging method:
        InfiniText.Fonts.OnLog += OnLogMessage;

                #if !NoBIDI
        // Setup bidi character metadata:
        InfiniText.DirectionCategory.Setup();
                #endif

        // Setup the character entities such as &nbsp;
        CharacterEntities.Setup();

        // Start modules now! UI is always available so we use that:
        Modular.Start.Now(typeof(UI));

        // Setup language metadata:
        Languages.globalLoader.Setup();

        // Setup alert/confirm dialogues:
        BlockingDialogues.Setup();

        // Setup input:
        PowerUI.Input.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;
                // Sign on to the event that occurs when the language changes.
                Dom.Text.OnLanguageChanged += OnLanguageChange;
                // Sign on to the event that occurs when the gender changes.
                Dom.Text.OnGenderChanged += ResolveAllVariables;
            }
        }

        // Setup the callback queue:
        Callbacks.Start();

        // Setup the character providers (for e.g. Emoji):
        CharacterProviders.Setup();

        Layer = LayerMask.NameToLayer("PowerUI");

                #if !NO_LAYER_CHECK
        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
            // On device - make one up:
            Layer = 21;
                        #endif
        }
                #endif

        // Default FPS:
        SetRate(DefaultRate);

                #if !NoNitroRuntime
        // Link up the text/javascript type by creating the engine:
        ScriptEngines.Add(new JavaScriptEngine());
                #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>();

            // Apply the new settings to the camera:
            GUICamera.orthographic = (CurrentCameraMode == CameraMode.Orthographic);
        }
        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 as HtmlDocument;
        document.window.top = document.window;

        // Fire the camera event:
        CameraGotCreated(GUICamera);
    }