public void CalculateProgressions(int num_progressions, ActionColorProgression offset_prog, bool variableActive = true) { if(!variableActive) { SetValueReference(offset_prog); return; } else if(m_is_offset_from_last) { m_value_state = PROGRESSION_VALUE_STATE.OFFSET_FROM_REFERENCE; m_offset_progression = offset_prog.GetOffsetReference(); } else m_value_state = PROGRESSION_VALUE_STATE.UNIQUE; // Initialise the array of values. Array of only one if all progressions share the same constant value. m_values = new VertexColour[Progression == (int) ValueProgression.Eased || Progression == (int) ValueProgression.EasedCustom || Progression == (int) ValueProgression.Random ? num_progressions : 1]; // Calculate progression values if(Progression == (int) ValueProgression.Random) { for(int idx=0; idx < num_progressions; idx++) { m_values[idx] = ValueFrom.Add(ValueTo.Sub(ValueFrom).Multiply(UnityEngine.Random.value)); } } else if(Progression == (int) ValueProgression.Eased) { float progression; for(int idx=0; idx < num_progressions; idx++) { progression = num_progressions == 1 ? 0 : (float)idx / ((float)num_progressions - 1f); if(m_to_to_bool) { if(progression <= 0.5f) { m_values[idx] = ValueFrom.Add((ValueTo.Sub(ValueFrom)).Multiply(EasingManager.GetEaseProgress(m_ease_type, progression/0.5f))); } else { progression -= 0.5f; m_values[idx] = ValueTo.Add((ValueThen.Sub(ValueTo)).Multiply(EasingManager.GetEaseProgress(m_ease_type, progression/0.5f))); } } else { m_values[idx] = ValueFrom.Add((ValueTo.Sub(ValueFrom)).Multiply(EasingManager.GetEaseProgress(m_ease_type, progression))); } } } else if(Progression == (int) ValueProgression.EasedCustom) { float progression; for(int idx=0; idx < num_progressions; idx++) { progression = num_progressions == 1 ? 0 : (float)idx / ((float)num_progressions - 1f); m_values[idx] = ValueFrom.Add((ValueTo.Sub(ValueFrom)).Multiply(m_custom_ease_curve.Evaluate(progression))); } } else if(Progression == (int) ValueProgression.Constant) { for(int idx=0; idx < m_values.Length; idx++) { m_values[idx] = ValueFrom; } } }
public void SetValueReference(ActionVector3Progression progression) { m_value_state = PROGRESSION_VALUE_STATE.REFERENCE; m_offset_progression = progression.ReferenceData; }
public virtual void CalculateProgressions(int num_progressions, ActionVector3Progression offset_prog, bool variableActive = true) { if(!variableActive) { SetValueReference(offset_prog); return; } else if(m_is_offset_from_last && offset_prog != null) { m_value_state = PROGRESSION_VALUE_STATE.OFFSET_FROM_REFERENCE; m_offset_progression = offset_prog.GetOffsetReference(); } else m_value_state = PROGRESSION_VALUE_STATE.UNIQUE; // Initialise the array of values. Array of only one if all progressions share the same constant value. m_values = new Vector3[Progression == (int) ValueProgression.Eased || Progression == (int) ValueProgression.EasedCustom || Progression == (int) ValueProgression.Random ? num_progressions : 1]; // Calculate progression values if(Progression == (int) ValueProgression.Random) { for(int idx=0; idx < num_progressions; idx++) { m_values[idx] = new Vector3(m_from.x + (m_to.x - m_from.x) * UnityEngine.Random.value, m_from.y + (m_to.y - m_from.y) * UnityEngine.Random.value, m_from.z + (m_to.z - m_from.z) * UnityEngine.Random.value); } } else if(Progression == (int) ValueProgression.Eased) { float progression; for(int idx=0; idx < num_progressions; idx++) { progression = num_progressions == 1 ? 0 : (float)idx / ((float)num_progressions - 1f); if(m_to_to_bool) { if(progression <= 0.5f) { m_values[idx] = m_from + (m_to - m_from) * EasingManager.GetEaseProgress(m_ease_type, progression/0.5f); } else { progression -= 0.5f; m_values[idx] = m_to + (m_to_to - m_to) * EasingManager.GetEaseProgress(EasingManager.GetEaseTypeOpposite(m_ease_type), progression/0.5f); } } else { m_values[idx] = m_from + (m_to - m_from) * EasingManager.GetEaseProgress(m_ease_type, progression); } } } else if(Progression == (int) ValueProgression.EasedCustom) { float progression; for(int idx=0; idx < num_progressions; idx++) { progression = num_progressions == 1 ? 0 : (float)idx / ((float)num_progressions - 1f); if(m_ease_curve_per_axis) { m_values[idx].x = m_from.x + (m_to.x - m_from.x) * m_custom_ease_curve.Evaluate(progression); m_values[idx].y = m_from.y + (m_to.y - m_from.y) * m_custom_ease_curve_y.Evaluate(progression); m_values[idx].z = m_from.z + (m_to.z - m_from.z) * m_custom_ease_curve_z.Evaluate(progression); } else m_values[idx] = m_from + (m_to - m_from) * m_custom_ease_curve.Evaluate(progression); } } else if(Progression == (int) ValueProgression.Constant) { for(int idx=0; idx < m_values.Length; idx++) { m_values[idx] = m_from; } } }