(23:14:10) Phil: Also more about the Particle System, this is how it works. For a basic particle system it has an Emitter Velocity, Volume, and Affector. The Emitter Volume determines where the particle is located in space when its created and its initial direction. The Emitter Velocity determines based on its direction its speed and acceleration or a new directon. The Emitter Affector(s) determine each....
(23:14:32) Phil: Particles appearance over time, such as how its angle changes, its size, its shade, etc
(23:15:19) Phil: So the different emitter volumes can be a point, rectangle, ellipse, line, spline, bezier, etc.
(23:16:01) Phil: The different emitter velocities are directional, ortho, outward, towards, etc. And the different affectors can be size, angle, color, alpha, gravity, etc.
(23:16:26) Phil: So each system has one emitter velocity and volume, and a list of affectors.
(23:17:37) Phil: So theres an interface for an emitter velocity, and emitter volume, then some concrete class to implement them. These interfaces also lets the particle systems customizable because a user can create their own emitter type for their own specific needs.
(23:19:04) Phil: any input? anything overly complicated?
(23:19:13) Bart van Heukelom.nl [2playgames]: i understand the volume and the affector
(23:19:17) Phil: ok
(23:19:34) Bart van Heukelom.nl [2playgames]: which btw i'd cal (Particle)Emitter and ParticleAffector respectively :p
(23:19:42) Bart van Heukelom.nl [2playgames]: but i don't really get what the velocity does
(23:19:46) Phil: Ok
(23:20:11) Bart van Heukelom.nl [2playgames]: i also assume there's a fourth class particle
(23:20:20) Bart van Heukelom.nl [2playgames]: and a 5th particlesystem
(23:22:03) Phil: well an example Velocity is Directional. Directional takes in a "minAngle", "maxAngle", and "minSpeed", "maxSpeed". So the particle would point somewhere between the two angles given, and have a speed between the two speeds given. Another example would be an Outward velocity. Outward velocity points the direction of the particles away from the systems location, so they radiate out from a point, an
(23:22:12) Phil: ellipse, or whatever volume.
(23:22:23) Bart van Heukelom.nl [2playgames]: yes but why not put all that in affector?
(23:23:23) Phil: The affector manipulates the particles over time, this gives the particles an initial angle and initial speed.
(23:23:35) Phil: You could have it in an affector, but its slower
(23:23:51) Bart van Heukelom.nl [2playgames]: so basically volume+velocity = emitter
(23:23:55) Phil: yes
(23:24:06) Bart van Heukelom.nl [2playgames]: but then in a way that you can make different combinations
(23:24:09) Bart van Heukelom.nl [2playgames]: yeah, seems smart
(23:24:47) Phil: yeah, instead of restricting to certain emitter types this makes it better object oriented and customizable.
(23:25:01) Bart van Heukelom.nl [2playgames]: volume = creator, velocity = launcher, something like that

