Coverage Report

Created: 2026-07-16 06:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ogre/OgreMain/include/OgreParticleAffector.h
Line
Count
Source
1
/*
2
-----------------------------------------------------------------------------
3
This source file is part of OGRE
4
(Object-oriented Graphics Rendering Engine)
5
For the latest info, see http://www.ogre3d.org/
6
7
Copyright (c) 2000-2014 Torus Knot Software Ltd
8
9
Permission is hereby granted, free of charge, to any person obtaining a copy
10
of this software and associated documentation files (the "Software"), to deal
11
in the Software without restriction, including without limitation the rights
12
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
copies of the Software, and to permit persons to whom the Software is
14
furnished to do so, subject to the following conditions:
15
16
The above copyright notice and this permission notice shall be included in
17
all copies or substantial portions of the Software.
18
19
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25
THE SOFTWARE.
26
-----------------------------------------------------------------------------
27
*/
28
#ifndef __ParticleAffector_H__
29
#define __ParticleAffector_H__
30
31
#include "OgrePrerequisites.h"
32
#include "OgreString.h"
33
#include "OgreStringInterface.h"
34
#include "OgreHeaderPrefix.h"
35
36
37
namespace Ogre {
38
39
    /** \addtogroup Core
40
    *  @{
41
    */
42
    /** \addtogroup Effects
43
    *  @{
44
    */
45
/** Abstract class defining the interface to be implemented by particle affectors.
46
47
    Particle affectors modify particles in a particle system over their lifetime. They can be
48
    grouped into types, e.g. 'vector force' affectors, 'fader' affectors etc; each type will
49
    modify particles in a different way, using different parameters.
50
    @par
51
        Because there are so many types of affectors you could use, OGRE chooses not to dictate
52
        the available types. It comes with some in-built, but allows plugins or applications to extend the affector types available.
53
        This is done by subclassing ParticleAffector to have the appropriate emission behaviour you want,
54
        and also creating a subclass of ParticleAffectorFactory which is responsible for creating instances 
55
        of your new affector type. You register this factory with the ParticleSystemManager using
56
        addAffectorFactory, and from then on affectors of this type can be created either from code or through
57
        text particle scripts by naming the type.
58
    @par
59
        This same approach is used for ParticleEmitters (which are the source of particles in a system).
60
        This means that OGRE is particularly flexible when it comes to creating particle system effects,
61
        with literally infinite combinations of affector and affector types, and parameters within those
62
        types.
63
    */
64
    class _OgreExport ParticleAffector : public StringInterface, public FXAlloc
65
    {
66
    protected:
67
        /// Name of the type of affector, MUST be initialised by subclasses
68
        String mType;
69
70
        /** Internal method for setting up the basic parameter definitions for a subclass. 
71
72
            Because StringInterface holds a dictionary of parameters per class, subclasses need to
73
            call this to ask the base class to add it's parameters to their dictionary as well.
74
            Can't do this in the constructor because that runs in a non-virtual context.
75
        @par
76
            The subclass must have called it's own createParamDictionary before calling this method.
77
        */
78
0
        void addBaseParameters(void) { /* actually do nothing - for future possible use */ }
79
80
        ParticleSystem* mParent;
81
    public:
82
0
        ParticleAffector(ParticleSystem* parent): mParent(parent) {}
83
84
        /** Virtual destructor essential. */
85
        virtual ~ParticleAffector();
86
87
        /** Method called to allow the affector to initialize all newly created particles in the system.
88
89
            This is where the affector gets the chance to initialize it's effects to the particles of a system.
90
            The affector is expected to initialize some or all of the particles in the system
91
            passed to it, depending on the affector's approach.
92
        @param
93
            pParticle Pointer to a Particle to initialize.
94
        */
95
        virtual void _initParticle(Particle* pParticle)
96
0
                {
97
                    /* by default do nothing */
98
0
                    (void)pParticle;
99
0
                }
100
101
        /** Method called to allow the affector to 'do it's stuff' on all active particles in the system.
102
103
            This is where the affector gets the chance to apply it's effects to the particles of a system.
104
            The affector is expected to apply it's effect to some or all of the particles in the system
105
            passed to it, depending on the affector's approach.
106
        @param
107
            pSystem Pointer to a ParticleSystem to affect.
108
        @param
109
            timeElapsed The number of seconds which have elapsed since the last call.
110
        */
111
        virtual void _affectParticles(ParticleSystem* pSystem, Real timeElapsed) = 0;
112
113
        /** Returns the name of the type of affector. 
114
115
            This property is useful for determining the type of affector procedurally so another
116
            can be created.
117
        */
118
0
        const String &getType(void) const { return mType; }
119
120
    };
121
    /** @} */
122
    /** @} */
123
124
}
125
126
#include "OgreHeaderSuffix.h"
127
128
#endif
129