local opacity_coefficient = 0.5
function WaterEffectComposition()
    createCompositionComp1 = function()
        
            local compositionComp1 = CreateCompositionSequence();
            local compositionDuration = 4.04;
            compositionComp1:SetDuration(compositionDuration);
        
        
            -- Layer Layer_1
            local element = CreateCompositionElement("data/Texture/Scenes/Common/WaterEffects/dust_caustic.png");
            element:SetName("Layer_1");
            compositionComp1:AddElement(element);
            element:SetHotSpot(341.5, 327);
            element:SetParentElement(compositionComp1);
            element:SetXY(360.5, 265);
        
            element:SetScaleX(1);
            element:SetScaleY(1);
            element:SetAngle(0);
        
            effector = element:GetEffector();
            effector:SetLifeTime(2.04, 4.06);
        
            effector:SetKey(_TRACK_O, 2.04, 0);
            effector:SetKey(_TRACK_O, 3.04, 1 * opacity_coefficient);
            effector:SetKey(_TRACK_O, 4.04, 0);
        
            effector:Play();
        
        
            -- Layer Layer_2
            local element = CreateCompositionElement("data/Texture/Scenes/Common/WaterEffects/dust_caustic.png");
            element:SetName("Layer_2");
            compositionComp1:AddElement(element);
            element:SetHotSpot(341.5, 327);
            element:SetParentElement(compositionComp1);
            element:SetXY(341.5, 327);
        
            element:SetScaleX(1);
            element:SetScaleY(1);
            element:SetAngle(0);
        
            effector = element:GetEffector();
            effector:SetLifeTime(2.04, 4.06);
        
            effector:SetKey(_TRACK_O, 2.04, 1 * opacity_coefficient);
            effector:SetKey(_TRACK_O, 3.04, 0);
            effector:SetKey(_TRACK_O, 4.04, 1 * opacity_coefficient);
        
            effector:Play();
        
        
            -- Layer Layer_3
            local element = CreateCompositionElement("data/Texture/Scenes/Common/WaterEffects/dust_caustic.png");
            element:SetName("Layer_3");
            compositionComp1:AddElement(element);
            element:SetHotSpot(341.5, 327);
            element:SetParentElement(compositionComp1);
            element:SetXY(360.5, 265);
        
            element:SetScaleX(1);
            element:SetScaleY(1);
            element:SetAngle(0);
        
            effector = element:GetEffector();
            effector:SetLifeTime(0, 2.04);
        
            effector:SetKey(_TRACK_O, 0, 0);
            effector:SetKey(_TRACK_O, 1, 1 * opacity_coefficient);
            effector:SetKey(_TRACK_O, 2, 0);
        
            effector:Play();
        
        
            -- Layer Layer_4
            local element = CreateCompositionElement("data/Texture/Scenes/Common/WaterEffects/dust_caustic.png");
            element:SetName("Layer_4");
            compositionComp1:AddElement(element);
            element:SetHotSpot(341.5, 327);
            element:SetParentElement(compositionComp1);
            element:SetXY(341.5, 327);
        
            element:SetScaleX(1);
            element:SetScaleY(1);
            element:SetAngle(0);
        
            effector = element:GetEffector();
            effector:SetLifeTime(0, 2.04);
        
            effector:SetKey(_TRACK_O, 0, 1 * opacity_coefficient);
            effector:SetKey(_TRACK_O, 1, 0);
            effector:SetKey(_TRACK_O, 2, 1 * opacity_coefficient);
        
            effector:Play();
        
            compositionComp1:Play();
        
            return compositionComp1;
        end
        
    createCompositionPreComp1 = function()

        local compositionPreComp1 = CreateCompositionSequence();
        local compositionDuration = 4.04;
        compositionPreComp1:SetDuration(compositionDuration);


        -- Layer Layer_1
        local element = createCompositionComp1();
        element:SetName("Layer_1");
        compositionPreComp1:AddElement(element);
        element:SetHotSpot(341.5, 327);
        element:SetParentElement(compositionPreComp1);
        element:SetXY(473.5, 1222.5);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetOpacity(0.63);

        effector = element:GetEffector();
        effector:SetLifeTime(0, 4.04);

        effector:SetKey(_TRACK_A, 0, 0);
        effector:SetKey(_TRACK_A, 0.2, 0.00477678623843);
        effector:SetKey(_TRACK_A, 0.4, 0.01774235168267);
        effector:SetKey(_TRACK_A, 0.6, 0.0368494985646);
        effector:SetKey(_TRACK_A, 0.8, 0.06005104059622);
        effector:SetKey(_TRACK_A, 1, 0.08529977870143);
        effector:SetKey(_TRACK_A, 1.2, 0.11054851392636);
        effector:SetKey(_TRACK_A, 1.4, 0.13375003903652);
        effector:SetKey(_TRACK_A, 1.6, 0.15285719494691);
        effector:SetKey(_TRACK_A, 1.8, 0.16582275704397);
        effector:SetKey(_TRACK_A, 2, 0.17059954999089);
        effector:SetKey(_TRACK_A, 2.2, 0.1660018122036);
        effector:SetKey(_TRACK_A, 2.4, 0.15349470827963);
        effector:SetKey(_TRACK_A, 2.6, 0.13500733058778);
        effector:SetKey(_TRACK_A, 2.8, 0.11246881264843);
        effector:SetKey(_TRACK_A, 3, 0.08780826819682);
        effector:SetKey(_TRACK_A, 3.2, 0.06295481377423);
        effector:SetKey(_TRACK_A, 3.4, 0.0398375535411);
        effector:SetKey(_TRACK_A, 3.6, 0.02038561943358);
        effector:SetKey(_TRACK_A, 3.8, 0.00652812616274);
        effector:SetKey(_TRACK_A, 4, 0.00019420422417);
        effector:SetKey(_TRACK_A, 4.04, 0);

        effector:Play();


        -- Layer Layer_2
        local element = createCompositionComp1();
        element:SetName("Layer_2");
        compositionPreComp1:AddElement(element);
        element:SetHotSpot(341.5, 327);
        element:SetParentElement(compositionPreComp1);
        element:SetXY(413.5, 440.5);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetOpacity(1);

        effector = element:GetEffector();
        effector:SetLifeTime(0, 4.04);

        effector:SetKey(_TRACK_A, 0, 0);
        effector:SetKey(_TRACK_A, 0.2, 0.00477678623843);
        effector:SetKey(_TRACK_A, 0.4, 0.01774235168267);
        effector:SetKey(_TRACK_A, 0.6, 0.0368494985646);
        effector:SetKey(_TRACK_A, 0.8, 0.06005104059622);
        effector:SetKey(_TRACK_A, 1, 0.08529977870143);
        effector:SetKey(_TRACK_A, 1.2, 0.11054851392636);
        effector:SetKey(_TRACK_A, 1.4, 0.13375003903652);
        effector:SetKey(_TRACK_A, 1.6, 0.15285719494691);
        effector:SetKey(_TRACK_A, 1.8, 0.16582275704397);
        effector:SetKey(_TRACK_A, 2, 0.17059954999089);
        effector:SetKey(_TRACK_A, 2.2, 0.1660018122036);
        effector:SetKey(_TRACK_A, 2.4, 0.15349470827963);
        effector:SetKey(_TRACK_A, 2.6, 0.13500733058778);
        effector:SetKey(_TRACK_A, 2.8, 0.11246881264843);
        effector:SetKey(_TRACK_A, 3, 0.08780826819682);
        effector:SetKey(_TRACK_A, 3.2, 0.06295481377423);
        effector:SetKey(_TRACK_A, 3.4, 0.0398375535411);
        effector:SetKey(_TRACK_A, 3.6, 0.02038561943358);
        effector:SetKey(_TRACK_A, 3.8, 0.00652812616274);
        effector:SetKey(_TRACK_A, 4, 0.00019420422417);
        effector:SetKey(_TRACK_A, 4.04, 0);

        effector:Play();


        -- Layer Layer_3
        local element = CreateCompositionElement("data/Texture/Scenes/Common/WaterEffects/dust.png");
        element:SetName("Layer_3");
        compositionPreComp1:AddElement(element);
        element:SetHotSpot(341.5, 327);
        element:SetParentElement(compositionPreComp1);
        element:SetXY(503.5, 967.5);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetAngle(0);
        element:SetOpacity(1);

        effector = element:GetEffector();
        effector:SetLifeTime(0, 4.04);


        effector:Play();


        -- Layer Layer_4
        local element = CreateCompositionElement("data/Texture/Scenes/Common/WaterEffects/dust.png");
        element:SetName("Layer_4");
        compositionPreComp1:AddElement(element);
        element:SetHotSpot(341.5, 327);
        element:SetParentElement(compositionPreComp1);
        element:SetXY(500.5, 643.5);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetAngle(0);
        element:SetOpacity(1);

        effector = element:GetEffector();
        effector:SetLifeTime(0, 4.04);


        effector:Play();


        -- Layer Layer_5
        local element = CreateCompositionElement("data/Texture/Scenes/Common/WaterEffects/dust.png");
        element:SetName("Layer_5");
        compositionPreComp1:AddElement(element);
        element:SetHotSpot(341.5, 327);
        element:SetParentElement(compositionPreComp1);
        element:SetXY(463.5, 825.5);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetAngle(0);
        element:SetOpacity(1);

        effector = element:GetEffector();
        effector:SetLifeTime(0, 4.04);


        effector:Play();


        -- Layer Layer_6
        local element = CreateCompositionElement("data/Texture/Scenes/Common/WaterEffects/dust.png");
        element:SetName("Layer_6");
        compositionPreComp1:AddElement(element);
        element:SetHotSpot(341.5, 327);
        element:SetParentElement(compositionPreComp1);
        element:SetXY(471.5, 448.5);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetAngle(0);
        element:SetOpacity(1);

        effector = element:GetEffector();
        effector:SetLifeTime(0, 4.04);


        effector:Play();

        compositionPreComp1:Play();

        return compositionPreComp1;
    end

    createCompositionPreComp2 = function()

        local compositionPreComp2 = CreateCompositionSequence();
        local compositionDuration = 4.04;
        compositionPreComp2:SetDuration(compositionDuration);
        compositionPreComp2:SetCyclic(true);


        -- Layer Layer_3
        local element = createCompositionPreComp1();
        element:SetName("Layer_3");
        compositionPreComp2:AddElement(element);
        element:SetHotSpot(479.5, 730.5);
        element:SetParentElement(compositionPreComp2);
        element:SetXY(542, 403);

        element:SetAngle(0);
        element:SetOpacity(1);

        effector = element:GetEffector();
        effector:SetLifeTime(0, 4.04);

        effector:SetKey(_TRACK_SX, 0, 0.8);
        effector:SetKey(_TRACK_SY, 0, 0.8);
        effector:SetKey(_TRACK_SX, 0.2, 0.80279999940711);
        effector:SetKey(_TRACK_SY, 0.2, 0.80280000261949);
        effector:SetKey(_TRACK_SX, 0.4, 0.81040000793161);
        effector:SetKey(_TRACK_SY, 0.4, 0.81039999159597);
        effector:SetKey(_TRACK_SX, 0.6, 0.82160000712926);
        effector:SetKey(_TRACK_SY, 0.6, 0.82159999960462);
        effector:SetKey(_TRACK_SX, 0.8, 0.8352000093566);
        effector:SetKey(_TRACK_SY, 0.8, 0.83520000822436);
        effector:SetKey(_TRACK_SX, 1, 0.84999999330339);
        effector:SetKey(_TRACK_SY, 1, 0.84999999706418);
        effector:SetKey(_TRACK_SX, 1.2, 0.86479999902277);
        effector:SetKey(_TRACK_SY, 1.2, 0.86480000632005);
        effector:SetKey(_TRACK_SX, 1.4, 0.87840000401079);
        effector:SetKey(_TRACK_SY, 1.4, 0.87839999073554);
        effector:SetKey(_TRACK_SX, 1.6, 0.88959999125551);
        effector:SetKey(_TRACK_SY, 1.6, 0.88959999609239);
        effector:SetKey(_TRACK_SX, 1.8, 0.89720000975438);
        effector:SetKey(_TRACK_SY, 1.8, 0.89720000856477);
        effector:SetKey(_TRACK_SX, 2, 0.90000000154118);
        effector:SetKey(_TRACK_SY, 2, 0.90000000942045);
        effector:SetKey(_TRACK_SX, 2.2, 0.89720000370822);
        effector:SetKey(_TRACK_SY, 2.2, 0.89720000939779);
        effector:SetKey(_TRACK_SX, 2.4, 0.88959999296502);
        effector:SetKey(_TRACK_SY, 2.4, 0.88959999375789);
        effector:SetKey(_TRACK_SX, 2.6, 0.87840000504945);
        effector:SetKey(_TRACK_SY, 2.6, 0.8784000005495);
        effector:SetKey(_TRACK_SX, 2.8, 0.86480000273636);
        effector:SetKey(_TRACK_SY, 2.8, 0.86479999033578);
        effector:SetKey(_TRACK_SX, 3, 0.84999999399603);
        effector:SetKey(_TRACK_SY, 3, 0.850000003035);
        effector:SetKey(_TRACK_SX, 3.2, 0.83519999288586);
        effector:SetKey(_TRACK_SY, 3.2, 0.83520000760524);
        effector:SetKey(_TRACK_SX, 3.4, 0.82160000166504);
        effector:SetKey(_TRACK_SY, 3.4, 0.8216000093496);
        effector:SetKey(_TRACK_SX, 3.6, 0.81040000043918);
        effector:SetKey(_TRACK_SY, 3.6, 0.81040000328778);
        effector:SetKey(_TRACK_SX, 3.8, 0.80280000550914);
        effector:SetKey(_TRACK_SY, 3.8, 0.80280000845204);
        effector:SetKey(_TRACK_SX, 4, 0.8);
        effector:SetKey(_TRACK_SY, 4, 0.8);

        effector:Play();

        --compositionPreComp2:Play();

        return compositionPreComp2;
    end

    createCompositionVusey_GaleriVray = function()

        local compositionVusey_GaleriVray = CreateCompositionSequence();
        local compositionDuration = 4.04;
        --compositionVusey_GaleriVray:SetDuration(compositionDuration);


        -- Layer Layer_1
        local element = createCompositionPreComp2();
        element:SetName("Layer_1");
        compositionVusey_GaleriVray:AddElement(element);
        element:SetHotSpot(512, 384);
        element:SetParentElement(compositionVusey_GaleriVray);
        element:SetXY(58, 378);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetAngle(0);
        element:SetOpacity(1);

        effector = element:GetEffector();
        --effector:SetLifeTime(-1.84, 10.16);


        effector:Play();
        element:Play();

        -- Layer Layer_2
        local element = createCompositionPreComp2();
        element:SetName("Layer_2");
        compositionVusey_GaleriVray:AddElement(element);
        element:SetHotSpot(512, 384);
        element:SetParentElement(compositionVusey_GaleriVray);
        element:SetXY(348, 378);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetAngle(0);
        element:SetOpacity(1);

        effector = element:GetEffector();
        --effector:SetLifeTime(-2.48, 9.52);


        effector:Play();
        element:PlayAt(3);
        
        -- Layer Layer_3
        local element = createCompositionPreComp2();
        element:SetName("Layer_3");
        compositionVusey_GaleriVray:AddElement(element);
        element:SetHotSpot(512, 384);
        element:SetParentElement(compositionVusey_GaleriVray);
        element:SetXY(599, 384);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetAngle(0);
        element:SetOpacity(1);

        effector = element:GetEffector();
        --effector:SetLifeTime(-3.2, 8.8);


        effector:Play();
        element:PlayAt(2);
        

        -- Layer Layer_4
        local element = createCompositionPreComp2();
        element:SetName("Layer_4");
        compositionVusey_GaleriVray:AddElement(element);
        element:SetHotSpot(512, 384);
        element:SetParentElement(compositionVusey_GaleriVray);
        element:SetXY(878, 384);

        element:SetScaleX(1);
        element:SetScaleY(1);
        element:SetAngle(0);
        element:SetOpacity(1);

        effector = element:GetEffector();
        --effector:SetLifeTime(-3.96, 8.04);


        effector:Play();
        element:PlayAt(1);
        

        compositionVusey_GaleriVray:Play();

        return compositionVusey_GaleriVray;
    end
    
    local result = createCompositionVusey_GaleriVray();
    result:SetDestroysOnEnd(false);
    --result:SetCyclic(true);
    return result;
end