private static bool IsVisible(WaterRaindropsIME.Droplet droplet) { bool flag = true; flag &= (droplet.Position.x >= 0f && droplet.Position.x <= 1f); return(flag & (droplet.Position.y >= 0f && droplet.Position.y <= 1f)); }
private void OnDropletUpdate(ref WaterRaindropsIME.Droplet droplet) { Vector2 position = droplet.Position; Vector2 velocity = droplet.Velocity; droplet.Life -= Time.fixedDeltaTime; if (droplet.Volume < 0.2f) { return; } Vector4 vector = base.transform.worldToLocalMatrix * this.Force; Vector2 a = new Vector2(vector.x, -vector.y); Vector2 b = new Vector2(this.Tracking.Force.x, this.Tracking.Force.y); Vector2 a2 = Vector2.zero; if (this._Friction != null) { a2 = this._Friction[(int)(position.x * (float)(this._Target.width - 1)), (int)(position.y * (float)(this._Target.height - 1))]; } float magnitude = velocity.magnitude; Vector2 normalized = velocity.normalized; Vector2 b2 = -normalized * ((magnitude + 1f) * (magnitude + 1f)) * this.AirFriction; Vector2 b3 = -a2 * this.WindowFrictionMultiplier; Vector2 a3 = a + b + b2 + b3; Vector2 a4 = a3 / droplet.Volume; droplet.Velocity += a4 * Time.deltaTime; droplet.Position += droplet.Velocity * Time.deltaTime; float num = Vector3.Distance(droplet.Position, position); float num2 = num * this.VolumeLoss + 0.001f; droplet.Volume -= num2; }
private void Advance() { this._Droplets.RemoveAll((WaterRaindropsIME.Droplet x) => !WaterRaindropsIME.IsVisible(x) || x.Life <= 0f || x.Volume <= 0f); for (int i = 0; i < this._Droplets.Count; i++) { WaterRaindropsIME.Droplet droplet = this._Droplets[i]; this.OnDropletUpdate(ref droplet); if (!WaterRaindropsIME.IsVisible(droplet)) { this._Droplets[i] = droplet; } else { this.Draw(i, droplet.Position, droplet.Volume, droplet.Velocity); this._Droplets[i] = droplet; } } }