using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace BansheeEngine
{
/** @addtogroup Particles
* @{
*/
///
/// Controls spawning, evolution and rendering of particles. Particles can be 2D or 3D, with a variety of rendering
/// options. Particle system should be used for rendering objects that cannot properly be represented using static or
/// animated meshes, like liquids, smoke or flames.
///
/// The particle system requires you to specify at least one ParticleEmitter, which controls how are new particles
/// generated. You will also want to specify one or more ParticleEvolver%s, which change particle properties over time.
///
[ShowInInspector]
public partial class ParticleSystem : Component
{
private ParticleSystem(bool __dummy0) { }
protected ParticleSystem() { }
/// Determines general purpose settings that apply to the particle system.
[ShowInInspector]
[NotNull]
[PassByCopy]
[NativeWrapper]
public ParticleSystemSettings Settings
{
get { return Internal_getSettings(mCachedPtr); }
set { Internal_setSettings(mCachedPtr, value); }
}
/// Determines settings that control particle GPU simulation.
[ShowInInspector]
[NotNull]
[PassByCopy]
[NativeWrapper]
public ParticleGpuSimulationSettings GpuSimulationSettings
{
get { return Internal_getGpuSimulationSettings(mCachedPtr); }
set { Internal_setGpuSimulationSettings(mCachedPtr, value); }
}
///
/// Set of objects that determine initial position, normal and other properties of newly spawned particles. Each particle
/// system must have at least one emitter.
///
[ShowInInspector]
[NativeWrapper]
public ParticleEmitter[] Emitters
{
get { return Internal_getEmitters(mCachedPtr); }
set { Internal_setEmitters(mCachedPtr, value); }
}
///
/// Set of objects that determine how particle properties change during their lifetime. Evolvers only affect CPU
/// simulated particles.
///
[ShowInInspector]
[NativeWrapper]
public ParticleEvolver[] Evolvers
{
get { return Internal_getEvolvers(mCachedPtr); }
set { Internal_setEvolvers(mCachedPtr, value); }
}
///
/// Determines the layer bitfield that controls whether a system is considered visible in a specific camera. Layer must
/// match camera layer in order for the camera to render the component.
///
[ShowInInspector]
[NativeWrapper]
public ulong Layer
{
get { return Internal_getLayer(mCachedPtr); }
set { Internal_setLayer(mCachedPtr, value); }
}
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setSettings(IntPtr thisPtr, ParticleSystemSettings settings);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern ParticleSystemSettings Internal_getSettings(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setGpuSimulationSettings(IntPtr thisPtr, ParticleGpuSimulationSettings settings);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern ParticleGpuSimulationSettings Internal_getGpuSimulationSettings(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setEmitters(IntPtr thisPtr, ParticleEmitter[] emitters);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern ParticleEmitter[] Internal_getEmitters(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setEvolvers(IntPtr thisPtr, ParticleEvolver[] evolvers);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern ParticleEvolver[] Internal_getEvolvers(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setLayer(IntPtr thisPtr, ulong layer);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern ulong Internal_getLayer(IntPtr thisPtr);
}
/** @} */
}