Esempio n. 1
0
        /// <summary>
        /// Create VGO_PS_ShapeModule from ShapeModule.
        /// </summary>
        /// <param name="module"></param>
        /// <param name="gltf"></param>
        /// <returns></returns>
        /// <remarks>
        /// @notice TextureIO.ExportTexture() may export the same texture multiple times.
        /// </remarks>
        protected virtual VGO_PS_ShapeModule CreateVgoModule(ShapeModule module, glTF gltf)
        {
            var vgoShapeModule = new VGO_PS_ShapeModule()
            {
                enabled               = module.enabled,
                shapeType             = module.shapeType,
                angle                 = module.angle,
                radius                = module.radius,
                donutRadius           = module.donutRadius,
                radiusMode            = module.radiusMode,
                radiusSpread          = module.radiusSpread,
                radiusSpeed           = VgoParticleSystemMinMaxCurveConverter.CreateFrom(module.radiusSpeed),
                radiusSpeedMultiplier = module.radiusSpeedMultiplier,
                radiusThickness       = module.radiusThickness,
                boxThickness          = module.boxThickness.ReverseZ().ToArray(),
                arc                      = module.arc,
                arcMode                  = module.arcMode,
                arcSpread                = module.arcSpread,
                arcSpeed                 = VgoParticleSystemMinMaxCurveConverter.CreateFrom(module.arcSpeed),
                arcSpeedMultiplier       = module.arcSpeedMultiplier,
                length                   = module.length,
                meshShapeType            = module.meshShapeType,
                meshSpawnMode            = module.meshSpawnMode,
                meshSpawnSpread          = module.meshSpawnSpread,
                meshSpawnSpeed           = VgoParticleSystemMinMaxCurveConverter.CreateFrom(module.meshSpawnSpread),
                meshSpawnSpeedMultiplier = module.meshSpawnSpeedMultiplier,
                //mesh
                //meshRenderer
                //skinnedMeshRenderer
                useMeshMaterialIndex = module.useMeshMaterialIndex,
                meshMaterialIndex    = module.meshMaterialIndex,
                useMeshColors        = module.useMeshColors,
                //sprite
                //spriteRenderer
                normalOffset                 = module.normalOffset,
                textureIndex                 = -1,
                textureClipChannel           = module.textureClipChannel,
                textureClipThreshold         = module.textureClipThreshold,
                textureColorAffectsParticles = module.textureColorAffectsParticles,
                textureAlphaAffectsParticles = module.textureAlphaAffectsParticles,
                textureBilinearFiltering     = module.textureBilinearFiltering,
                textureUVChannel             = module.textureUVChannel,
                position                 = module.position.ReverseZ().ToArray(),
                rotation                 = module.rotation.ReverseZ().ToArray(),
                scale                    = module.scale.ToArray(),
                alignToDirection         = module.alignToDirection,
                randomPositionAmount     = module.randomPositionAmount,
                sphericalDirectionAmount = module.sphericalDirectionAmount,
                randomDirectionAmount    = module.randomDirectionAmount,
            };

            if (module.texture != null)
            {
                vgoShapeModule.textureIndex = TextureIO.ExportTexture(gltf, gltf.buffers.Count - 1, module.texture, glTFTextureTypes.Unknown);
            }

            return(vgoShapeModule);
        }
Esempio n. 2
0
        /// <summary>
        /// Set ParticleSystem shape field value.
        /// </summary>
        /// <param name="particleSystem"></param>
        /// <param name="vgoModule"></param>
        /// <param name="textureItemList"></param>
        protected virtual void SetModuleValue(ParticleSystem particleSystem, VGO_PS_ShapeModule vgoModule, IList <TextureItem> textureItemList)
        {
            if (vgoModule == null)
            {
                return;
            }

            ShapeModule module = particleSystem.shape;

            module.enabled               = vgoModule.enabled;
            module.shapeType             = vgoModule.shapeType;
            module.angle                 = vgoModule.angle;
            module.radius                = vgoModule.radius;
            module.donutRadius           = vgoModule.donutRadius;
            module.radiusMode            = vgoModule.radiusMode;
            module.radiusSpread          = vgoModule.radiusSpread;
            module.radiusSpeed           = VgoParticleSystemMinMaxCurveConverter.CreateMinMaxCurve(vgoModule.radiusSpeed);
            module.radiusSpeedMultiplier = vgoModule.radiusSpeedMultiplier;
            module.radiusThickness       = vgoModule.radiusThickness;
            module.boxThickness          = ArrayConverter.ToVector3(vgoModule.boxThickness, reverseZ: true);
            module.arc                      = vgoModule.arc;
            module.arcMode                  = vgoModule.arcMode;
            module.arcSpread                = vgoModule.arcSpread;
            module.arcSpeed                 = VgoParticleSystemMinMaxCurveConverter.CreateMinMaxCurve(vgoModule.arcSpeed);
            module.arcSpeedMultiplier       = vgoModule.arcSpeedMultiplier;
            module.length                   = vgoModule.length;
            module.meshShapeType            = vgoModule.meshShapeType;
            module.meshSpawnMode            = vgoModule.meshSpawnMode;
            module.meshSpawnSpread          = vgoModule.meshSpawnSpread;
            module.meshSpawnSpeed           = VgoParticleSystemMinMaxCurveConverter.CreateMinMaxCurve(vgoModule.meshSpawnSpeed);
            module.meshSpawnSpeedMultiplier = vgoModule.meshSpawnSpeedMultiplier;
            //module.mesh;
            //module.meshRenderer;
            //module.skinnedMeshRenderer;
            module.useMeshMaterialIndex = vgoModule.useMeshMaterialIndex;
            module.meshMaterialIndex    = vgoModule.meshMaterialIndex;
            module.useMeshColors        = vgoModule.useMeshColors;
            //module.sprite;
            //module.spriteRenderer;
            module.normalOffset = vgoModule.normalOffset;
            if ((textureItemList != null) && (-1 < vgoModule.textureIndex) && (vgoModule.textureIndex < textureItemList.Count))
            {
                module.texture = textureItemList[vgoModule.textureIndex].Texture;
            }
            module.textureClipChannel           = vgoModule.textureClipChannel;
            module.textureClipThreshold         = vgoModule.textureClipThreshold;
            module.textureColorAffectsParticles = vgoModule.textureColorAffectsParticles;
            module.textureAlphaAffectsParticles = vgoModule.textureAlphaAffectsParticles;
            module.textureBilinearFiltering     = vgoModule.textureBilinearFiltering;
            module.textureUVChannel             = vgoModule.textureUVChannel;
            module.position                 = ArrayConverter.ToVector3(vgoModule.position, reverseZ: true);
            module.rotation                 = ArrayConverter.ToVector3(vgoModule.rotation, reverseZ: true);
            module.scale                    = ArrayConverter.ToVector3(vgoModule.scale);
            module.alignToDirection         = vgoModule.alignToDirection;
            module.randomPositionAmount     = vgoModule.randomPositionAmount;
            module.sphericalDirectionAmount = vgoModule.sphericalDirectionAmount;
            module.randomDirectionAmount    = vgoModule.randomDirectionAmount;
        }