Exemplo n.º 1
0
        /// <summary>
        /// Sets Opacity to Materials
        /// </summary>
        /// <param name="objects">Objects to set Opacity for (max 64)</param>
        protected override void SetToShader(List <OpacityObject> objects)
        {
            if (!CameraManager.Exists)
            {
                return;
            }
            Camera cam    = CameraManager.Instance.Camera;
            int    amount = Mathf.Min(objects.Count, 64);

            for (int i = 0; i < amount; i++)
            {
                OpacityObject obj = objects[i];
                cachedRad[i] = ResolutionMath.ConvertForWidth(obj.Opacity.OpacityRadius);
                // Move to ScreenSpace
                Vector3 pos = cam.WorldToScreenPoint(obj.Transform.position + (Vector3)obj.Opacity.OpacityOffset);
                cachedPos[i * 2]     = pos.x;
                cachedPos[i * 2 + 1] = pos.y;
            }
            for (int i = 0; i < materials.Length; i++)
            {
                Material mat = materials[i];
                mat.SetInt(useSeeThroughID, 1);
                mat.SetInt(seeThroughLengthID, amount);
                mat.SetFloatArray(centersID, cachedPos);
                mat.SetFloatArray(radiiID, cachedRad);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creates a DamageUI
        /// </summary>
        /// <param name="posWorld">WorldSpace-Position for UI</param>
        /// <param name="damage">Damage to Display</param>
        /// <param name="renderLayer">RenderLayer for Text-Object</param>
        /// <param name="orderInRenderLayer">Order in RenderLayer</param>
        /// <param name="color">Color for Text (Defaults to Black)</param>
        /// <param name="height">Height for Text in Pixels (for 720p-Resolution)</param>
        /// <param name="timeOut">Duration to display UI for (defaults to 1.5s)</param>
        /// <returns>Created UI</returns>
        public static PopupUI CreateDamageUI(Vector3 posWorld, ushort damage, int renderLayer, int orderInRenderLayer, Color?color, uint height = DefaultDamageHeight, float timeOut = DefaultTimeOut)
        {
            if (dmgUIPrefab == null)
            {
                dmgUIPrefab = Resources.Load <GameObject>("UI/DamageUI"); // Load Prefab from Resources
            }
            PopupUI ui = Object.Instantiate(dmgUIPrefab).GetComponent <PopupUI>();

            ui.transform.position = posWorld;
            ui.SetText(damage.ToString(), color ?? Color.black);           // Set Damage & Color
            ui.SetTextSize((uint)ResolutionMath.ConvertForHeight(height)); // Set text Size
            ui.SetRenderOrder(renderLayer, orderInRenderLayer);            // Set RenderSettings
            ui.SetDestructionTimer(timeOut);                               // Set Timer
            return(ui);
        }
        /// <summary>
        /// Sets Opacity-Values to Shader
        /// </summary>
        /// <param name="objects">List of Objects to handle</param>
        protected override void SetToShader(List <OpacityObject> objects)
        {
            if (!CameraManager.Exists)
            {
                return; // No active Camera
            }
            Camera cam    = CameraManager.Instance.Camera;
            int    amount = objects.Count > 4 ? 4 : objects.Count;

            Vector4 vec = new Vector4(), vec2 = new Vector4(), radius = new Vector4();

            for (int i = 0; i < amount; i++)
            {
                OpacityObject obj       = objects[i];
                Vector3       screenPos = cam.WorldToScreenPoint(obj.Transform.position + (Vector3)obj.Opacity.OpacityOffset);
                Vector4       v         = i < 2 ? vec : vec2;
                if (i % 2 == 0) // Even indices
                {
                    v.x = screenPos.x;
                    v.y = screenPos.y;
                }
                else // i % 2 == 1 Odd indices
                {
                    v.z = screenPos.x;
                    v.w = screenPos.y;
                }
                if (i < 2) // Set to vector (reference)
                {
                    vec = v;
                }
                else
                {
                    vec2 = v;
                }
                radius[i] = ResolutionMath.ConvertForWidth(obj.Opacity.OpacityRadius);
            }
            for (int i = 0; i < renderers.Length; i++)
            {
                MaterialPropertyBlock mpb = propertyBlocks[i];
                renderers[i].GetPropertyBlock(mpb);
                mpb.SetInt(useSeeThroughID, 1);
                mpb.SetInt(seeThroughLengthID, amount);
                mpb.SetVector(seeThroughRadiiID, radius);
                mpb.SetVector(seeThroughCenter1ID, vec);
                mpb.SetVector(seeThroughCenter2ID, vec2);
                renderers[i].SetPropertyBlock(mpb);
            }
        }
 /// <summary>
 /// Sets value for Circle-Radius
 /// </summary>
 /// <param name="value">Value (in pixels, based on 720p-resolution) to set</param>
 public void SetValue(float value)
 {
     mat.SetFloat(circleRadiusID,
                  ResolutionMath.ConvertForWidth(value *
                                                 ResolutionMath.DefaultWidth));
 }