コード例 #1
0
 // Start is called before the first frame update
 void Start()
 {
     highlightSquaresScript = GameObject.Find("GameBoard").GetComponent <HighlightSquares>();
     hintButton             = GameObject.Find("HintButton").GetComponent <Button>();
     hintButtonFont         = hintButton.transform.GetChild(0).gameObject.GetComponent <ButtonFontTMP>();
     hintMat                 = Resources.Load("hintColor", typeof(Material)) as Material;
     highlightMat            = Resources.Load("highlightColor", typeof(Material)) as Material;
     hintButtonTextMesh      = GameObject.Find("HintButton").GetComponentInChildren <TextMeshProUGUI>();
     hintButtonTextMesh.text = "Hint (3)";
 }
コード例 #2
0
        public static void SetUp(Transform parentTransform)
        {
            visualFxGo = new GameObject("VisualFx");
            visualFxGo.transform.SetParent(parentTransform);
            Instance = visualFxGo.AddComponent <VisualFxManager>();
            if (!Application.isPlaying ||
                !AutomatedQARuntimeSettings.ActivatePlaybackVisualFx)
            {
                return;
            }

            canvasPoolGo = new GameObject("VisualFxCanvasObjectPool");
            canvasPoolGo.transform.SetParent(visualFxGo.transform);

            if (AutomatedQARuntimeSettings.ActivateClickFeedbackFx)
            {
                // Pre-make [preMakeRingCount] ring pulses to negate any performance impact from generating/destroying a lot of GameObjects in a short period.
                circleObjPoolGo = new GameObject("ClickPulseObjectPool");
                circleObjPoolGo.transform.SetParent(visualFxGo.transform);
                ringTexture2d = new Texture2D(2, 2);
                ringTexture2d.LoadImage(Convert.FromBase64String(ringBase64));
                for (int i = 0; i < preMakeRingCount; i++)
                {
                    PulseRings.Add(MakePulseRing());
                }

                // Also make canvas container objects. Around a fifth the total of pulse rings will be plenty.
                for (int i = 0; i < preMakeRingCount / 5; i++)
                {
                    VisualFxCanvases.Add(MakeVisualFxCanvas());
                }
            }

            if (AutomatedQARuntimeSettings.ActivateHighlightFeedbackFx)
            {
                // Pre-make [preMakeSquareCount] squares to negate any performance impact from generating/destroying a lot of GameObjects in a short period.
                squareObjPoolGo = new GameObject("HighlightSquareObjectPool");
                squareObjPoolGo.transform.SetParent(visualFxGo.transform);
                squareTexture2D = new Texture2D(2, 2);
                squareTexture2D.LoadImage(Convert.FromBase64String(squareBase64));
                for (int i = 0; i < preMakeSquareCount; i++)
                {
                    HighlightSquares.Add(MakeHighlightSquare());
                    VisualFxCanvases.Add(MakeVisualFxCanvas());
                }
            }
        }
コード例 #3
0
 /// <summary>
 /// Return square GameObject to the pool for later use.
 /// </summary>
 /// <param name="square">GameObject with RawImage of square</param>
 public static void ReturnHighlightSquare(GameObject square)
 {
     square.transform.SetParent(circleObjPoolGo.transform);
     square.SetActive(false);
     HighlightSquares.Add(square);
 }
コード例 #4
0
        public void TriggerHighlightAroundTarget(GameObject target)
        {
            if (!AutomatedQARuntimeSettings.ActivatePlaybackVisualFx ||
                !AutomatedQARuntimeSettings.ActivateHighlightFeedbackFx)
            {
                return;
            }

            lastFxEventType = FxEventType.Highlight;
            if (target == null || !target.GetComponent <RectTransform>())
            {
                return;                                                          // TODO: Handle non UI elments
            }
            GameObject highlighterGo = VisualFxCanvases[0];

            highlighterGo.transform.SetParent(visualFxGo.transform);
            highlighterGo.SetActive(true);

            GameObject square = HighlightSquares[0];

            square.transform.SetParent(highlighterGo.transform);
            //square.GetComponent<HighlightElement>().Init(target);

            RectTransform squareRect = square.GetComponent <RectTransform>();

            squareRect.anchorMin = squareRect.anchorMax = new Vector2(0, 0);

            // TODO: This works for some UI's, but not all. Due to some RectTransforms supplying a world position, and others not; with seemingly no way to check if it is one or the other.
            RectTransform targetRect = target.GetComponent <RectTransform>();
            Vector3       centerPointOfObjectOnScreen = targetRect.TransformPoint(targetRect.position);

            centerPointOfObjectOnScreen = !Camera.main.orthographic ? Camera.main.WorldToScreenPoint(centerPointOfObjectOnScreen) : targetRect.position;

            Vector2 sizeOfTarget = new Vector2();

            // If the calculated delta size is negative, the current transform is not dictating the size of the element. Look in parents for size.
            if (targetRect.sizeDelta.x < 0 || targetRect.sizeDelta.y < 0)
            {
                bool      validSizeDelta = false;
                Transform currentTarget  = targetRect.parent;
                while (!validSizeDelta && currentTarget != null)
                {
                    sizeOfTarget = targetRect.parent.GetComponent <RectTransform>().sizeDelta;
                    if (targetRect.sizeDelta.x < 0 && targetRect.sizeDelta.y < 0)
                    {
                        validSizeDelta = true;
                    }
                    currentTarget = currentTarget.parent;
                }
            }

            if (sizeOfTarget.x == 0 || sizeOfTarget.y == 0)
            {
                sizeOfTarget = targetRect.sizeDelta;
            }

            int stretchBiasY = sizeOfTarget.y > sizeOfTarget.x ? 40 : 0;
            int stretchBiasX = sizeOfTarget.x > sizeOfTarget.y ? 40 : 0;

            squareRect.sizeDelta = new Vector2(sizeOfTarget.x + 50 + stretchBiasX, sizeOfTarget.y + 50 + stretchBiasY);
            squareRect.position  = new Vector3(centerPointOfObjectOnScreen.x, centerPointOfObjectOnScreen.y, 0);
            RawImage img = square.GetComponent <RawImage>();

            img.color = new Color32(0, 255, 255, 200);
            square.SetActive(true);
            StartCoroutine(HandleHighlightRemoval(square, target, highlighterGo));
            VisualFxCanvases.RemoveAt(0);
            HighlightSquares.RemoveAt(0);
        }