public void SetNearestIndexTipColor() { IndexTipColor nearestIndexTipColor = GetNearestTipColor(); if (nearestIndexTipColor != null) { nearestIndexTipColor.SetColor(this.GetColor()); } }
public void ReceiveNearestIndexTipColor() { IndexTipColor nearestIndexTipColor = GetNearestTipColor(); if (nearestIndexTipColor != null) { if (nearestIndexTipColor.IsClean) { // If the index tip is clean, set its color instead of receiving its color. nearestIndexTipColor.SetColor(this.GetColor()); } else { this.SetColor(nearestIndexTipColor.GetColor()); } } }
/// <summary> /// Lerps this mixing liquid's color towards the index tip's color, and returns the index tip's color lerped towards the mixing liquid's color. /// </summary> public Color MixWithIndexTipColor(IndexTipColor indexTipColor, float multiplier = 1F) { int extra = (int)((Time.time - _nextEffectTime) / _effectPeriod); if (extra > 1) { _nextEffectTime += extra * _effectPeriod; _mixEffect.PlayAtPosition(transform, Mathf.Clamp01(multiplier / _maxEffectValue)); } Color mixColor = indexTipColor.GetColor(); Color liquidColor = _liquidMeshRenderer.material.GetColor(Shader.PropertyToID("_Color")); _liquidMeshRenderer.material.SetColor("_Color", Color.Lerp(liquidColor, mixColor, _mixingCoefficient * multiplier)); //Debug.Log("Liquid lerped to index tip distance: " + GetColorDistance(mixColor, Color.Lerp(liquidColor, mixColor, _mixingCoefficient * multiplier))); liquidColor = _liquidMeshRenderer.material.GetColor(Shader.PropertyToID("_Color")); return(Color.Lerp(mixColor, liquidColor, _mixingCoefficient * multiplier)); }
private IndexTipColor GetNearestTipColor() { IndexTipColor[] eligibleTipColors = _palette.eligibleIndexTipColors; IndexTipColor nearestIndexTipColor = null; for (int i = 0; i < eligibleTipColors.Length; i++) { if (nearestIndexTipColor == null || Vector3.Distance(this.transform.position, eligibleTipColors[i].transform.position) < Vector3.Distance(this.transform.position, nearestIndexTipColor.transform.position)) { nearestIndexTipColor = eligibleTipColors[i]; } } if (nearestIndexTipColor != null) { return(nearestIndexTipColor); } else { Debug.LogWarning("[ColorSwatch] No IndexTipColor found! Could not retrieve nearest one."); return(null); } }