blob: 9a10d9c727cb84ddd732b7213f6ec140140500f2 [file] [log] [blame]
Brian Osman7c979f52019-02-12 13:27:51 -05001/*
2* Copyright 2019 Google LLC
3*
4* Use of this source code is governed by a BSD-style license that can be
5* found in the LICENSE file.
6*/
7
8#ifndef SkParticleAffector_DEFINED
9#define SkParticleAffector_DEFINED
10
11#include "SkReflected.h"
12
13#include "SkPoint.h"
14
Brian Osman125daa42019-02-20 12:25:20 -050015struct SkColorCurve;
Brian Osman8b6283f2019-02-14 16:55:21 -050016struct SkCurve;
Brian Osman125daa42019-02-20 12:25:20 -050017struct SkParticleState;
Brian Osman7c979f52019-02-12 13:27:51 -050018struct SkParticleUpdateParams;
19
20class SkParticleAffector : public SkReflected {
21public:
22 REFLECTED_ABSTRACT(SkParticleAffector, SkReflected)
23
Brian Osman1b20cd82019-02-25 14:15:02 -050024 void apply(SkParticleUpdateParams& params, SkParticleState& ps);
25 void visitFields(SkFieldVisitor* v) override;
Brian Osman7c979f52019-02-12 13:27:51 -050026
27 static void RegisterAffectorTypes();
28
Brian Osman8b6283f2019-02-14 16:55:21 -050029 static sk_sp<SkParticleAffector> MakeLinearVelocity(const SkCurve& angle,
30 const SkCurve& strength,
Brian Osmand5c57fe2019-02-22 11:48:18 -050031 bool force,
32 bool local);
Brian Osman7c979f52019-02-12 13:27:51 -050033 static sk_sp<SkParticleAffector> MakePointForce(SkPoint point, SkScalar constant,
34 SkScalar invSquare);
35 static sk_sp<SkParticleAffector> MakeOrientAlongVelocity();
Brian Osman8b6283f2019-02-14 16:55:21 -050036
Brian Osman125daa42019-02-20 12:25:20 -050037 static sk_sp<SkParticleAffector> MakeSize(const SkCurve& curve);
38 static sk_sp<SkParticleAffector> MakeFrame(const SkCurve& curve);
39 static sk_sp<SkParticleAffector> MakeColor(const SkColorCurve& curve);
Brian Osman1b20cd82019-02-25 14:15:02 -050040
41private:
42 virtual void onApply(SkParticleUpdateParams& params, SkParticleState& ps) = 0;
43
44 bool fEnabled = true;
Brian Osman7c979f52019-02-12 13:27:51 -050045};
46
47#endif // SkParticleAffector_DEFINED