private bool EqualStop(LW_ColorStop other) { return( percentage == other.percentage && color == other.color ); }
/// <summary> /// Removes the provided LW_ColorStop to the list of color stops. /// </summary> /// <param name="stop"></param> public void RemoveStop(LW_ColorStop stop) { List <LW_ColorStop> colors = gradientColors; if (colors.Contains(stop)) { colors.Remove(stop); } gradientColors = colors; SetElementDirty(); }
protected override void OnValidate() { if (m_GradientColors == null || m_GradientColors.Count == 0) { m_GradientColors = new List <LW_ColorStop>() { new LW_ColorStop(Color.white, 0f), new LW_ColorStop(Color.black, 1f) } } ; if (m_GradientColors != null && m_GradientColors.Count > 0) { float min = 0; float max = 1; for (int i = 0; i < m_GradientColors.Count; i++) { max = i < m_GradientColors.Count - 1 ? m_GradientColors[i + 1].percentage : 1; LW_ColorStop stop = m_GradientColors[i]; stop.percentage = Mathf.Clamp(stop.percentage, min, max); m_GradientColors[i] = stop; min = stop.percentage; } /* * m_GradientColors.Sort(delegate(LW_ColorStop x, LW_ColorStop y){ * if (x.percentage - y.percentage > 0) return 1; * else if (x.percentage - y.percentage < 0) return -1; * else return 0; * }); */ LW_ColorStop firstStop = m_GradientColors[0]; firstStop.percentage = 0; m_GradientColors[0] = firstStop; if (m_GradientColors.Count > 1) { LW_ColorStop lastStop = m_GradientColors[m_GradientColors.Count - 1]; lastStop.percentage = 1; m_GradientColors[m_GradientColors.Count - 1] = lastStop; } } base.OnValidate(); } #endif }
internal virtual Color ColorAtPercentage(float percentage) { Color color = s_White; switch (m_PaintMode) { case PaintMode.Solid: if (m_GradientColors != null && m_GradientColors.Count > 0) { color = m_GradientColors[0].color; } else { color = s_White; } break; case PaintMode.LinearGradient: case PaintMode.RadialGradient: if (m_GradientColors != null && m_GradientColors.Count > 0) { if (m_GradientColors.Count == 1) { color = m_GradientColors[0].color; } else { int closestIndex = 0; for (int i = 0; i < m_GradientColors.Count; i++) { if (m_GradientColors[i].percentage < percentage) { closestIndex = i; } else { break; } } LW_ColorStop start = m_GradientColors[closestIndex]; LW_ColorStop end = closestIndex < m_GradientColors.Count - 1 ? m_GradientColors[closestIndex + 1] : m_GradientColors[closestIndex]; if (start.percentage != end.percentage) { float t = (percentage - start.percentage) / (end.percentage - start.percentage); color = Color.Lerp(start.color, end.color, t); } else { color = start.color; } } } else { color = s_White; } break; } color.a *= m_Opacity; return(color); }
/// <summary> /// Adds a LW_ColorStop to the list of color stops. /// </summary> /// <param name="stop"></param> public void AddStop(LW_ColorStop stop) { //Debug.Log("AddingStop: " + stop.color + " : " + stop.percentage); m_GradientColors.Add(stop); SetElementDirty(); }
internal override Color ColorAtPercentage(float percentage) { Color color = s_White; switch (m_PaintMode) { case PaintMode.Solid: if (m_GradientColors != null && m_GradientColors.Count > 0) { color = m_GradientColors[0].color; } else { color = s_White; } break; case PaintMode.LinearGradient: case PaintMode.RadialGradient: if (m_GradientColors != null && m_GradientColors.Count > 0) { if (m_GradientColors.Count == 1) { color = m_GradientColors[0].color; } else { if (m_SpaceColorsEvenly) { int beforeIndex = Mathf.FloorToInt(percentage * (m_GradientColors.Count - 1)); int afterIndex = beforeIndex < m_GradientColors.Count - 1 ? beforeIndex + 1 : beforeIndex; LW_ColorStop beforeStop = m_GradientColors[beforeIndex]; LW_ColorStop afterStop = m_GradientColors[afterIndex]; float beforePercentage = (float)beforeIndex / (float)(m_GradientColors.Count - 1); float afterPercentage = (float)afterIndex / (float)(m_GradientColors.Count - 1); if (beforePercentage != afterPercentage) { float t = (percentage - beforePercentage) / (afterPercentage - beforePercentage); color = Color.Lerp(beforeStop.color, afterStop.color, t); } else { color = beforeStop.color; } } else { int closestIndex = 0; for (int i = 0; i < m_GradientColors.Count; i++) { if (m_GradientColors[i].percentage < percentage) { closestIndex = i; } else { break; } } LW_ColorStop start = m_GradientColors[closestIndex]; LW_ColorStop end = closestIndex < m_GradientColors.Count - 1 ? m_GradientColors[closestIndex + 1] : m_GradientColors[closestIndex]; if (start.percentage != end.percentage) { float t = (percentage - start.percentage) / (end.percentage - start.percentage); color = Color.Lerp(start.color, end.color, t); } else { color = start.color; } } } } else { color = s_White; } break; } color.a *= m_Opacity; return(color); }