Browse Source

Refactor ParticleEmitter class and add Lua API.

Aster@中国上海 11 years ago
parent
commit
6bcc980119

+ 34 - 0
Source/Engine/Graphics/ParticleEffect.cpp

@@ -517,6 +517,40 @@ void ParticleEffect::SetNumTextureFrames(unsigned num)
     textureFrames_.Resize(num);
 }
 
+Vector3 ParticleEffect::GetRandomDirection() const
+{
+    return Vector3(
+        Lerp(directionMin_.x_, directionMax_.x_, Random(1.0f)),
+        Lerp(directionMin_.y_, directionMax_.y_, Random(1.0f)),
+        Lerp(directionMin_.z_, directionMax_.z_, Random(1.0f))
+        );
+}
+
+Vector2 ParticleEffect::GetRandomSize() const
+{
+    return sizeMin_.Lerp(sizeMax_, Random(1.0f));
+}
+
+float ParticleEffect::GetRandomVelocity() const
+{
+    return Lerp(velocityMin_, velocityMax_, Random(1.0f));
+}
+
+float ParticleEffect::GetRandomTimeToLive() const
+{
+    return Lerp(timeToLiveMin_, timeToLiveMax_, Random(1.0f));
+}
+
+float ParticleEffect::GetRandomRotationSpeed() const
+{
+    return Lerp(rotationSpeedMin_, rotationSpeedMax_, Random(1.0f));
+}
+
+float ParticleEffect::GetRandomRotation() const
+{
+    return Lerp(rotationMin_, rotationMax_, Random(1.0f));
+}
+
 void ParticleEffect::GetFloatMinMax(const XMLElement& element, float& minValue, float& maxValue)
 {
     if (element.IsNull())

+ 13 - 0
Source/Engine/Graphics/ParticleEffect.h

@@ -255,6 +255,19 @@ public:
     /// Return a texture animation frame, or null if outside range.
     TextureFrame* GetTextureFrame(unsigned index) { return index < colorFrames_.Size() ? &textureFrames_[index] : (TextureFrame*)0; }
 
+    /// Return random direction.
+    Vector3 GetRandomDirection() const;
+    /// Return random size.
+    Vector2 GetRandomSize() const;
+    /// Return random velocity.
+    float GetRandomVelocity() const;
+    /// Return random timetolive.
+    float GetRandomTimeToLive() const;
+    /// Return random rotationspeed.
+    float GetRandomRotationSpeed() const;
+    /// Return random rotation.
+    float GetRandomRotation() const;
+
 private:
     /// Read a float range from an XML element.
     void GetFloatMinMax(const XMLElement& element, float& minValue, float& maxValue);

File diff suppressed because it is too large
+ 98 - 694
Source/Engine/Graphics/ParticleEmitter.cpp


+ 20 - 274
Source/Engine/Graphics/ParticleEmitter.h

@@ -27,12 +27,7 @@
 namespace Urho3D
 {
 
-/// Particle emitter shapes.
-enum EmitterType
-{
-    EMITTER_SPHERE,
-    EMITTER_BOX
-};
+class ParticleEffect;
 
 /// One particle in the particle system.
 struct Particle
@@ -55,72 +50,11 @@ struct Particle
     unsigned texIndex_;
 };
 
-/// %Color animation frame definition.
-struct ColorFrame
-{
-    /// Construct with default values.
-    ColorFrame() :
-        time_(0.0f)
-    {
-    }
-    
-    /// Construct with a color and zero time.
-    ColorFrame(const Color& color) :
-        color_(color),
-        time_(0.0f)
-    {
-    }
-    
-    /// Construct from a color and time.
-    ColorFrame(const Color& color, float time) :
-        color_(color),
-        time_(time)
-    {
-    }
-    
-    /// Return interpolated value with another color-time pair at the time specified.
-    Color Interpolate(const ColorFrame& next, float time)
-    {
-        float timeInterval = next.time_ - time_;
-        if (timeInterval > 0.0f)
-        {
-            float t = (time - time_) / timeInterval;
-            return color_.Lerp(next.color_, t);
-        }
-        else
-            return next.color_;
-    }
-    
-    /// Color.
-    Color color_;
-    /// Time.
-    float time_;
-};
-
-/// %Texture animation frame definition.
-struct TextureFrame
-{
-    /// Construct with default values.
-    TextureFrame() :
-        uv_(0.0f, 0.0f, 1.0f, 1.0f),
-        time_(0.0f)
-    {
-    }
-    
-    /// UV coordinates.
-    Rect uv_;
-    /// Time.
-    float time_;
-};
-
-class XMLFile;
-class XMLElement;
-
 /// %Particle emitter component.
 class URHO3D_API ParticleEmitter : public BillboardSet
 {
     OBJECT(ParticleEmitter);
-    
+
 public:
     /// Construct.
     ParticleEmitter(Context* context);
@@ -128,252 +62,64 @@ public:
     virtual ~ParticleEmitter();
     /// Register object factory.
     static void RegisterObject(Context* context);
-    
+
     /// Handle enabled/disabled state change.
     virtual void OnSetEnabled();
     /// Update before octree reinsertion. Is called from a worker thread.
     virtual void Update(const FrameInfo& frame);
-    
-    /// Load emitter parameters from an XML file.
-    bool Load(XMLFile* file);
-    /// Save particle emitter parameters to an XML file. Return true if successful.
-    bool Save(XMLFile* file) const;
+
+    /// Set particle effect.
+    void SetEffect(ParticleEffect* effect);
     /// Set maximum number of particles.
     void SetNumParticles(unsigned num);
-    /// Set emission rate (both minimum and maximum.)
-    void SetEmissionRate(float rate);
-    /// Set minimum emission rate.
-    void SetMinEmissionRate(float rate);
-    /// Set maximum emission rate.
-    void SetMaxEmissionRate(float rate);
-    /// Set emitter type.
-    void SetEmitterType(EmitterType type);
-    /// Set emitter size.
-    void SetEmitterSize(const Vector3& size);
-    /// Set emission active period length (0 = infinite.)
-    void SetActiveTime(float time);
-    /// Set emission inactive period length (0 = infinite.)
-    void SetInactiveTime(float time);
     /// Set whether should be emitting. If the state was changed, also resets the emission period timer.
     void SetEmitting(bool enable);
-    /// Set whether to update when particles are not visible.
-    void SetUpdateInvisible(bool enable);
-    /// Set particle time to live (both minimum and maximum.)
-    void SetTimeToLive(float time);
-    /// Set particle minimum time to live.
-    void SetMinTimeToLive(float time);
-    /// Set particle maximum time to live.
-    void SetMaxTimeToLive(float time);
-    /// Set particle size (both minimum and maximum.)
-    void SetParticleSize(const Vector2& size);
-    /// Set particle minimum size.
-    void SetMinParticleSize(const Vector2& size);
-    /// Set particle maximum size.
-    void SetMaxParticleSize(const Vector2& size);
-    /// Set negative direction limit.
-    void SetMinDirection(const Vector3& direction);
-    /// Set positive direction limit.
-    void SetMaxDirection(const Vector3& direction);
-    /// Set particle velocity (both minimum and maximum.)
-    void SetVelocity(float velocity);
-    /// Set particle minimum velocity.
-    void SetMinVelocity(float velocity);
-    /// Set particle maximum velocity.
-    void SetMaxVelocity(float velocity);
-    /// Set particle rotation (both minimum and maximum.)
-    void SetRotation(float rotation);
-    /// Set particle minimum rotation.
-    void SetMinRotation(float rotation);
-    /// Set particle maximum rotation.
-    void SetMaxRotation(float rotation);
-    /// Set particle rotation speed (both minimum and maximum.)
-    void SetRotationSpeed(float speed);
-    /// Set particle minimum rotation speed.
-    void SetMinRotationSpeed(float speed);
-    /// Set particle maximum rotation speed.
-    void SetMaxRotationSpeed(float speed);
-    /// Set constant force acting on particles.
-    void SetConstantForce(const Vector3& force);
-    /// Set particle velocity damping force.
-    void SetDampingForce(float force);
-    /// Set particle size additive modifier.
-    void SetSizeAdd(float sizeAdd);
-    /// Set particle size multiplicative modifier.
-    void SetSizeMul(float sizeMul);
-    /// Set color of particles.
-    void SetColor(const Color& color);
-    /// Set color animation of particles.
-    void SetColors(const Vector<ColorFrame>& colors);
-    /// Set number of color animation frames.
-    void SetNumColors(unsigned num);
-    /// Set particle texture animation.
-    void SetTextureFrames(const Vector<TextureFrame>& animation);
-    /// Set number of texture animation frames.
-    void SetNumTextureFrames(unsigned num);
     /// Reset the emission period timer.
     void ResetEmissionTimer();
     /// Remove all current particles.
     void RemoveAllParticles();
     /// Reset the particle emitter completely. Removes current particles, sets emitting state on, and resets the emission timer.
     void Reset();
-    
+
+    /// Return particle effect.
+    ParticleEffect* GetEffect() const { return effect_; }
     /// Return maximum number of particles.
     unsigned GetNumParticles() const { return particles_.Size(); }
     /// Return whether is currently emitting.
     bool IsEmitting() const { return emitting_; }
-    /// Return whether to update when particles are not visible.
-    bool GetUpdateInvisible() const { return updateInvisible_; }
-    /// Return minimum emission rate.
-    float GetMinEmissionRate() const { return emissionRateMin_; }
-    /// Return maximum emission rate.
-    float GetMaxEmissionRate() const { return emissionRateMax_; }
-    /// Return emitter type.
-    EmitterType GetEmitterType() const { return emitterType_; }
-    /// Return emitter size.
-    const Vector3& GetEmitterSize() const { return emitterSize_; }
-    /// Return emission active period length (0 = infinite.)
-    float GetActiveTime() const { return activeTime_; }
-    /// Return emission inactive period length (0 = infinite.)
-    float GetInactiveTime() const { return inactiveTime_; }
-    /// Return particle minimum time to live.
-    float GetMinTimeToLive() const { return timeToLiveMin_; }
-    /// Return particle maximum time to live.
-    float GetMaxTimeToLive() const { return timeToLiveMax_; }
-    /// Return particle minimum size.
-    const Vector2& GetMinParticleSize() const { return sizeMin_; }
-    /// Return particle maximum size.
-    const Vector2& GetMaxParticleSize() const { return sizeMax_; }
-    /// Return negative direction limit.
-    const Vector3& GetMinDirection() const { return directionMin_; }
-    /// Return positive direction limit.
-    const Vector3& GetMaxDirection() const { return directionMax_; }
-    /// Return particle minimum velocity.
-    float GetMinVelocity() const { return velocityMin_; }
-    /// Return particle maximum velocity.
-    float GetMaxVelocity() const { return velocityMax_; }
-    /// Return particle minimum rotation.
-    float GetMinRotation() const { return rotationMin_; }
-    /// Return particle maximum rotation.
-    float GetMaxRotation() const { return rotationMax_; }
-    /// Return particle minimum rotation speed.
-    float GetMinRotationSpeed() const { return rotationSpeedMin_; }
-    /// Return particle maximum rotation speed.
-    float GetMaxRotationSpeed() const { return rotationSpeedMax_; }
-    /// Return constant force acting on particles.
-    const Vector3& GetConstantForce() const { return constantForce_; }
-    /// Return particle velocity damping force.
-    float GetDampingForce() const { return dampingForce_; }
-    /// Return particle size additive modifier.
-    float GetSizeAdd() const { return sizeAdd_; }
-    /// Return particle size multiplicative modifier.
-    float GetSizeMul() const { return sizeMul_; }
-    /// Return all color animation frames.
-    Vector<ColorFrame>& GetColors() { return colorFrames_; }
-    /// Return number of color animation frames.
-    unsigned GetNumColors() const { return colorFrames_.Size(); }
-    /// Return a color animation frame, or null if outside range.
-    ColorFrame* GetColor(unsigned index) { return index < colorFrames_.Size() ? &colorFrames_[index] : (ColorFrame*)0; }
-    /// Return all texture animation frames.
-    Vector<TextureFrame>& GetTextureFrame() { return textureFrames_; }
-    /// Return number of texture animation frames.
-    unsigned GetNumTextureFrames() const { return textureFrames_.Size(); }
-    /// Return a texture animation frame, or null if outside range.
-    TextureFrame* GetTextureFrame(unsigned index) { return index < colorFrames_.Size() ? &textureFrames_[index] : (TextureFrame*)0; }
-    
-    /// Set particles attribute.
-    void SetParticlesAttr(VariantVector value);
-    /// Return particles attribute.
-    VariantVector GetParticlesAttr() const;
-    /// Set particle colors attribute.
-    void SetColorsAttr(VariantVector value);
-    /// Return particle colors attribute.
-    VariantVector GetColorsAttr() const;
-    /// Set texture animation attribute.
-    void SetTextureFramesAttr(VariantVector value);
-    /// Return texture animation attribute.
-    VariantVector GetTextureFramesAttr() const;
-    
+
+    /// Set particles effect attribute.
+    void SetEffectAttr(ResourceRef value);
+    /// Set particles effect attribute.
+    ResourceRef GetEffectAttr() const;
+
 protected:
     /// Handle node being assigned.
     virtual void OnNodeSet(Node* node);
-    
+
     /// Create a new particle. Return true if there was room.
     bool EmitNewParticle();
     /// Return a free particle index.
     unsigned GetFreeParticle() const;
-    /// Read a float range from an XML element.
-    void GetFloatMinMax(const XMLElement& element, float& minValue, float& maxValue);
-    /// Read a Vector2 range from an XML element.
-    void GetVector2MinMax(const XMLElement& element, Vector2& minValue, Vector2& maxValue);
-    /// Read a Vector3 from an XML element.
-    void GetVector3MinMax(const XMLElement& element, Vector3& minValue, Vector3& maxValue);
-    
+
 private:
     /// Handle scene post-update event.
     void HandleScenePostUpdate(StringHash eventType, VariantMap& eventData);
-    
+
+    /// Particle effect.
+    SharedPtr<ParticleEffect> effect_;
     /// Particles.
     PODVector<Particle> particles_;
-    /// Particle color animation frames.
-    Vector<ColorFrame> colorFrames_;
-    /// Texture animation frames.
-    Vector<TextureFrame> textureFrames_;
-    /// Emitter shape.
-    EmitterType emitterType_;
-    /// Emitter size.
-    Vector3 emitterSize_;
-    /// Particle direction minimum.
-    Vector3 directionMin_;
-    /// Particle direction maximum.
-    Vector3 directionMax_;
-    /// Particle constant force.
-    Vector3 constantForce_;
-    /// Particle size minimum.
-    Vector2 sizeMin_;
-    /// Particle size maximum.
-    Vector2 sizeMax_;
-    /// Particle velocity damping force.
-    float dampingForce_;
     /// Active/inactive period timer.
     float periodTimer_;
     /// New particle emission timer.
     float emissionTimer_;
-    /// Active period.
-    float activeTime_;
-    /// Inactive period.
-    float inactiveTime_;
-    /// Particles per second minimum.
-    float emissionRateMin_;
-    /// Particles per second maximum.
-    float emissionRateMax_;
-    /// Particle time to live minimum.
-    float timeToLiveMin_;
-    /// Particle time to live maximum.
-    float timeToLiveMax_;
-    /// Particle velocity minimum.
-    float velocityMin_;
-    /// Particle velocity maximum.
-    float velocityMax_;
-    /// Particle rotation angle minimum.
-    float rotationMin_;
-    /// Particle rotation angle maximum.
-    float rotationMax_;
-    /// Particle rotation speed minimum.
-    float rotationSpeedMin_;
-    /// Particle rotation speed maximum.
-    float rotationSpeedMax_;
-    /// Particle size additive parameter.
-    float sizeAdd_;
-    /// Particle size multiplicative parameter.
-    float sizeMul_;
     /// Last scene timestep.
     float lastTimeStep_;
     /// Rendering framenumber on which was last updated.
     unsigned lastUpdateFrameNumber_;
     /// Currently emitting flag.
     bool emitting_;
-    /// Update when invisible flag.
-    bool updateInvisible_;
     /// Need update flag.
     bool needUpdate_;
 };

+ 127 - 0
Source/Engine/LuaScript/pkgs/Graphics/ParticleEffect.pkg

@@ -1,5 +1,132 @@
 $#include "ParticleEffect.h"
 
+enum EmitterType
+{
+    EMITTER_SPHERE,
+    EMITTER_BOX
+};
+
+struct ColorFrame
+{
+    ColorFrame();
+    ColorFrame(const Color& color);
+    ColorFrame(const Color& color, float time);
+    ~ColorFrame();
+
+    Color Interpolate(const ColorFrame& next, float time);
+    Color color_ @ color;
+    float time_ @ time;
+};
+
+struct TextureFrame
+{
+    TextureFrame();
+    ~TextureFrame();
+
+    Rect uv_ @ uv;
+    float time_ @ time;
+};
+
 class ParticleEffect : public Resource
 {
+    void SetMaterial(Material* material);
+    void SetNumParticles(unsigned num);
+    void SetUpdateInvisible(bool enable);
+    void SetRelative(bool enable);
+    void SetScaled(bool enable);
+    void SetSorted(bool enable);
+    void SetAnimationLodBias(float lodBias);
+    void SetEmitterType(EmitterType type);
+    void SetEmitterSize(const Vector3& size);
+    void SetMinDirection(const Vector3& direction);
+    void SetMaxDirection(const Vector3& direction);
+    void SetConstantForce(const Vector3& force);
+    void SetDampingForce(float force);
+    void SetActiveTime(float time);
+    void SetInactiveTime(float time);
+    void SetMinEmissionRate(float rate);
+    void SetMaxEmissionRate(float rate);
+    void SetMinParticleSize(const Vector2& size);
+    void SetMaxParticleSize(const Vector2& size);
+    void SetMinTimeToLive(float time);
+    void SetMaxTimeToLive(float time);
+    void SetMinVelocity(float velocity);
+    void SetMaxVelocity(float velocity);
+    void SetMinRotation(float rotation);
+    void SetMaxRotation(float rotation);
+    void SetMinRotationSpeed(float speed);
+    void SetMaxRotationSpeed(float speed);
+    void SetSizeAdd(float sizeAdd);
+    void SetSizeMul(float sizeMul);
+    void SetColor(const Color& color);
+    // void SetColors(const Vector<ColorFrame>& colors);
+    void SetNumColors(unsigned num);
+    // void SetTextureFrames(const Vector<TextureFrame>& animation);
+    void SetNumTextureFrames(unsigned num);
+
+    Material* GetMaterial() const;
+    unsigned GetNumParticles() const;
+    bool GetUpdateInvisible() const;
+    bool IsRelative() const;
+    bool IsScaled() const;
+    bool IsSorted() const;
+    float GetAnimationLodBias() const;
+    EmitterType GetEmitterType() const;
+    const Vector3& GetEmitterSize() const;
+    const Vector3& GetMinDirection() const;
+    const Vector3& GetMaxDirection() const;
+    const Vector3& GetConstantForce() const;
+    float GetDampingForce() const;
+    float GetActiveTime() const;
+    float GetInactiveTime() const;
+    float GetMinEmissionRate() const;
+    float GetMaxEmissionRate() const;
+    const Vector2& GetMinParticleSize() const;
+    const Vector2& GetMaxParticleSize() const;
+    float GetMinTimeToLive() const;
+    float GetMaxTimeToLive() const;
+    float GetMinVelocity() const;
+    float GetMaxVelocity() const;
+    float GetMinRotation() const;
+    float GetMaxRotation() const;
+    float GetMinRotationSpeed() const;
+    float GetMaxRotationSpeed() const;
+    float GetSizeAdd() const;
+    float GetSizeMul() const;
+    unsigned GetNumColors() const;
+    ColorFrame* GetColor(unsigned index);
+    unsigned GetNumTextureFrames() const;
+    TextureFrame* GetTextureFrame(unsigned index);
+
+    tolua_property__get_set Material* material;
+    tolua_property__get_set unsigned numParticles;
+    tolua_property__get_set bool updateInvisible;
+    tolua_property__is_set bool relative;
+    tolua_property__is_set bool scaled;
+    tolua_property__is_set bool sorted;
+    tolua_property__get_set float animationLodBias;
+    tolua_property__get_set EmitterType emitterType;
+    tolua_property__get_set const Vector3& emitterSize;
+    tolua_property__get_set const Vector3& minDirection;
+    tolua_property__get_set const Vector3& maxDirection;
+    tolua_property__get_set const Vector3& constantForce;
+    tolua_property__get_set float dampingForce;
+    tolua_property__get_set float activeTime;
+    tolua_property__get_set float inactiveTime;
+    tolua_property__get_set float minEmissionRate;
+    tolua_property__get_set float maxEmissionRate;
+    tolua_property__get_set const Vector2& minParticleSize;
+    tolua_property__get_set const Vector2& maxParticleSize;
+    tolua_property__get_set float minTimeToLive;
+    tolua_property__get_set float maxTimeToLive;
+    tolua_property__get_set float minVelocity;
+    tolua_property__get_set float maxVelocity;
+    tolua_property__get_set float minRotation;
+    tolua_property__get_set float maxRotation;
+    tolua_property__get_set float minRotationSpeed;
+    tolua_property__get_set float maxRotationSpeed;
+    tolua_property__get_set float sizeAdd;
+    tolua_property__get_set float sizeMul;
+    tolua_property__get_set unsigned numColors;
+    tolua_property__get_set unsigned numTextureFrames;
 };

+ 7 - 156
Source/Engine/LuaScript/pkgs/Graphics/ParticleEmitter.pkg

@@ -1,169 +1,20 @@
 $#include "ParticleEmitter.h"
 
-enum EmitterType
-{
-    EMITTER_SPHERE,
-    EMITTER_BOX
-};
-
-/*
-struct Particle
-{
-    Vector3 velocity_;
-    Vector2 size_;
-    float timer_;
-    float timeToLive_;
-    float scale_;
-    float rotationSpeed_;
-    unsigned colorIndex_;
-    unsigned texIndex_;
-};
-*/
-
-struct ColorFrame
-{
-    ColorFrame();
-    ColorFrame(const Color& color);
-    ColorFrame(const Color& color, float time);
-    ~ColorFrame();
-    
-    Color Interpolate(const ColorFrame& next, float time);
-    Color color_ @ color;
-    float time_ @ time;
-};
-
-struct TextureFrame
-{
-    TextureFrame();
-    ~TextureFrame();
-
-    Rect uv_ @ uv;
-    float time_ @ time;
-};
-
 class ParticleEmitter : public BillboardSet
 {
-    bool Load(XMLFile* file);
-    bool Save(XMLFile* file);
+    void SetEffect(ParticleEffect* effect);
     void SetNumParticles(unsigned num);
-    void SetEmissionRate(float rate);
-    void SetMinEmissionRate(float rate);
-    void SetMaxEmissionRate(float rate);
-    void SetEmitterType(EmitterType type);
-    void SetEmitterSize(const Vector3& size);
-    void SetActiveTime(float time);
-    void SetInactiveTime(float time);
     void SetEmitting(bool enable);
-    void SetUpdateInvisible(bool enable);
-    void SetTimeToLive(float time);
-    void SetMinTimeToLive(float time);
-    void SetMaxTimeToLive(float time);
-    void SetParticleSize(const Vector2& size);
-    void SetMinParticleSize(const Vector2& size);
-    void SetMaxParticleSize(const Vector2& size);
-    void SetMinDirection(const Vector3& direction);
-    void SetMaxDirection(const Vector3& direction);
-    void SetVelocity(float velocity);
-    void SetMinVelocity(float velocity);
-    void SetMaxVelocity(float velocity);
-    void SetRotation(float rotation);
-    void SetMinRotation(float rotation);
-    void SetMaxRotation(float rotation);
-    void SetRotationSpeed(float speed);
-    void SetMinRotationSpeed(float speed);
-    void SetMaxRotationSpeed(float speed);
-    void SetConstantForce(const Vector3& force);
-    void SetDampingForce(float force);
-    void SetSizeAdd(float sizeAdd);
-    void SetSizeMul(float sizeMul);
-    void SetColor(const Color& color);
-    void SetNumColors(unsigned num);
-    void SetNumTextureFrames(unsigned num);
     void ResetEmissionTimer();
     void RemoveAllParticles();
     void Reset();
-    
-    unsigned GetNumParticles() const;
-    bool IsEmitting() const;
-    bool GetUpdateInvisible() const;
-    float GetMinEmissionRate() const;
-    float GetMaxEmissionRate() const;
-    EmitterType GetEmitterType() const;
-    const Vector3& GetEmitterSize() const;
-    float GetActiveTime() const;
-    float GetInactiveTime() const;
-    float GetMinTimeToLive() const;
-    float GetMaxTimeToLive() const;
-    const Vector2& GetMinParticleSize() const;
-    const Vector2& GetMaxParticleSize() const;
-    const Vector3& GetMinDirection() const;
-    const Vector3& GetMaxDirection() const;
-    float GetMinVelocity() const;
-    float GetMaxVelocity() const;
-    float GetMinRotation() const;
-    float GetMaxRotation() const;
-    float GetMinRotationSpeed() const;
-    float GetMaxRotationSpeed() const;
-    const Vector3& GetConstantForce() const;
-    float GetDampingForce() const;
-    float GetSizeAdd() const;
-    float GetSizeMul() const;
-    unsigned GetNumColors() const;
-    ColorFrame* GetColor(unsigned index);
-    unsigned GetNumTextureFrames() const;
-    TextureFrame* GetTextureFrame(unsigned index);
-    
+
+    ParticleEffect* GetEffect() const { return effect_; }
+    unsigned GetNumParticles() const { return particles_.Size(); }
+    bool IsEmitting() const { return emitting_; }
+
+    tolua_property__get_set ParticleEffect* effect;
     tolua_property__get_set unsigned numParticles;
-    tolua_property__get_set float emissionRate; // Write only property.
     tolua_property__is_set bool emitting;
-    tolua_property__get_set bool updateInvisible;
-    tolua_property__get_set float minEmissionRate;
-    tolua_property__get_set float maxEmissionRate;
-    tolua_property__get_set EmitterType emitterType;
-    tolua_property__get_set Vector3& emitterSize;
-    tolua_property__get_set float activeTime;
-    tolua_property__get_set float inactiveTime;
-    tolua_property__get_set float timeToLive; // Write only property.
-    tolua_property__get_set float minTimeToLive;
-    tolua_property__get_set float maxTimeToLive;
-    tolua_property__get_set Vector2& particleSize; // Write only property.
-    tolua_property__get_set Vector2& minParticleSize;
-    tolua_property__get_set Vector2& maxParticleSize;
-    tolua_property__get_set Vector3& minDirection;
-    tolua_property__get_set Vector3& maxDirection;
-    tolua_property__get_set float velocity; // Write only property.
-    tolua_property__get_set float minVelocity;
-    tolua_property__get_set float maxVelocity;
-    tolua_property__get_set float rotation; // Write only property.
-    tolua_property__get_set float minRotation;
-    tolua_property__get_set float maxRotation;
-    tolua_property__get_set float rotationSpeed; // Write only property.
-    tolua_property__get_set float minRotationSpeed;
-    tolua_property__get_set float maxRotationSpeed;
-    tolua_property__get_set Vector3& constantForce;
-    tolua_property__get_set float dampingForce;
-    tolua_property__get_set float sizeAdd;
-    tolua_property__get_set float sizeMul;
-    tolua_property__get_set unsigned numColors;
-    tolua_property__get_set unsigned numTextureFrames;
 };
 
-${
-#define TOLUA_DISABLE_tolua_get_ParticleEmitter_emissionRate
-#define tolua_get_ParticleEmitter_emissionRate NULL
-
-#define TOLUA_DISABLE_tolua_get_ParticleEmitter_timeToLive
-#define tolua_get_ParticleEmitter_timeToLive NULL
-
-#define TOLUA_DISABLE_tolua_get_ParticleEmitter_particleSize_ref
-#define tolua_get_ParticleEmitter_particleSize_ref NULL
-
-#define TOLUA_DISABLE_tolua_get_ParticleEmitter_velocity
-#define tolua_get_ParticleEmitter_velocity NULL
-
-#define TOLUA_DISABLE_tolua_get_ParticleEmitter_rotation
-#define tolua_get_ParticleEmitter_rotation NULL
-
-#define TOLUA_DISABLE_tolua_get_ParticleEmitter_rotationSpeed
-#define tolua_get_ParticleEmitter_rotationSpeed NULL
-$}

+ 9 - 7
Source/Engine/Script/GraphicsAPI.cpp

@@ -1028,29 +1028,30 @@ static void RegisterBillboardSet(asIScriptEngine* engine)
 }
 
 static void RegisterParticleEffect(asIScriptEngine* engine)
