public void SoftResetStarts(LetterAction prev_action, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per) { if (m_use_gradient_start) { if (!m_offset_from_last && m_start_vertex_colour.UniqueRandom) { m_start_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_vertex_colour.Values : null); } } else { if (!m_offset_from_last && m_start_colour.UniqueRandom) { m_start_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_colour.Values : null); } } if (!m_offset_from_last) { if (m_start_pos.UniqueRandom) { m_start_pos.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_pos.Values : null); } if (m_start_euler_rotation.UniqueRandom) { m_start_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_euler_rotation.Values : null); } if (m_start_scale.UniqueRandom) { m_start_scale.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_scale.Values : null); } } }
public ParticleEffectInstanceManager(EffectManager effect_manager, Mesh character_mesh, bool letter_flipped, ParticleEffectSetup effect_setup, AnimationProgressionVariables progression_vars, AnimatePerOptions animate_per, ParticleEmitter particle_emitter = null, ParticleSystem particle_system = null) { m_particle_emitter = particle_emitter; m_particle_system = particle_system; m_letter_mesh = character_mesh; m_letter_flipped = letter_flipped; m_follow_mesh = effect_setup.m_follow_mesh; m_duration = effect_setup.m_duration.GetValue(progression_vars, animate_per); m_delay = effect_setup.m_delay.GetValue(progression_vars, animate_per); m_position_offset = effect_setup.m_position_offset.GetValue(progression_vars, animate_per); m_rotation_offset = Quaternion.Euler(effect_setup.m_rotation_offset.GetValue(progression_vars, animate_per)); m_rotate_with_letter = effect_setup.m_rotate_relative_to_letter; m_effect_manager_handle = effect_manager; m_active = false; if (m_particle_emitter != null) { m_transform = m_particle_emitter.transform; m_particle_emitter.emit = true; m_particle_emitter.enabled = false; } else if (m_particle_system != null) { m_transform = m_particle_system.transform; m_particle_system.playOnAwake = false; m_particle_system.Play(); #if !UNITY_3_5 && UNITY_EDITOR p_system_timer = 0; #endif } }
public void CalculateUniqueRandom(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, Color[] offset_cols) { int progression_idx = GetProgressionIndex(progression_variables, animate_per); bool constant_offset = offset_cols != null && offset_cols.Length == 1; m_values[progression_idx] = m_is_offset_from_last ? offset_cols[constant_offset ? 0 : progression_idx] : new Color(0, 0, 0, 0); m_values[progression_idx] += m_from + (m_to - m_from) * UnityEngine.Random.value; }
public void CalculateUniqueRandom(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, VertexColour[] offset_colours) { int progression_idx = GetProgressionIndex(progression_variables, animate_per); bool constant_offset = offset_colours != null && offset_colours.Length == 1; m_values[progression_idx] = m_is_offset_from_last ? offset_colours[constant_offset ? 0 : progression_idx].Clone() : new VertexColour(new Color(0, 0, 0, 0)); m_values[progression_idx] = m_values[progression_idx].Add(m_from.Add(m_to.Sub(m_from).Multiply(UnityEngine.Random.value))); }
public void CalculateUniqueRandom(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, Vector3[] offset_vec) { int progression_idx = GetProgressionIndex(progression_variables, animate_per); bool constant_offset = offset_vec != null && offset_vec.Length == 1; m_values[progression_idx] = m_is_offset_from_last ? offset_vec[constant_offset ? 0 : progression_idx] : Vector3.zero; m_values[progression_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); }
public void Recycle(string character, int letter_idx, Mesh mesh, Vector3 base_offset, ref CustomCharacterInfo char_info, int line_num, int word_idx) { m_character = character; m_mesh = mesh; m_base_offset = base_offset; m_progression_variables = new AnimationProgressionVariables(letter_idx, word_idx, line_num); SetupLetterMesh(ref char_info); if (m_flipped) { // flip UV coords in x axis. m_mesh.uv = new Vector2[] { mesh.uv[3], mesh.uv[2], mesh.uv[1], mesh.uv[0] }; } m_current_letter_action = null; }
private VertexColour start_colour, end_colour; // Used to store the colours for each frame #endregion Fields #region Constructors public LetterSetup(string character, int letter_idx, Mesh mesh, Vector3 base_offset, ref CustomCharacterInfo char_info, int line_num, int word_idx, EffectManager effect_manager) { m_character = character; m_mesh = mesh; m_base_offset = base_offset; m_effect_manager_handle = effect_manager; m_progression_variables = new AnimationProgressionVariables(letter_idx, word_idx, line_num); m_anim_state_vars = new AnimationStateVariables(); m_anim_state_vars.m_active_loop_cycles = new List<ActionLoopCycle>(); SetupLetterMesh(ref char_info); if (m_flipped) // flip UV coords in x axis. m_mesh.uv = new[] { mesh.uv[3], mesh.uv[2], mesh.uv[1], mesh.uv[0] }; }
public LetterSetup(string character, int letter_idx, Mesh mesh, Vector3 base_offset, ref CustomCharacterInfo char_info, int line_num, int word_idx) { m_character = character; m_mesh = mesh; m_base_offset = base_offset; m_progression_variables = new AnimationProgressionVariables(letter_idx, word_idx, line_num); m_anim_state_vars = new AnimationStateVariables(); m_anim_state_vars.m_active_loop_cycles = new List <ActionLoopCycle>(); SetupLetterMesh(ref char_info); if (m_flipped) { // flip UV coords in x axis. m_mesh.uv = new Vector2[] { mesh.uv[3], mesh.uv[2], mesh.uv[1], mesh.uv[0] }; } }
public ParticleEffectInstanceManager(TextFxAnimationManager animation_manager, LetterSetup letter_setup_ref, ParticleEffectSetup effect_setup, AnimationProgressionVariables progression_vars, AnimatePerOptions animate_per, ParticleEmitter particle_emitter = null, ParticleSystem particle_system = null) { m_particle_emitter = particle_emitter; m_particle_system = particle_system; m_letter_setup_ref = letter_setup_ref; m_follow_mesh = effect_setup.m_follow_mesh; m_duration = effect_setup.m_duration.GetValue(progression_vars, animate_per); m_delay = effect_setup.m_delay.GetValue(progression_vars, animate_per); m_position_offset = effect_setup.m_position_offset.GetValue(null, progression_vars, animate_per); m_rotation_offset = Quaternion.Euler(effect_setup.m_rotation_offset.GetValue(null, progression_vars, animate_per)); m_rotate_with_letter = effect_setup.m_rotate_relative_to_letter; m_animation_manager = animation_manager; m_active = false; if(m_particle_emitter != null) { m_transform = m_particle_emitter.transform; m_particle_emitter.emit = true; m_particle_emitter.enabled = false; // Set the layer of the effect if an override is specified if(animation_manager.AnimationInterface.LayerOverride >= 0) m_particle_emitter.gameObject.layer = animation_manager.AnimationInterface.LayerOverride; } else if(m_particle_system != null) { m_transform = m_particle_system.transform; m_particle_system.playOnAwake = false; m_particle_system.Play(); #if !UNITY_3_5 && UNITY_EDITOR p_system_timer = 0; #endif // Set the layer of the effect if an override is specified if(animation_manager.AnimationInterface.LayerOverride >= 0) m_particle_system.gameObject.layer = animation_manager.AnimationInterface.LayerOverride; } }
public void SoftReset(LetterAction prev_action, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, bool first_action = false) { if (m_use_gradient || m_use_gradient_start) { if (!m_offset_from_last && m_start_vertex_colour.UniqueRandom && !first_action) { m_start_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_vertex_colour.m_values : null); } } else { if (!m_offset_from_last && m_start_colour.UniqueRandom && !first_action) { m_start_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_colour.m_values : null); } } if (!m_offset_from_last && !first_action) { if (m_start_pos.UniqueRandom) { m_start_pos.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_pos.m_values : null); } if (m_start_euler_rotation.UniqueRandom) { m_start_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_euler_rotation.m_values : null); } if (m_start_scale.UniqueRandom) { m_start_scale.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_scale.m_values : null); } } // End State Unique Randoms if (m_use_gradient || m_use_gradient_end) { if (m_end_vertex_colour.UniqueRandom) { m_end_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, m_start_vertex_colour.m_values); } } else { if (m_end_colour.UniqueRandom) { m_end_colour.CalculateUniqueRandom(progression_variables, animate_per, m_start_colour.m_values); } } if (m_end_pos.UniqueRandom) { m_end_pos.CalculateUniqueRandom(progression_variables, animate_per, m_start_pos.m_values); } if (m_end_euler_rotation.UniqueRandom) { m_end_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, m_start_euler_rotation.m_values); } if (m_end_scale.UniqueRandom) { m_end_scale.CalculateUniqueRandom(progression_variables, animate_per, m_start_scale.m_values); } // Timing unique randoms if (m_delay_progression.UniqueRandom) { m_delay_progression.CalculateUniqueRandom(progression_variables, animate_per); } if (m_duration_progression.UniqueRandom) { m_duration_progression.CalculateUniqueRandom(progression_variables, animate_per); } if (m_audio_on_start != null) { if (m_audio_on_start_volume.UniqueRandom) { m_audio_on_start_volume.CalculateUniqueRandom(progression_variables, animate_per); } if (m_audio_on_start_delay.UniqueRandom) { m_audio_on_start_delay.CalculateUniqueRandom(progression_variables, animate_per); } if (m_audio_on_start_offset.UniqueRandom) { m_audio_on_start_offset.CalculateUniqueRandom(progression_variables, animate_per); } if (m_audio_on_start_pitch.UniqueRandom) { m_audio_on_start_pitch.CalculateUniqueRandom(progression_variables, animate_per); } } if (m_audio_on_finish != null) { if (m_audio_on_finish_volume.UniqueRandom) { m_audio_on_finish_volume.CalculateUniqueRandom(progression_variables, animate_per); } if (m_audio_on_finish_delay.UniqueRandom) { m_audio_on_finish_delay.CalculateUniqueRandom(progression_variables, animate_per); } if (m_audio_on_finish_offset.UniqueRandom) { m_audio_on_finish_offset.CalculateUniqueRandom(progression_variables, animate_per); } if (m_audio_on_finish_pitch.UniqueRandom) { m_audio_on_finish_pitch.CalculateUniqueRandom(progression_variables, animate_per); } } if (m_emitter_on_start != null) { if (m_emitter_on_start_offset.UniqueRandom) { m_emitter_on_start_offset.CalculateUniqueRandom(progression_variables, animate_per, null); } if (m_emitter_on_start_delay.UniqueRandom) { m_emitter_on_start_delay.CalculateUniqueRandom(progression_variables, animate_per); } if (m_emitter_on_start_duration.UniqueRandom) { m_emitter_on_start_duration.CalculateUniqueRandom(progression_variables, animate_per); } } if (m_emitter_on_finish != null) { if (m_emitter_on_finish_offset.UniqueRandom) { m_emitter_on_finish_offset.CalculateUniqueRandom(progression_variables, animate_per, null); } if (m_emitter_on_finish_delay.UniqueRandom) { m_emitter_on_finish_delay.CalculateUniqueRandom(progression_variables, animate_per); } if (m_emitter_on_finish_duration.UniqueRandom) { m_emitter_on_finish_duration.CalculateUniqueRandom(progression_variables, animate_per); } } }
public void CalculateUniqueRandom(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per) { m_values[GetProgressionIndex(progression_variables, animate_per)] = m_from + (m_to - m_from) * UnityEngine.Random.value; }
public void SoftReset(LetterAction prev_action, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, bool first_action = false) { if(m_use_gradient || m_use_gradient_start) { if(!m_offset_from_last && m_start_vertex_colour.UniqueRandom && !first_action) { m_start_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_vertex_colour.m_values : null); } } else { if(!m_offset_from_last && m_start_colour.UniqueRandom && !first_action) { m_start_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_colour.m_values : null); } } if(!m_offset_from_last && !first_action) { if(m_start_pos.UniqueRandom) { m_start_pos.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_pos.m_values : null); } if(m_start_euler_rotation.UniqueRandom) { m_start_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_euler_rotation.m_values : null); } if(m_start_scale.UniqueRandom) { m_start_scale.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_scale.m_values : null); } } // End State Unique Randoms if(m_use_gradient || m_use_gradient_end) { if(m_end_vertex_colour.UniqueRandom) { m_end_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, m_start_vertex_colour.m_values); } } else { if(m_end_colour.UniqueRandom) { m_end_colour.CalculateUniqueRandom(progression_variables, animate_per, m_start_colour.m_values); } } if(m_end_pos.UniqueRandom) { m_end_pos.CalculateUniqueRandom(progression_variables, animate_per, m_start_pos.m_values); } if(m_end_euler_rotation.UniqueRandom) { m_end_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, m_start_euler_rotation.m_values); } if(m_end_scale.UniqueRandom) { m_end_scale.CalculateUniqueRandom(progression_variables, animate_per, m_start_scale.m_values); } // Timing unique randoms if(m_delay_progression.UniqueRandom) { m_delay_progression.CalculateUniqueRandom(progression_variables, animate_per); } if(m_duration_progression.UniqueRandom) { m_duration_progression.CalculateUniqueRandom(progression_variables, animate_per); } if(m_audio_on_start != null) { if(m_audio_on_start_volume.UniqueRandom) m_audio_on_start_volume.CalculateUniqueRandom(progression_variables, animate_per); if(m_audio_on_start_delay.UniqueRandom) m_audio_on_start_delay.CalculateUniqueRandom(progression_variables, animate_per); if(m_audio_on_start_offset.UniqueRandom) m_audio_on_start_offset.CalculateUniqueRandom(progression_variables, animate_per); if(m_audio_on_start_pitch.UniqueRandom) m_audio_on_start_pitch.CalculateUniqueRandom(progression_variables, animate_per); } if(m_audio_on_finish != null) { if(m_audio_on_finish_volume.UniqueRandom) m_audio_on_finish_volume.CalculateUniqueRandom(progression_variables, animate_per); if(m_audio_on_finish_delay.UniqueRandom) m_audio_on_finish_delay.CalculateUniqueRandom(progression_variables, animate_per); if(m_audio_on_finish_offset.UniqueRandom) m_audio_on_finish_offset.CalculateUniqueRandom(progression_variables, animate_per); if(m_audio_on_finish_pitch.UniqueRandom) m_audio_on_finish_pitch.CalculateUniqueRandom(progression_variables, animate_per); } if(m_emitter_on_start != null) { if(m_emitter_on_start_offset.UniqueRandom) m_emitter_on_start_offset.CalculateUniqueRandom(progression_variables, animate_per, null); if(m_emitter_on_start_delay.UniqueRandom) m_emitter_on_start_delay.CalculateUniqueRandom(progression_variables, animate_per); if(m_emitter_on_start_duration.UniqueRandom) m_emitter_on_start_duration.CalculateUniqueRandom(progression_variables, animate_per); } if(m_emitter_on_finish != null) { if(m_emitter_on_finish_offset.UniqueRandom) m_emitter_on_finish_offset.CalculateUniqueRandom(progression_variables, animate_per, null); if(m_emitter_on_finish_delay.UniqueRandom) m_emitter_on_finish_delay.CalculateUniqueRandom(progression_variables, animate_per); if(m_emitter_on_finish_duration.UniqueRandom) m_emitter_on_finish_duration.CalculateUniqueRandom(progression_variables, animate_per); } }
void SetupMesh(LetterAction letter_action, float action_progress, bool first_action_call, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, float linear_progress) { if(first_action_call || !letter_action.StaticPosition || !letter_action.StaticRotation || !letter_action.StaticScale) { Vector3[] mesh_verts = new Vector3[4]; for(int idx=0; idx < 4; idx++) { // rotate vertices // handle letter anchor x-offset Vector3 anchor_offset = Vector3.zero; if(letter_action.m_letter_anchor == TextAnchor.UpperRight || letter_action.m_letter_anchor == TextAnchor.MiddleRight || letter_action.m_letter_anchor == TextAnchor.LowerRight) { anchor_offset += new Vector3(m_width, 0, 0); } else if(letter_action.m_letter_anchor == TextAnchor.UpperCenter || letter_action.m_letter_anchor == TextAnchor.MiddleCenter || letter_action.m_letter_anchor == TextAnchor.LowerCenter) { anchor_offset += new Vector3(m_width / 2, 0, 0); } // handle letter anchor y-offset if(letter_action.m_letter_anchor == TextAnchor.MiddleLeft || letter_action.m_letter_anchor == TextAnchor.MiddleCenter || letter_action.m_letter_anchor == TextAnchor.MiddleRight) { anchor_offset += new Vector3(0, m_height / 2, 0); } else if(letter_action.m_letter_anchor == TextAnchor.LowerLeft || letter_action.m_letter_anchor == TextAnchor.LowerCenter || letter_action.m_letter_anchor == TextAnchor.LowerRight) { anchor_offset += new Vector3(0, m_height, 0); } mesh_verts[idx] = m_base_vertices[idx]; mesh_verts[idx] -= anchor_offset; // Scale verts // if(first_action_call) // || !letter_action.StaticScale) // { Vector3 from_scale = letter_action.m_start_scale.GetValue(progression_variables, animate_per); Vector3 to_scale = letter_action.m_end_scale.GetValue(progression_variables, animate_per); if(letter_action.m_scale_axis_ease_data.m_override_default) { mesh_verts[idx] = Vector3.Scale(mesh_verts[idx], new Vector3( EffectManager.FloatLerp(from_scale.x, to_scale.x, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_scale.y, to_scale.y, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_scale.z, to_scale.z, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_z_ease, linear_progress)))); } else { mesh_verts[idx] = Vector3.Scale(mesh_verts[idx], EffectManager.Vector3Lerp( from_scale, to_scale, action_progress) ); } // } // Rotate vert // if(first_action_call) // || !letter_action.StaticRotation) // { Vector3 from_rotation = letter_action.m_start_euler_rotation.GetValue(progression_variables, animate_per); Vector3 to_rotation = letter_action.m_end_euler_rotation.GetValue(progression_variables, animate_per); if(letter_action.m_rotation_axis_ease_data.m_override_default) { mesh_verts[idx] = Quaternion.Euler ( EffectManager.FloatLerp(from_rotation.x, to_rotation.x, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_rotation.y, to_rotation.y, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_rotation.z, to_rotation.z, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_z_ease, linear_progress)) ) * mesh_verts[idx];; } else { mesh_verts[idx] = Quaternion.Euler( EffectManager.Vector3Lerp( from_rotation, to_rotation, action_progress) ) * mesh_verts[idx]; } // } mesh_verts[idx] += anchor_offset; // translate vert Vector3 from_pos = (!letter_action.m_start_pos.m_force_position_override ? m_base_offset : Vector3.zero) + letter_action.m_start_pos.GetValue(progression_variables, animate_per); Vector3 to_pos = (!letter_action.m_end_pos.m_force_position_override ? m_base_offset : Vector3.zero) + letter_action.m_end_pos.GetValue(progression_variables, animate_per); if(letter_action.m_position_axis_ease_data.m_override_default) { mesh_verts[idx] += new Vector3( EffectManager.FloatLerp(from_pos.x, to_pos.x, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_pos.y, to_pos.y, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_pos.z, to_pos.z, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_z_ease, linear_progress))); } else { mesh_verts[idx] += EffectManager.Vector3Lerp( from_pos, to_pos, action_progress); } } m_mesh.vertices = mesh_verts; } if(first_action_call || !letter_action.StaticColour) { if(letter_action.m_use_gradient_start || letter_action.m_use_gradient) { start_colour = letter_action.m_start_vertex_colour.GetValue(progression_variables, animate_per); } else { start_colour = new VertexColour(letter_action.m_start_colour.GetValue(progression_variables, animate_per)); } if(letter_action.m_use_gradient_end || letter_action.m_use_gradient) { end_colour = letter_action.m_end_vertex_colour.GetValue(progression_variables, animate_per); } else { end_colour = new VertexColour(letter_action.m_end_colour.GetValue(progression_variables, animate_per)); } if(!m_flipped) { m_mesh.colors = new Color[]{ Color.Lerp(start_colour.top_right, end_colour.top_right, action_progress), Color.Lerp(start_colour.top_left, end_colour.top_left, action_progress), Color.Lerp(start_colour.bottom_left, end_colour.bottom_left, action_progress), Color.Lerp(start_colour.bottom_right, end_colour.bottom_right, action_progress)}; } else { m_mesh.colors = new Color[]{ Color.Lerp(start_colour.top_left, end_colour.top_left, action_progress), Color.Lerp(start_colour.bottom_left, end_colour.bottom_left, action_progress), Color.Lerp(start_colour.bottom_right, end_colour.bottom_right, action_progress), Color.Lerp(start_colour.top_right, end_colour.top_right, action_progress) }; } } }
public void Recycle(string character, int letter_idx, Mesh mesh, Vector3 base_offset, ref CustomCharacterInfo char_info, int line_num, int word_idx) { m_character = character; m_mesh = mesh; m_base_offset = base_offset; m_progression_variables = new AnimationProgressionVariables(letter_idx, word_idx, line_num); SetupLetterMesh(ref char_info); if(m_flipped) { // flip UV coords in x axis. m_mesh.uv = new Vector2[] {mesh.uv[3], mesh.uv[2], mesh.uv[1], mesh.uv[0]}; } m_current_letter_action = null; }
void SetupMesh(LetterAction letter_action, float action_progress, bool first_action_call, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, float linear_progress) { if (first_action_call || !letter_action.StaticPosition || !letter_action.StaticRotation || !letter_action.StaticScale) { Vector3[] mesh_verts = new Vector3[4]; for (int idx = 0; idx < 4; idx++) { // rotate vertices // handle letter anchor x-offset Vector3 anchor_offset = Vector3.zero; if (letter_action.m_letter_anchor == TextAnchor.UpperRight || letter_action.m_letter_anchor == TextAnchor.MiddleRight || letter_action.m_letter_anchor == TextAnchor.LowerRight) { anchor_offset += new Vector3(m_width, 0, 0); } else if (letter_action.m_letter_anchor == TextAnchor.UpperCenter || letter_action.m_letter_anchor == TextAnchor.MiddleCenter || letter_action.m_letter_anchor == TextAnchor.LowerCenter) { anchor_offset += new Vector3(m_width / 2, 0, 0); } // handle letter anchor y-offset if (letter_action.m_letter_anchor == TextAnchor.MiddleLeft || letter_action.m_letter_anchor == TextAnchor.MiddleCenter || letter_action.m_letter_anchor == TextAnchor.MiddleRight) { anchor_offset += new Vector3(0, m_height / 2, 0); } else if (letter_action.m_letter_anchor == TextAnchor.LowerLeft || letter_action.m_letter_anchor == TextAnchor.LowerCenter || letter_action.m_letter_anchor == TextAnchor.LowerRight) { anchor_offset += new Vector3(0, m_height, 0); } mesh_verts[idx] = m_base_vertices[idx]; mesh_verts[idx] -= anchor_offset; // Scale verts // if(first_action_call) // || !letter_action.StaticScale) // { Vector3 from_scale = letter_action.m_start_scale.GetValue(progression_variables, animate_per); Vector3 to_scale = letter_action.m_end_scale.GetValue(progression_variables, animate_per); if (letter_action.m_scale_axis_ease_data.m_override_default) { mesh_verts[idx] = Vector3.Scale(mesh_verts[idx], new Vector3(EffectManager.FloatLerp(from_scale.x, to_scale.x, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_scale.y, to_scale.y, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_scale.z, to_scale.z, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_z_ease, linear_progress)))); } else { mesh_verts[idx] = Vector3.Scale(mesh_verts[idx], EffectManager.Vector3Lerp( from_scale, to_scale, action_progress) ); } // } // Rotate vert // if(first_action_call) // || !letter_action.StaticRotation) // { Vector3 from_rotation = letter_action.m_start_euler_rotation.GetValue(progression_variables, animate_per); Vector3 to_rotation = letter_action.m_end_euler_rotation.GetValue(progression_variables, animate_per); if (letter_action.m_rotation_axis_ease_data.m_override_default) { mesh_verts[idx] = Quaternion.Euler ( EffectManager.FloatLerp(from_rotation.x, to_rotation.x, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_rotation.y, to_rotation.y, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_rotation.z, to_rotation.z, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_z_ease, linear_progress)) ) * mesh_verts[idx];; } else { mesh_verts[idx] = Quaternion.Euler( EffectManager.Vector3Lerp( from_rotation, to_rotation, action_progress) ) * mesh_verts[idx]; } // } mesh_verts[idx] += anchor_offset; // translate vert Vector3 from_pos = (!letter_action.m_start_pos.m_force_position_override ? m_base_offset : Vector3.zero) + letter_action.m_start_pos.GetValue(progression_variables, animate_per); Vector3 to_pos = (!letter_action.m_end_pos.m_force_position_override ? m_base_offset : Vector3.zero) + letter_action.m_end_pos.GetValue(progression_variables, animate_per); if (letter_action.m_position_axis_ease_data.m_override_default) { mesh_verts[idx] += new Vector3(EffectManager.FloatLerp(from_pos.x, to_pos.x, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_pos.y, to_pos.y, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_pos.z, to_pos.z, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_z_ease, linear_progress))); } else { mesh_verts[idx] += EffectManager.Vector3Lerp( from_pos, to_pos, action_progress); } } m_mesh.vertices = mesh_verts; } if (first_action_call || !letter_action.StaticColour) { if (letter_action.m_use_gradient_start || letter_action.m_use_gradient) { start_colour = letter_action.m_start_vertex_colour.GetValue(progression_variables, animate_per); } else { start_colour = new VertexColour(letter_action.m_start_colour.GetValue(progression_variables, animate_per)); } if (letter_action.m_use_gradient_end || letter_action.m_use_gradient) { end_colour = letter_action.m_end_vertex_colour.GetValue(progression_variables, animate_per); } else { end_colour = new VertexColour(letter_action.m_end_colour.GetValue(progression_variables, animate_per)); } if (!m_flipped) { m_mesh.colors = new Color[] { Color.Lerp(start_colour.top_right, end_colour.top_right, action_progress), Color.Lerp(start_colour.top_left, end_colour.top_left, action_progress), Color.Lerp(start_colour.bottom_left, end_colour.bottom_left, action_progress), Color.Lerp(start_colour.bottom_right, end_colour.bottom_right, action_progress) }; } else { m_mesh.colors = new Color[] { Color.Lerp(start_colour.top_left, end_colour.top_left, action_progress), Color.Lerp(start_colour.bottom_left, end_colour.bottom_left, action_progress), Color.Lerp(start_colour.bottom_right, end_colour.bottom_right, action_progress), Color.Lerp(start_colour.top_right, end_colour.top_right, action_progress) }; } } }
public Vector3 GetValue(List<LetterAction> all_letter_actions, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per_default, bool consider_white_space = false) { int prog_index = GetProgressionIndex (progression_variables, animate_per_default, consider_white_space); return GetValue(all_letter_actions, prog_index); }
public void SoftReset(LetterAction prev_action, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, bool first_action = false) { if (m_use_gradient_start) { if (!m_offset_from_last && m_start_vertex_colour.UniqueRandom && !first_action) { m_start_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_vertex_colour.Values : null); } } else { if (!m_offset_from_last && m_start_colour.UniqueRandom && !first_action) { m_start_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_colour.Values : null); } } if (!m_offset_from_last && !first_action) { if (m_start_pos.UniqueRandom) { m_start_pos.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_pos.Values : null); } if (m_start_euler_rotation.UniqueRandom) { m_start_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_euler_rotation.Values : null); } if (m_start_scale.UniqueRandom) { m_start_scale.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_scale.Values : null); } } // End State Unique Randoms if (m_use_gradient_end) { if (m_end_vertex_colour.UniqueRandom) { m_end_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, m_start_vertex_colour.Values); } } else { if (m_end_colour.UniqueRandom) { m_end_colour.CalculateUniqueRandom(progression_variables, animate_per, m_start_colour.Values); } } if (m_end_pos.UniqueRandom) { m_end_pos.CalculateUniqueRandom(progression_variables, animate_per, m_start_pos.Values); } if (m_end_euler_rotation.UniqueRandom) { m_end_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, m_start_euler_rotation.Values); } if (m_end_scale.UniqueRandom) { m_end_scale.CalculateUniqueRandom(progression_variables, animate_per, m_start_scale.Values); } // Timing unique randoms if (m_delay_progression.UniqueRandom) { m_delay_progression.CalculateUniqueRandom(progression_variables, animate_per); } if (m_duration_progression.UniqueRandom) { m_duration_progression.CalculateUniqueRandom(progression_variables, animate_per); } if (m_audio_effects != null) { foreach (AudioEffectSetup effect_setup in m_audio_effects) { if (effect_setup.m_delay.UniqueRandom) { effect_setup.m_delay.CalculateUniqueRandom(progression_variables, animate_per); } if (effect_setup.m_offset_time.UniqueRandom) { effect_setup.m_offset_time.CalculateUniqueRandom(progression_variables, animate_per); } if (effect_setup.m_volume.UniqueRandom) { effect_setup.m_volume.CalculateUniqueRandom(progression_variables, animate_per); } if (effect_setup.m_pitch.UniqueRandom) { effect_setup.m_pitch.CalculateUniqueRandom(progression_variables, animate_per); } } } if (m_particle_effects != null) { foreach (ParticleEffectSetup effect_setup in m_particle_effects) { if (effect_setup.m_position_offset.UniqueRandom) { effect_setup.m_position_offset.CalculateUniqueRandom(progression_variables, animate_per, null); } if (effect_setup.m_rotation_offset.UniqueRandom) { effect_setup.m_rotation_offset.CalculateUniqueRandom(progression_variables, animate_per, null); } if (effect_setup.m_delay.UniqueRandom) { effect_setup.m_delay.CalculateUniqueRandom(progression_variables, animate_per); } if (effect_setup.m_duration.UniqueRandom) { effect_setup.m_duration.CalculateUniqueRandom(progression_variables, animate_per); } } } }
public void CalculateUniqueRandom(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, Color[] offset_cols) { int progression_idx = GetProgressionIndex(progression_variables, animate_per); bool constant_offset = offset_cols != null && offset_cols.Length == 1; m_values[progression_idx] = m_is_offset_from_last ? offset_cols[constant_offset ? 0 : progression_idx] : new Color(0,0,0,0); m_values[progression_idx] += m_from + (m_to - m_from) * UnityEngine.Random.value; }
public VertexColour GetValue(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per_default) { return GetValue(GetProgressionIndex(progression_variables,animate_per_default)); }
public int GetProgressionIndex(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per_default) { return progression_variables.GetValue(m_override_animate_per_option ? m_animate_per : animate_per_default); }
public void SoftReset(LetterAction prev_action, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, bool first_action = false) { if (m_use_gradient_start) { if (!m_offset_from_last && m_start_vertex_colour.UniqueRandom && !first_action) m_start_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_vertex_colour.Values : null); } else if (!m_offset_from_last && m_start_colour.UniqueRandom && !first_action) m_start_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_colour.Values : null); if (!m_offset_from_last && !first_action) { if (m_start_pos.UniqueRandom) m_start_pos.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_pos.Values : null); if (m_start_euler_rotation.UniqueRandom) m_start_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_euler_rotation.Values : null); if (m_start_scale.UniqueRandom) m_start_scale.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_scale.Values : null); } // End State Unique Randoms if (m_use_gradient_end) { if (m_end_vertex_colour.UniqueRandom) m_end_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, m_start_vertex_colour.Values); } else if (m_end_colour.UniqueRandom) m_end_colour.CalculateUniqueRandom(progression_variables, animate_per, m_start_colour.Values); if (m_end_pos.UniqueRandom) m_end_pos.CalculateUniqueRandom(progression_variables, animate_per, m_start_pos.Values); if (m_end_euler_rotation.UniqueRandom) m_end_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, m_start_euler_rotation.Values); if (m_end_scale.UniqueRandom) m_end_scale.CalculateUniqueRandom(progression_variables, animate_per, m_start_scale.Values); // Timing unique randoms if (m_delay_progression.UniqueRandom) m_delay_progression.CalculateUniqueRandom(progression_variables, animate_per); if (m_duration_progression.UniqueRandom) m_duration_progression.CalculateUniqueRandom(progression_variables, animate_per); if (m_audio_effects != null) foreach (var effect_setup in m_audio_effects) { if (effect_setup.m_delay.UniqueRandom) effect_setup.m_delay.CalculateUniqueRandom(progression_variables, animate_per); if (effect_setup.m_offset_time.UniqueRandom) effect_setup.m_offset_time.CalculateUniqueRandom(progression_variables, animate_per); if (effect_setup.m_volume.UniqueRandom) effect_setup.m_volume.CalculateUniqueRandom(progression_variables, animate_per); if (effect_setup.m_pitch.UniqueRandom) effect_setup.m_pitch.CalculateUniqueRandom(progression_variables, animate_per); } if (m_particle_effects != null) foreach (var effect_setup in m_particle_effects) { if (effect_setup.m_position_offset.UniqueRandom) effect_setup.m_position_offset.CalculateUniqueRandom(progression_variables, animate_per, null); if (effect_setup.m_rotation_offset.UniqueRandom) effect_setup.m_rotation_offset.CalculateUniqueRandom(progression_variables, animate_per, null); if (effect_setup.m_delay.UniqueRandom) effect_setup.m_delay.CalculateUniqueRandom(progression_variables, animate_per); if (effect_setup.m_duration.UniqueRandom) effect_setup.m_duration.CalculateUniqueRandom(progression_variables, animate_per); } }
public void CalculateUniqueRandom(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, VertexColour[] offset_colours) { int progression_idx = GetProgressionIndex(progression_variables, animate_per); bool constant_offset = offset_colours != null && offset_colours.Length == 1; m_values[progression_idx] = m_is_offset_from_last ? offset_colours[constant_offset ? 0 : progression_idx].Clone() : new VertexColour(new Color(0,0,0,0)); m_values[progression_idx] = m_values[progression_idx].Add(m_from.Add(m_to.Sub(m_from).Multiply(UnityEngine.Random.value))); }
private void SetupMesh(LetterAction letter_action, LetterAction prev_action, float action_progress, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, float linear_progress, EffectManager effect_manager) { // construct current anchor offset vector m_anchor_offset = letter_action.AnchorOffsetStart; m_anchor_offset = new Vector3(m_anchor_offset.x * m_width, letter_action.m_letter_anchor_start == (int)TextfxTextAnchor.BaselineLeft || letter_action.m_letter_anchor_start == (int)TextfxTextAnchor.BaselineCenter || letter_action.m_letter_anchor_start == (int)TextfxTextAnchor.BaselineRight ? 0 // zero because letters are based around the baseline already. : (effect_manager.IsFontBaseLineSet ? (effect_manager.FontBaseLine + m_y_offset) - (m_anchor_offset.y * -m_height) : (m_anchor_offset.y * m_height)), // Legacy effect support when baseline isn't already set. 0); if (letter_action.m_letter_anchor_2_way) { m_anchor_offset = letter_action.AnchorOffsetEnd; m_anchor_offset = Vector3.Lerp(m_anchor_offset, new Vector3(m_anchor_offset.x * m_width, letter_action.m_letter_anchor_end == (int)TextfxTextAnchor.BaselineLeft || letter_action.m_letter_anchor_end == (int)TextfxTextAnchor.BaselineCenter || letter_action.m_letter_anchor_end == (int)TextfxTextAnchor.BaselineRight ? 0 // zero because letters are based around the baseline already. : (effect_manager.IsFontBaseLineSet ? (effect_manager.FontBaseLine + m_y_offset) - (m_anchor_offset.y * -m_height) : (m_anchor_offset.y * m_height)), // Legacy effect support when baseline isn't already set. 0), action_progress); } // Calculate Scale Vector from_vec = letter_action.m_start_scale.GetValue(progression_variables, animate_per); to_vec = letter_action.m_end_scale.GetValue(progression_variables, animate_per); if (letter_action.m_scale_axis_ease_data.m_override_default) ScaleLocal = new Vector3(EffectManager.FloatLerp(from_vec.x, to_vec.x, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_vec.y, to_vec.y, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_vec.z, to_vec.z, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_z_ease, linear_progress))); else ScaleLocal = EffectManager.Vector3Lerp(from_vec, to_vec, action_progress); // Calculate Rotation from_vec = letter_action.m_start_euler_rotation.GetValue(progression_variables, animate_per); to_vec = letter_action.m_end_euler_rotation.GetValue(progression_variables, animate_per); if (letter_action.m_rotation_axis_ease_data.m_override_default) RotationLocal = Quaternion.Euler(EffectManager.FloatLerp(from_vec.x, to_vec.x, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_vec.y, to_vec.y, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_vec.z, to_vec.z, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_z_ease, linear_progress))); else RotationLocal = Quaternion.Euler(EffectManager.Vector3Lerp(from_vec, to_vec, action_progress)); // Calculate Position if (letter_action.m_start_pos.Progression == ActionPositionVector3Progression.CURVE_OPTION_INDEX || (letter_action.m_offset_from_last && prev_action != null && prev_action.m_end_pos.Progression == ActionPositionVector3Progression.CURVE_OPTION_INDEX)) from_vec = new Vector3(-m_anchor_offset.x, m_base_offset.y, 0); else if (letter_action.m_start_pos.ForcePositionOverride) from_vec = new Vector3(-m_anchor_offset.x, 0, 0); else from_vec = BaseOffset; from_vec += letter_action.m_start_pos.GetValue(progression_variables, animate_per); if (letter_action.m_end_pos.Progression == ActionPositionVector3Progression.CURVE_OPTION_INDEX || (letter_action.m_end_pos.IsOffsetFromLast && letter_action.m_start_pos.Progression == ActionPositionVector3Progression.CURVE_OPTION_INDEX)) to_vec = new Vector3(-m_anchor_offset.x, m_base_offset.y, 0); else if (letter_action.m_end_pos.ForcePositionOverride) to_vec = new Vector3(-m_anchor_offset.x, 0, 0); else to_vec = BaseOffset; to_vec += letter_action.m_end_pos.GetValue(progression_variables, animate_per); if (letter_action.m_position_axis_ease_data.m_override_default) m_letter_position = new Vector3(EffectManager.FloatLerp(from_vec.x, to_vec.x, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_vec.y, to_vec.y, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_vec.z, to_vec.z, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_z_ease, linear_progress))); else m_letter_position = EffectManager.Vector3Lerp(from_vec, to_vec, action_progress); // Calculate letter center position CenterLocal = new Vector3(m_width / 2, m_height / 2, 0); CenterLocal -= m_anchor_offset; CenterLocal = Vector3.Scale(CenterLocal, ScaleLocal); CenterLocal = RotationLocal * CenterLocal; CenterLocal += m_anchor_offset + m_letter_position; if (mesh_verts == null || mesh_verts.Length == 0) mesh_verts = new Vector3[4]; for (var idx = 0; idx < 4; idx++) { mesh_verts[idx] = m_base_vertices[idx]; // normalise vert position to the anchor point before scaling and rotating. mesh_verts[idx] -= m_anchor_offset; // Scale verts mesh_verts[idx] = Vector3.Scale(mesh_verts[idx], ScaleLocal); // Rotate vert mesh_verts[idx] = RotationLocal * mesh_verts[idx]; mesh_verts[idx] += m_anchor_offset; // translate vert mesh_verts[idx] += m_letter_position; } m_mesh.vertices = mesh_verts; // Sort out letters colour if (letter_action.m_use_gradient_start) start_colour = letter_action.m_start_vertex_colour.GetValue(progression_variables, animate_per); else start_colour = new VertexColour(letter_action.m_start_colour.GetValue(progression_variables, animate_per)); if (letter_action.m_use_gradient_end) end_colour = letter_action.m_end_vertex_colour.GetValue(progression_variables, animate_per); else end_colour = new VertexColour(letter_action.m_end_colour.GetValue(progression_variables, animate_per)); if (!m_flipped) m_mesh.colors = new[] { Color.Lerp(start_colour.top_right, end_colour.top_right, action_progress), Color.Lerp(start_colour.top_left, end_colour.top_left, action_progress), Color.Lerp(start_colour.bottom_left, end_colour.bottom_left, action_progress), Color.Lerp(start_colour.bottom_right, end_colour.bottom_right, action_progress) }; else m_mesh.colors = new[] { Color.Lerp(start_colour.top_left, end_colour.top_left, action_progress), Color.Lerp(start_colour.bottom_left, end_colour.bottom_left, action_progress), Color.Lerp(start_colour.bottom_right, end_colour.bottom_right, action_progress), Color.Lerp(start_colour.top_right, end_colour.top_right, action_progress) }; }
void SetupMesh(LetterAction letter_action, LetterAction prev_action, float action_progress, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per, float linear_progress, EffectManager effect_manager) { // construct current anchor offset vector m_anchor_offset = letter_action.AnchorOffsetStart; m_anchor_offset = new Vector3(m_anchor_offset.x * m_width, letter_action.m_letter_anchor_start == (int)TextfxTextAnchor.BaselineLeft || letter_action.m_letter_anchor_start == (int)TextfxTextAnchor.BaselineCenter || letter_action.m_letter_anchor_start == (int)TextfxTextAnchor.BaselineRight ? 0 // zero because letters are based around the baseline already. : (effect_manager.IsFontBaseLineSet ? (effect_manager.FontBaseLine + m_y_offset) - (m_anchor_offset.y * -m_height) : (m_anchor_offset.y * m_height)), // Legacy effect support when baseline isn't already set. 0); if (letter_action.m_letter_anchor_2_way) { m_anchor_offset = letter_action.AnchorOffsetEnd; m_anchor_offset = Vector3.Lerp(m_anchor_offset, new Vector3( m_anchor_offset.x * m_width, letter_action.m_letter_anchor_end == (int)TextfxTextAnchor.BaselineLeft || letter_action.m_letter_anchor_end == (int)TextfxTextAnchor.BaselineCenter || letter_action.m_letter_anchor_end == (int)TextfxTextAnchor.BaselineRight ? 0 // zero because letters are based around the baseline already. : (effect_manager.IsFontBaseLineSet ? (effect_manager.FontBaseLine + m_y_offset) - (m_anchor_offset.y * -m_height) : (m_anchor_offset.y * m_height)), // Legacy effect support when baseline isn't already set. 0), action_progress); } // Calculate Scale Vector from_vec = letter_action.m_start_scale.GetValue(progression_variables, animate_per); to_vec = letter_action.m_end_scale.GetValue(progression_variables, animate_per); if (letter_action.m_scale_axis_ease_data.m_override_default) { m_letter_scale = new Vector3(EffectManager.FloatLerp(from_vec.x, to_vec.x, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_vec.y, to_vec.y, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_vec.z, to_vec.z, EasingManager.GetEaseProgress(letter_action.m_scale_axis_ease_data.m_z_ease, linear_progress))); } else { m_letter_scale = EffectManager.Vector3Lerp( from_vec, to_vec, action_progress); } // Calculate Rotation from_vec = letter_action.m_start_euler_rotation.GetValue(progression_variables, animate_per); to_vec = letter_action.m_end_euler_rotation.GetValue(progression_variables, animate_per); if (letter_action.m_rotation_axis_ease_data.m_override_default) { m_letter_rotation = Quaternion.Euler ( EffectManager.FloatLerp(from_vec.x, to_vec.x, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_vec.y, to_vec.y, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_vec.z, to_vec.z, EasingManager.GetEaseProgress(letter_action.m_rotation_axis_ease_data.m_z_ease, linear_progress)) ); } else { m_letter_rotation = Quaternion.Euler( EffectManager.Vector3Lerp( from_vec, to_vec, action_progress) ); } // Calculate Position if (letter_action.m_start_pos.Progression == ActionPositionVector3Progression.CURVE_OPTION_INDEX || (letter_action.m_offset_from_last && prev_action != null && prev_action.m_end_pos.Progression == ActionPositionVector3Progression.CURVE_OPTION_INDEX)) { from_vec = new Vector3(-m_anchor_offset.x, m_base_offset.y, 0); } else if (letter_action.m_start_pos.m_force_position_override) { from_vec = new Vector3(-m_anchor_offset.x, 0, 0); } else { from_vec = BaseOffset; } from_vec += letter_action.m_start_pos.GetValue(progression_variables, animate_per); if (letter_action.m_end_pos.Progression == ActionPositionVector3Progression.CURVE_OPTION_INDEX || (letter_action.m_end_pos.IsOffsetFromLast && letter_action.m_start_pos.Progression == ActionPositionVector3Progression.CURVE_OPTION_INDEX)) { to_vec = new Vector3(-m_anchor_offset.x, m_base_offset.y, 0); } else if (letter_action.m_end_pos.m_force_position_override) { to_vec = new Vector3(-m_anchor_offset.x, 0, 0); } else { to_vec = BaseOffset; } to_vec += letter_action.m_end_pos.GetValue(progression_variables, animate_per); if (letter_action.m_position_axis_ease_data.m_override_default) { m_letter_position = new Vector3(EffectManager.FloatLerp(from_vec.x, to_vec.x, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_x_ease, linear_progress)), EffectManager.FloatLerp(from_vec.y, to_vec.y, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_y_ease, linear_progress)), EffectManager.FloatLerp(from_vec.z, to_vec.z, EasingManager.GetEaseProgress(letter_action.m_position_axis_ease_data.m_z_ease, linear_progress))); } else { m_letter_position = EffectManager.Vector3Lerp( from_vec, to_vec, action_progress); } // Calculate letter center position m_letter_center = new Vector3(m_width / 2, m_height / 2, 0); m_letter_center -= m_anchor_offset; m_letter_center = Vector3.Scale(m_letter_center, m_letter_scale); m_letter_center = m_letter_rotation * m_letter_center; m_letter_center += m_anchor_offset + m_letter_position; if (mesh_verts == null || mesh_verts.Length == 0) { mesh_verts = new Vector3[4]; } for (int idx = 0; idx < 4; idx++) { mesh_verts[idx] = m_base_vertices[idx]; // normalise vert position to the anchor point before scaling and rotating. mesh_verts[idx] -= m_anchor_offset; // Scale verts mesh_verts[idx] = Vector3.Scale(mesh_verts[idx], m_letter_scale); // Rotate vert mesh_verts[idx] = m_letter_rotation * mesh_verts[idx]; mesh_verts[idx] += m_anchor_offset; // translate vert mesh_verts[idx] += m_letter_position; } m_mesh.vertices = mesh_verts; // Sort out letters colour if (letter_action.m_use_gradient_start) { start_colour = letter_action.m_start_vertex_colour.GetValue(progression_variables, animate_per); } else { start_colour = new VertexColour(letter_action.m_start_colour.GetValue(progression_variables, animate_per)); } if (letter_action.m_use_gradient_end) { end_colour = letter_action.m_end_vertex_colour.GetValue(progression_variables, animate_per); } else { end_colour = new VertexColour(letter_action.m_end_colour.GetValue(progression_variables, animate_per)); } if (!m_flipped) { m_mesh.colors = new Color[] { Color.Lerp(start_colour.top_right, end_colour.top_right, action_progress), Color.Lerp(start_colour.top_left, end_colour.top_left, action_progress), Color.Lerp(start_colour.bottom_left, end_colour.bottom_left, action_progress), Color.Lerp(start_colour.bottom_right, end_colour.bottom_right, action_progress) }; } else { m_mesh.colors = new Color[] { Color.Lerp(start_colour.top_left, end_colour.top_left, action_progress), Color.Lerp(start_colour.bottom_left, end_colour.bottom_left, action_progress), Color.Lerp(start_colour.bottom_right, end_colour.bottom_right, action_progress), Color.Lerp(start_colour.top_right, end_colour.top_right, action_progress) }; } }
public void PlayAudioClip(AudioEffectSetup effect_setup, AnimationProgressionVariables progression_vars, AnimatePerOptions animate_per) { var sound_played = false; AudioSource source = null; if (m_audio_sources != null) { foreach (var a_source in m_audio_sources) if (!a_source.isPlaying) { // audio source free to play a sound source = a_source; sound_played = true; break; } if (!sound_played) source = AddNewAudioChild(); } else source = AddNewAudioChild(); PlayClip(source, effect_setup.m_audio_clip, effect_setup.m_delay.GetValue(progression_vars, animate_per), effect_setup.m_offset_time.GetValue(progression_vars, animate_per), effect_setup.m_volume.GetValue(progression_vars, animate_per), effect_setup.m_pitch.GetValue(progression_vars, animate_per)); }
public void SoftResetStarts(LetterAction prev_action, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per) { if (m_use_gradient_start) { if (!m_offset_from_last && m_start_vertex_colour.UniqueRandom) m_start_vertex_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_vertex_colour.Values : null); } else if (!m_offset_from_last && m_start_colour.UniqueRandom) m_start_colour.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_colour.Values : null); if (!m_offset_from_last) { if (m_start_pos.UniqueRandom) m_start_pos.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_pos.Values : null); if (m_start_euler_rotation.UniqueRandom) m_start_euler_rotation.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_euler_rotation.Values : null); if (m_start_scale.UniqueRandom) m_start_scale.CalculateUniqueRandom(progression_variables, animate_per, prev_action != null ? prev_action.m_end_scale.Values : null); } }
public void PlayParticleEffect(Mesh character_mesh, bool m_letter_flipped, ParticleEffectSetup effect_setup, AnimationProgressionVariables progression_vars, AnimatePerOptions animate_per) { var effect_played = false; if (effect_setup.m_legacy_particle_effect != null) { if (m_particle_emitters == null) m_particle_emitters = new List<ParticleEmitter>(); foreach (var p_emitter in m_particle_emitters) if (!p_emitter.emit && p_emitter.particleCount == 0 && p_emitter.name.Equals(effect_setup.m_legacy_particle_effect.name + "(Clone)")) { m_effect_managers.Add(new ParticleEffectInstanceManager(this, character_mesh, m_letter_flipped, effect_setup, progression_vars, animate_per, p_emitter)); effect_played = true; break; } if (!effect_played) { var p_emitter = Instantiate(effect_setup.m_legacy_particle_effect) as ParticleEmitter; m_particle_emitters.Add(p_emitter); #if !UNITY_3_5 p_emitter.gameObject.SetActive(true); #else p_emitter.gameObject.SetActiveRecursively(true); #endif p_emitter.emit = false; p_emitter.transform.parent = transform; m_effect_managers.Add(new ParticleEffectInstanceManager(this, character_mesh, m_letter_flipped, effect_setup, progression_vars, animate_per, p_emitter)); } } else if (effect_setup.m_shuriken_particle_effect != null) { if (m_particle_systems == null) m_particle_systems = new List<ParticleSystem>(); foreach (var p_system in m_particle_systems) // check if particle system instance is currently not being used, and if it's the same type of effect that we're looking for. if (!p_system.isPlaying && p_system.particleCount == 0 && p_system.name.Equals(effect_setup.m_shuriken_particle_effect.name + "(Clone)")) { m_effect_managers.Add(new ParticleEffectInstanceManager(this, character_mesh, m_letter_flipped, effect_setup, progression_vars, animate_per, particle_system: p_system)); effect_played = true; break; } if (!effect_played) { // Make a new instance of the particleSystem effect and add to pool var p_system = Instantiate(effect_setup.m_shuriken_particle_effect) as ParticleSystem; m_particle_systems.Add(p_system); #if !UNITY_3_5 p_system.gameObject.SetActive(true); #else p_system.gameObject.SetActiveRecursively(true); #endif p_system.playOnAwake = false; p_system.Stop(); p_system.transform.parent = transform; m_effect_managers.Add(new ParticleEffectInstanceManager(this, character_mesh, m_letter_flipped, effect_setup, progression_vars, animate_per, particle_system: p_system)); } } }
public int GetProgressionIndex(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per_default) { return(progression_variables.GetValue(m_override_animate_per_option ? m_animate_per : animate_per_default)); }
public VertexColour GetValue(List<LetterAction> all_letter_actions, AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per_default, ActionColorProgression defaultAnimColourProg) { return GetValue(all_letter_actions, GetProgressionIndex(progression_variables,animate_per_default), defaultAnimColourProg); }
public VertexColour GetValue(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per_default) { return(GetValue(GetProgressionIndex(progression_variables, animate_per_default))); }
public int GetProgressionIndex(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per_default, bool consider_white_space = false) { return progression_variables.GetValue(m_override_animate_per_option ? m_animate_per : animate_per_default, consider_white_space); }
public float GetValue(AnimationProgressionVariables progression_variables, AnimatePerOptions animate_per_default, bool consider_white_space = false) { return GetValue(GetProgressionIndex(progression_variables,animate_per_default, consider_white_space)); }