public JSONValue ExportData()
        {
            JSONObject json_data = new JSONObject();

            ExportBaseData(ref json_data);

            json_data["m_effect_type"] = (int)m_effect_type;
            if (m_effect_type == PARTICLE_EFFECT_TYPE.LEGACY)
            {
                json_data["m_legacy_particle_effect"] = m_legacy_particle_effect.ToPath();
            }
            else
            {
                json_data["m_shuriken_particle_effect"] = m_shuriken_particle_effect.ToPath();
            }
            json_data["m_duration"]                  = m_duration.ExportData();
            json_data["m_follow_mesh"]               = m_follow_mesh;
            json_data["m_position_offset"]           = m_position_offset.ExportData();
            json_data["m_rotation_offset"]           = m_rotation_offset.ExportData();
            json_data["m_rotate_relative_to_letter"] = m_rotate_relative_to_letter;

            return(new JSONValue(json_data));
        }
        public JSONValue ExportData()
        {
            JSONObject json_data = new JSONObject();

            json_data["m_action_type"]             = (int)m_action_type;
            json_data["m_ease_type"]               = (int)m_ease_type;
            json_data["m_use_gradient_start"]      = m_use_gradient_start;
            json_data["m_use_gradient_end"]        = m_use_gradient_end;
            json_data["m_force_same_start_time"]   = m_force_same_start_time;
            json_data["m_letter_anchor_start"]     = m_letter_anchor_start;
            json_data["m_letter_anchor_end"]       = m_letter_anchor_end;
            json_data["m_letter_anchor_2_way"]     = m_letter_anchor_2_way;
            json_data["m_offset_from_last"]        = m_offset_from_last;
            json_data["m_position_axis_ease_data"] = m_position_axis_ease_data.ExportData();
            json_data["m_rotation_axis_ease_data"] = m_rotation_axis_ease_data.ExportData();
            json_data["m_scale_axis_ease_data"]    = m_scale_axis_ease_data.ExportData();

            if (m_use_gradient_start)
            {
                json_data["m_start_vertex_colour"] = m_start_vertex_colour.ExportData();
            }
            else
            {
                json_data["m_start_colour"] = m_start_colour.ExportData();
            }
            json_data["m_start_euler_rotation"] = m_start_euler_rotation.ExportData();
            json_data["m_start_pos"]            = m_start_pos.ExportData();
            json_data["m_start_scale"]          = m_start_scale.ExportData();

            if (m_use_gradient_end)
            {
                json_data["m_end_vertex_colour"] = m_end_vertex_colour.ExportData();
            }
            else
            {
                json_data["m_end_colour"] = m_end_colour.ExportData();
            }
            json_data["m_end_euler_rotation"] = m_end_euler_rotation.ExportData();
            json_data["m_end_pos"]            = m_end_pos.ExportData();
            json_data["m_end_scale"]          = m_end_scale.ExportData();

            json_data["m_delay_progression"]    = m_delay_progression.ExportData();
            json_data["m_duration_progression"] = m_duration_progression.ExportData();


            JSONArray audio_effects_data = new JSONArray();

            foreach (AudioEffectSetup effect_setup in m_audio_effects)
            {
                if (effect_setup.m_audio_clip == null)
                {
                    continue;
                }

                audio_effects_data.Add(effect_setup.ExportData());
            }
            json_data["AUDIO_EFFECTS_DATA"] = audio_effects_data;

            JSONArray particle_effects_data = new JSONArray();

            foreach (ParticleEffectSetup effect_setup in m_particle_effects)
            {
                if (effect_setup.m_legacy_particle_effect == null && effect_setup.m_shuriken_particle_effect == null)
                {
                    continue;
                }

                particle_effects_data.Add(effect_setup.ExportData());
            }
            json_data["PARTICLE_EFFECTS_DATA"] = particle_effects_data;

            return(new JSONValue(json_data));
        }