-{
-    RegisterResource<ParticleEffect>(engine, "ParticleEffect");
-}
-
-static void RegisterParticleEmitter(asIScriptEngine* engine)
 {
     engine->RegisterEnum("EmitterType");
     engine->RegisterEnumValue("EmitterType", "EMITTER_SPHERE", EMITTER_SPHERE);
     engine->RegisterEnumValue("EmitterType", "EMITTER_BOX", EMITTER_BOX);
-    
+
     engine->RegisterObjectType("ColorFrame", 0, asOBJ_REF);
     engine->RegisterObjectBehaviour("ColorFrame", asBEHAVE_ADDREF, "void f()", asFUNCTION(FakeAddRef), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("ColorFrame", asBEHAVE_RELEASE, "void f()", asFUNCTION(FakeReleaseRef), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectProperty("ColorFrame", "Color color", offsetof(ColorFrame, color_));
     engine->RegisterObjectProperty("ColorFrame", "float time", offsetof(ColorFrame, time_));
-    
+
     engine->RegisterObjectType("TextureFrame", 0, asOBJ_REF);
     engine->RegisterObjectBehaviour("TextureFrame", asBEHAVE_ADDREF, "void f()", asFUNCTION(FakeAddRef), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("TextureFrame", asBEHAVE_RELEASE, "void f()", asFUNCTION(FakeReleaseRef), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectProperty("TextureFrame", "Rect uv", offsetof(TextureFrame, uv_));
     engine->RegisterObjectProperty("TextureFrame", "float time", offsetof(TextureFrame, time_));
     
+    RegisterResource<ParticleEffect>(engine, "ParticleEffect");
+}
+
+static void RegisterParticleEmitter(asIScriptEngine* engine)
+{   
     RegisterDrawable<ParticleEmitter>(engine, "ParticleEmitter");
+    /*
     engine->RegisterObjectMethod("ParticleEmitter", "bool Load(XMLFile@+)", asMETHODPR(ParticleEmitter, Load, (XMLFile*), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter", "bool Save(XMLFile@+)", asMETHODPR(ParticleEmitter, Save, (XMLFile*) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter", "void SetColor(const Color&in)", asMETHOD(ParticleEmitter, SetColor), asCALL_THISCALL);
@@ -1132,6 +1133,7 @@ static void RegisterParticleEmitter(asIScriptEngine* engine)
     engine->RegisterObjectMethod("ParticleEmitter", "void set_numTextureFrames(uint)", asMETHOD(ParticleEmitter, SetNumTextureFrames), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter", "uint get_numTextureFrames() const", asMETHOD(ParticleEmitter, GetNumTextureFrames), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter", "Zone@+ get_zone() const", asMETHOD(ParticleEmitter, GetZone), asCALL_THISCALL);
+    */
 }
 
 static void RegisterCustomGeometry(asIScriptEngine* engine)

Some files were not shown because too many files changed in this diff