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; } } }
public RippleSystem(IRippleFilter rippleFilter) { observers = new List <IRippleData>(); FinalRipples = new IRippleData[RippleOptions.RippleCount]; FinalRippleOptions = new RippleOptions(); RippleFilter = rippleFilter; }
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); }
public IDisposable Subscribe(IRippleData observer) { observers.Add(observer); return(new ListUnsubscriber <IRippleData>(observers, observer)); }