Ejemplo n.º 1
0
        private void SetValue(IReadOnlyList <IRippleData> source, RippleOptions dest)
        {
            if (source[0] == null)
            {
                dest.Clear();
                FinalRippleCount = 0;
                return;
            }

            FinalRippleCount = 0;
            for (int i = 0; i < source.Count; i++)
            {
                IRippleData rippleInfo = source[i];
                if (rippleInfo == null)
                {
                    dest.Clear(i);
                }
                else
                {
                    FinalRippleCount++;
                    dest.SetTexture(rippleInfo.Texture, i);
                    dest.Rect[i]        = rippleInfo.Rect;
                    dest.Position[i]    = new Vector4(rippleInfo.Position.x, rippleInfo.Position.y, rippleInfo.Position.z, rippleInfo.Radian);
                    dest.HeightScale[i] = rippleInfo.HeightScale;
                }
            }
        }
Ejemplo n.º 2
0
 public RippleSystem(IRippleFilter rippleFilter)
 {
     observers          = new List <IRippleData>();
     FinalRipples       = new IRippleData[RippleOptions.RippleCount];
     FinalRippleOptions = new RippleOptions();
     RippleFilter       = rippleFilter;
 }
Ejemplo n.º 3
0
        private bool TryGetPriority(Camera camera, CameraTaskRippleData data, IRippleData ripple, out float priority)
        {
            Vector3 cameraPosition = camera.transform.position;

            priority = 0;

            VertexHelper.GetRippleWorldPos(new Vector2(ripple.Position.x, ripple.Position.z), ripple.Rect, ripple.Radian, ref rippleWorldPos);

            bool isRange = false;

            for (int i = 0; i < 4; i++)
            {
                Vector2 pos       = rippleWorldPos[i];
                Vector3 worldPos  = new Vector3(pos.x, data.OceanHeight, pos.y);
                Vector3 screenPos = camera.WorldToScreenPoint(worldPos);
                if (camera.pixelRect.Contains(screenPos))
                {
                    if (screenPos.z > 0)
                    {
                        isRange  |= true;
                        priority += screenPos.z;
                        continue;
                    }
                    else
                    {
                        priority -= screenPos.z * 3;
                    }
                }
                priority += screenPos.z * 3;
            }

            return(isRange);
        }
Ejemplo n.º 4
0
 public IDisposable Subscribe(IRippleData observer)
 {
     observers.Add(observer);
     return(new ListUnsubscriber <IRippleData>(observers, observer));
 }