1. When addProtectedField used with custom setters, we need to return false, or it will set the value via regular routine after the method exists (change ParticleData::protectedSetTimes() to return false instead of true).
2. The ParticleData::sizes[] needs a custom setter, so the value is clamped in a range of 0.f and MaxParticleSize.
3. The spinRadnomMin and spinRandomMax ParticleData fields need a FRangeValidator, so it auto-clamped in a range of -1000 to 1000, as we are writing data trying to fit the values in 11 bits (as UInt upto 2048 max).
* The description for those fields needs to be updated to use 1000 instead of 10000.
* ParticleData::onAdd() should check for values to be in a correct range too.
screenScale represents the current zoom factor, but may need some
revision because I'm not sure if what it's doing is technically correct.
It is used to multiply the culling distance for cells, as well as the
fading distance.