/* * Copyright 2019 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkParticleAffector_DEFINED #define SkParticleAffector_DEFINED #include "SkReflected.h" #include "SkParticleData.h" #include "SkPoint.h" struct SkColorCurve; struct SkCurve; class SkParticleAffector : public SkReflected { public: REFLECTED_ABSTRACT(SkParticleAffector, SkReflected) void apply(const SkParticleUpdateParams& params, SkParticleState ps[], int count); void visitFields(SkFieldVisitor* v) override; static void RegisterAffectorTypes(); // Affectors that can set the linear or angular velocity. Both have a 'force' option to apply // the resulting value as a force, rather than directly setting the velocity. static sk_sp MakeLinearVelocity(const SkCurve& angle, const SkCurve& strength, bool force, SkParticleFrame frame); static sk_sp MakeAngularVelocity(const SkCurve& strength, bool force); // Set the orientation of a particle, relative to the world, local, or velocity frame. static sk_sp MakeOrientation(const SkCurve& angle, SkParticleFrame frame); static sk_sp MakePointForce(SkPoint point, SkScalar constant, SkScalar invSquare); static sk_sp MakeSize(const SkCurve& curve); static sk_sp MakeFrame(const SkCurve& curve); static sk_sp MakeColor(const SkColorCurve& curve); private: virtual void onApply(const SkParticleUpdateParams& params, SkParticleState ps[], int count) = 0; bool fEnabled = true; }; #endif // SkParticleAffector_DEFINED