• 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     std::unique_ptr<JsonValue> ToEmitterPropertyJsonValue(const EmitterProperty& emitterProperty) const;
35     void UpdateDisturbance(const std::vector<ParticleDisturbance>& disturbance);
36     void updateEmitterPosition(std::vector<EmitterProperty>& property);
37 
HaveUnVisibleParent()38     bool HaveUnVisibleParent() const
39     {
40         return haveUnVisibleParent_;
41     }
42 
SetHaveUnVisibleParent(bool haveUnVisibleParent)43     void SetHaveUnVisibleParent(bool haveUnVisibleParent)
44     {
45         haveUnVisibleParent_ = haveUnVisibleParent;
46     }
47 
GetDisturbance()48     const std::vector<ParticleDisturbance>& GetDisturbance() const
49     {
50         return disturbance_;
51     }
52 
SetDisturbance(std::vector<ParticleDisturbance> disturbance)53     void SetDisturbance(std::vector<ParticleDisturbance> disturbance)
54     {
55         disturbance_ = disturbance;
56     }
57 
GetEmitterProperty()58     const std::vector<EmitterProperty>& GetEmitterProperty() const
59     {
60         return emitterProperty_;
61     }
62 
SetEmitterProperty(std::vector<EmitterProperty> emitterProperty)63     void SetEmitterProperty(std::vector<EmitterProperty> emitterProperty)
64     {
65         emitterProperty_ = emitterProperty;
66     }
67 
GetEmitterCount()68     uint32_t GetEmitterCount() const
69     {
70         return emitterCount_;
71     }
72 
73 private:
74     void GetEmitterJson(const std::unique_ptr<JsonValue>& objectParticlesJson, const ParticleOption& item) const;
75     void GetColorJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
76         const ParticleOption& particleOption) const;
77     void GetOpacityJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
78         const ParticleOption& particleOption) const;
79     void GetScaleJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
80         const ParticleOption& particleOption) const;
81     void GetVelocityJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
82         const ParticleOption& particleOption) const;
83     void GetAccelerationJson(const std::unique_ptr<JsonValue>& objectParticlesJson,
84         const ParticleOption& particleOption) const;
85     void GetSpinJson(const std::unique_ptr<JsonValue>& objectParticlesJson, const ParticleOption& particleOption) const;
86 
87     std::unique_ptr<JsonValue> ParseEmitterParticleJson(const ParticleOption& particleOption) const;
88     std::unique_ptr<JsonValue> ParseAnnulusRegionJson(const ParticleAnnulusRegion& annulusRegion) const;
89     std::unique_ptr<JsonValue> ParseColorUpdater(ParticleColorPropertyUpdater& updater) const;
90     std::unique_ptr<JsonValue> ParseFloatObjectJson(const ParticleFloatPropertyOption& updaterObject) const;
91     void ParseParticleObject(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
92 
93     bool haveUnVisibleParent_ = false;
94     std::vector<ParticleDisturbance> disturbance_;
95     std::vector<EmitterProperty> emitterProperty_;
96     uint32_t emitterCount_ = 0;
97 };
98 } // namespace OHOS::Ace
99 
100 #endif