(23:25:10) Phil: yes
(23:25:24) Bart van Heukelom.nl [2playgames]: and then affector = steer
(23:25:30) Phil: yup.
(23:25:32) Bart van Heukelom.nl [2playgames]: ok
(23:26:41) Bart van Heukelom.nl [2playgames]: but how will you allow extending the amount of particle types
(23:26:54) Phil: explain
(23:27:19) Bart van Heukelom.nl [2playgames]: for example, if i want a particle which draws a guy (just a random example)
(23:27:28) Bart van Heukelom.nl [2playgames]: and i want it to grow more legs over time
(23:27:50) Bart van Heukelom.nl [2playgames]: i can't use affector, because it doesn't know the particle may even have a property for legs?
(23:27:57) Phil: ohh
(23:28:32) Phil: do you have a better example? lol I don't understand what you mean by grow legs
(23:28:55) Bart van Heukelom.nl [2playgames]: well, like it has two legs first, but in time gets more, ending up with 5
(23:29:07) Phil: oh ok
(23:29:15) Bart van Heukelom.nl [2playgames]: in other words, a particle type with a new kind of property
(23:30:06) Phil: well each particle has an update method, so if you make that class inherit particle, and override the update then you can put whatever logic inside that. The particle knows its lifetime, its current time in life, etc
(23:30:16) Bart van Heukelom.nl [2playgames]: ok
(23:30:24) Bart van Heukelom.nl [2playgames]: but what if i want to use the same particle in two effects
(23:30:33) Bart van Heukelom.nl [2playgames]: in one i want it to grow legs, in the other i want arms
(23:30:37) Bart van Heukelom.nl [2playgames]: same particle, different affectors
(23:30:45) Phil: Ohh
(23:30:46) Phil: hmm
(23:31:07) Bart van Heukelom.nl [2playgames]: perhaps make Affector generic (Affector<GuyParticle>)
(23:31:13) Phil: Well Ill make the affector a template
(23:31:14) Phil: yeah
(23:31:39) Phil: so anything that inherits a particle can be affected uniquely
(23:31:48) Phil: according to the affector
(23:32:00) Phil: does that work?
(23:32:03) Bart van Heukelom.nl [2playgames]: yeah
(23:32:17) Bart van Heukelom.nl [2playgames]: although we'd have to split up volume, so we can have multiple particle types in it
(23:32:34) Phil: like..
(23:33:02) Bart van Heukelom.nl [2playgames]: Volume.addType(GuyParticle.class, LegAffector) // LegAffector = Affector<GuyParticle>)
(23:33:32) Phil: Well the particle system has the list of affectors
(23:33:48) Bart van Heukelom.nl [2playgames]: oh yeah, forgot about the system
(23:34:12) Bart van Heukelom.nl [2playgames]: but say i want guys, and smoke, in one system
(23:34:23) Bart van Heukelom.nl [2playgames]: that means there must be different types in one system
(23:34:27) Bart van Heukelom.nl [2playgames]: each with their own affector
(23:34:40) Bart van Heukelom.nl [2playgames]: so then there'd be some kind of subsystem
(23:34:43) Phil: Thats a ParticleList, several systems in one
(23:35:08) Phil: well the basic particle system handles one type, a particle list can handle a collaboration of systems
(23:35:25) Phil: but it also can have universal control over the emitter, or specific emitters
(23:35:55) Bart van Heukelom.nl [2playgames]: we can also have multiple particlelists inside a particlelist

(23:36:12) Phil: what would that be for?
(23:36:14) Bart van Heukelom.nl [2playgames]: although maybe we'd give it a more appropriate name?
(23:36:18) Phil: yeah..
(23:36:23) Bart van Heukelom.nl [2playgames]: for positioning
(23:36:50) Bart van Heukelom.nl [2playgames]: i see each system (and supersystem) having a position and rotation, from which it's children are related
(23:36:57) Phil: ok so several fire effects (smoke, sparks, fire) all over some object on fire? that kind of idea
(23:37:07) Bart van Heukelom.nl [2playgames]: yeah
(23:37:23) Bart van Heukelom.nl [2playgames]: and then you can rotate one system, but keep the other still
(23:37:28) Phil: yeah
(23:37:33) Bart van Heukelom.nl [2playgames]: and everything in the rotated system rotates as well
(23:37:39) Phil: yeah makes sense
(23:38:17) Phil: so its just a tree of systems where if the root is rotated or moved all its children move. If the children move by themselves, only their children move if they have any
(23:38:23) Bart van Heukelom.nl [2playgames]: we'll have to see if we want to keep a particle system and particle super system, or integrate them
(23:38:28) Bart van Heukelom.nl [2playgames]: yeah, a tree
(23:40:29) Phil: So a particle system could implement something like "ParticleNode" that keeps track of its angle, location, and scaling. And a ParticleList has a list of ParticleNodes and itself is also a ParticleNode
(23:41:00) Phil: or "SystemNode", which ever one suits
(23:41:57) Bart van Heukelom.nl [2playgames]: yeah, something like that
(23:42:05) Phil: gotcha
(23:42:27) Phil: now doing this with a Graphics2D object will be easy due to transformations
(23:42:42) Bart van Heukelom.nl [2playgames]: the engine has it's own graphics layer
(23:42:52) Bart van Heukelom.nl [2playgames]: but it support transform very much like java2d
(23:43:00) Phil: oh ok
(23:43:17) Bart van Heukelom.nl [2playgames]: and there's in fact only a java2d implementation atm
(23:43:25) Phil: Yeah in mine I have a "GraphicsLibrary" which has every function that something needs to draw.
(23:43:25) Bart van Heukelom.nl [2playgames]: anyway, there's this classmate of mine who'd maybe like to help
(23:43:38) Bart van Heukelom.nl [2playgames]: he's been working with emitters in the unreal engine, might have some experience tips
(23:43:47) Phil: Yeah