Particle Object Agents

 

The Particle Object Agent provides an interface to the underlying plug-in API Particle System services. A Particle Object Agent instance is created using the constructor Particle(). This constructor can be used to create a new instance of a Particle database, or it can be used to acquire an existing Particle System, depending upon the arguments provided.

If a valid Layout Object Agent is provided to the constructor then a list of the Particle systems active on that object are returned. If no Particle systems are enabled for that object, then 'nil' is returned.

obj = Mesh("Cow");
part = Particle(obj) || error("No particle systems
active!");

When creating a new Particle system, you must specify the particle types and provide a list of the buffers to be created and maintained for each particle. Particle types can be one of PART_PARTICLE (single particle) or PART_TRAIL (particle with tail). As with most constants in LScript, these can also be specified using the string equivalents "particle" and "trail."

The following buffers can be allocated for each particle:

PART_POSITION                    (or "position")

PART_SIZE                            (or "size")

PART_SCALE                        (or "scale")

PART_ROTATION                   (or "rotation")

PART_VELOCITY                   (or "velocity")

PART_AGE                            (or "age")

PART_FORCE                       (or "force")

PART_PRESSURE                (or "pressure")

PART_TEMPERATURE         (or "temperature")

PART_MASS                        (or "mass")

PART_LINK                          (or "link")

PART_ID                              (or "id")

PART_ENABLE                    (or "enable")

PART_RGBA                         (or "rgba")

PART_COLLISION                 (or "collision")

Particles can exist in one of three states: PART_ALIVE, PART_DEAD, or PART_LIMBO. These values are used when reading/ writing the PART_ENABLE buffer.

Data Members

count
count returns the current number of particles (integer) defined in the instance.

Methods

save()
save()writes particle-specific data during the save state. This method can be used only in the pre-defined save()script function.

load()
load()loads particle data during the load state. This method can be used only in the pre-defined load() script function.

attach(Object Agent)
attach(Object Agent)attaches the particle instance to a Layout Object Agent so systems like HyperVoxels can access the particle data.

detach(Object Agent)
detach(Object Agent)disassociates the particle instance from its object.

reset()
reset()clears all particles from the instance.

addParticle()
addParticle()generates a new particle in the instance. The index value of the new particle is returned.

remParticle(index)
remParticle(index)removes the indicated particle index from the instance.

setParticle(index,bufid,value)
setParticle(index,bufid,value)sets the data for the specified particle buffer for the indicated particle index.

getParticle(index,bufid)
getParticle(index,bufid)retrieves the value in the specified particle buffer for the indicated particle index.

Examples:

Here is the LScript equivalent of the particle SDK example. You can test it by applying it to an object, and then enabling that object in HyperVoxels:

@warnings
@version 2.3
@script displace

part;

create: id
{
    part = Particle("particle",@"position","size","enable",
"rgba"@);
    part.attach(id);
}

newtime: id, frame, time
{
    part.reset();
}

flags { return(WORLD); }

process: da
{
    i = part.addParticle();
    part.setParticle(i,"position",<da.oPos[1],da.oPos[2],
da.oPos[3]>);
    part.setParticle(i,"rgba",100,150,200,255);
    part.setParticle(i,"enable",PART_ALIVE);
}