public static void Write(this ByteBuffer buffer, int offsetInBytes, Vector4 value) { var floats = value.ToArray(); var bytes = new byte[floats.Length * sizeof(float)]; Buffer.BlockCopy(floats, 0, bytes, 0, bytes.Length); buffer.Write(offsetInBytes, bytes, 0, bytes.Length); }
private void DumpParticles(BabylonScene babylonScene) { if (particleSystemsToExport.Count == 0) return; babylonScene.particleSystems = new BabylonParticleSystem[particleSystemsToExport.Count]; var index = 0; foreach (var particleSystem in particleSystemsToExport) { babylonScene.particleSystems[index] = new BabylonParticleSystem { capacity = particleSystem.BufferSize, emitterId = particleSystem.Emitter.ID.ToString(), gravity = particleSystem.Gravity.ToArray(), direction1 = Vector3.TransformNormal(particleSystem.Direction1, particleSystem.Emitter.LocalMatrix).ToArray(), direction2 = Vector3.TransformNormal(particleSystem.Direction2, particleSystem.Emitter.LocalMatrix).ToArray(), minEmitBox = particleSystem.MinEmitBox.ToArray(), maxEmitBox = particleSystem.MaxEmitBox.ToArray(), color1 = particleSystem.Color1.ToArray(), color2 = particleSystem.Color2.ToArray(), colorDead = new RGBAColor(particleSystem.ColorDead.Red, particleSystem.ColorDead.Green, particleSystem.ColorDead.Blue, particleSystem.DeadAlpha).ToArray(), emitRate = particleSystem.EmitRate, updateSpeed = particleSystem.UpdateSpeed, targetStopFrame = particleSystem.TargetStopFrame, minEmitPower = particleSystem.MinEmitPower, maxEmitPower = particleSystem.MaxEmitPower, minLifeTime = particleSystem.MinLifeTime, maxLifeTime = particleSystem.MaxLifeTime, minSize = particleSystem.MinSize, maxSize = particleSystem.MaxSize, minAngularSpeed = particleSystem.MinAngularSpeed, maxAngularSpeed = particleSystem.MaxAngularSpeed, textureName = CopyTexture(particleSystem.Texture, babylonScene), blendMode = (int)particleSystem.BlendType, linkToEmitter = particleSystem.LinkToEmitter }; Vector4 textureMask = Vector4.Zero; switch (particleSystem.TextureUsage) { case NovaParticleSystem.ParticleTextureUsages.Alpha: textureMask = new Vector4(0, 0, 0, 1); break; case NovaParticleSystem.ParticleTextureUsages.RGB: textureMask = new Vector4(1, 1, 1, 0); break; case NovaParticleSystem.ParticleTextureUsages.ARGB: textureMask = new Vector4(1, 1, 1, 1); break; } babylonScene.particleSystems[index].textureMask = textureMask.ToArray(); index++; } }