• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_PARTICLE_PARTICLE_PATTERN_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_PARTICLE_PARTICLE_PATTERN_H
18 
19 #include "core/components_ng/pattern/pattern.h"
20 #include "core/components_ng/pattern/particle/particle_model.h"
21 
22 namespace OHOS::Ace::NG {
23 
24 class ACE_EXPORT ParticlePattern : public Pattern {
25     DECLARE_ACE_TYPE(ParticlePattern, Pattern);
26 
27 public:
ParticlePattern(uint32_t emitterCount)28     ParticlePattern(uint32_t emitterCount) : emitterCount_(emitterCount) {};
29     ~ParticlePattern() override = default;
30 
31     void OnVisibleChange(bool isVisible) override;
32     void OnAttachToMainTree() override;
33     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override;
34     void UpdateDisturbance(const std::vector<ParticleDisturbance>& disturbance);
35     void updateEmitterPosition(std::vector<EmitterProperty>& property);
36 
HaveUnVisibleParent()37     bool HaveUnVisibleParent() const
38     {
39         return haveUnVisibleParent_;
40     }
41 
SetHaveUnVisibleParent(bool haveUnVisibleParent)42     void SetHaveUnVisibleParent(bool haveUnVisibleParent)
43     {
44         haveUnVisibleParent_ = haveUnVisibleParent;
45     }
46 
GetDisturbance()47     const std::vector<ParticleDisturbance>& GetDisturbance() const
48     {
49         return disturbance_;
50     }
51 
SetDisturbance(std::vector<ParticleDisturbance> disturbance)52     void SetDisturbance(std::vector<ParticleDisturbance> disturbance)
53     {
54         disturbance_ = disturbance;
55     }
56 
GetEmitterProperty()57     const std::vector<EmitterProperty>& GetEmitterProperty() const
58     {
59         return emitterProperty_;
60     }
61 
SetEmitterProperty(std::vector<EmitterProperty> emitterProperty)62     void SetEmitterProperty(std::vector<EmitterProperty> emitterProperty)
63     {
64         emitterProperty_ = emitterProperty;
65     }
66 
GetEmitterCount()67     uint32_t GetEmitterCount() const
68     {
69         return emitterCount_;
70     }
71 
72 private:
73     void GetEmitterJson(const std::unique_ptr<JsonValue>& objectParticlesJson, const ParticleOption& item) const;
74     void GetColorJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
75         const ParticleOption& particleOption) const;
76     void GetOpacityJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
77         const ParticleOption& particleOption) const;
78     void GetScaleJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
79         const ParticleOption& particleOption) const;
80     void GetVelocityJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
81         const ParticleOption& particleOption) const;
82     void GetAccelerationJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
83         const ParticleOption& particleOption) const;
84     void GetSpinJson(const std::unique_ptr<JsonValue>& objectParticlesJson, const ParticleOption& particleOption) const;
85 
86     std::unique_ptr<JsonValue> ParseEmitterParticleJson(const ParticleOption& particleOption) const;
87     std::unique_ptr<JsonValue> ParseColorUpdater(ParticleColorPropertyUpdater& updater) const;
88     std::unique_ptr<JsonValue> ParseFloatObjectJson(const ParticleFloatPropertyOption& updaterObject) const;
89     void ParseParticleObject(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
90 
91     bool haveUnVisibleParent_ = false;
92     std::vector<ParticleDisturbance> disturbance_;
93     std::vector<EmitterProperty> emitterProperty_;
94     uint32_t emitterCount_ = 0;
95 };
96 } // namespace OHOS::Ace
97 
98 #endif