示例#1
0
        public override YAMLNode ExportYAML(IExportContainer container)
        {
            YAMLMappingNode node = (YAMLMappingNode)base.ExportYAML(container);

            node.InsertSerializedVersion(ToSerializedVersion(container.ExportVersion));
            node.Add(TypeName, (int)GetType(container.Version));
            node.Add(AngleName, Angle);
            node.Add(LengthName, GetExportLength(container.Version));
            node.Add(BoxThicknessName, BoxThickness.ExportYAML(container));
            node.Add(RadiusThicknessName, GetExportRadiusThickness(container.Version));
            node.Add(DonutRadiusName, GetExportDonutRadius(container.Version));
            node.Add(PositionName, Position.ExportYAML(container));
            node.Add(RotationName, Rotation.ExportYAML(container));
            node.Add(ScaleName, Scale.ExportYAML(container));
            node.Add(PlacementModeName, (int)PlacementMode);
            node.Add(MeshMaterialIndexName, MeshMaterialIndex);
            node.Add(MeshNormalOffsetName, MeshNormalOffset);
            if (HasMeshSpawn(container.Version))
            {
                node.Add(MeshSpawnName, MeshSpawn.ExportYAML(container));
            }
            node.Add(MeshName, Mesh.ExportYAML(container));
            node.Add(MeshRendererName, MeshRenderer.ExportYAML(container));
            node.Add(SkinnedMeshRendererName, SkinnedMeshRenderer.ExportYAML(container));
            node.Add(UseMeshMaterialIndexName, UseMeshMaterialIndex);
            node.Add(UseMeshColorsName, GetExportUseMeshColors(container.Version));
            node.Add(AlignToDirectionName, AlignToDirection);
            node.Add(RandomDirectionAmountName, RandomDirectionAmount);
            node.Add(SphericalDirectionAmountName, SphericalDirectionAmount);
            node.Add(RandomPositionAmountName, RandomPositionAmount);
            node.Add(RadiusName, Radius.ExportYAML(container));
            node.Add(ArcName, GetArc(container.Version).ExportYAML(container));
            return(node);
        }
示例#2
0
        public override void Read(AssetReader reader)
        {
            base.Read(reader);

            Type = (ParticleSystemShapeType)reader.ReadInt32();
            if (HasRadiusSingle(reader.Version))
            {
                float radius = reader.ReadSingle();
                Radius = new MultiModeParameter(radius);
            }
            Angle = reader.ReadSingle();
            if (HasLength(reader.Version))
            {
                Length = reader.ReadSingle();
            }
            if (HasBoxAxes(reader.Version))
            {
                float boxX = reader.ReadSingle();
                float boxY = reader.ReadSingle();
                float boxZ = reader.ReadSingle();
                Scale = Type.IsBoxAny() ? new Vector3f(boxX, boxY, boxZ) : Vector3f.One;
            }
            if (HasArcSingle(reader.Version))
            {
                float arc = reader.ReadSingle();
                Arc = new MultiModeParameter(arc);
            }
            if (HasRadius(reader.Version))
            {
                if (HasRadiusFirst(reader.Version))
                {
                    Radius.Read(reader);
                    Arc.Read(reader);
                }
            }
            if (HasBoxThickness(reader.Version))
            {
                BoxThickness.Read(reader);
                RadiusThickness = reader.ReadSingle();
                DonutRadius     = reader.ReadSingle();
                Position.Read(reader);
                Rotation.Read(reader);
                Scale.Read(reader);
            }
            PlacementMode = (PlacementMode)reader.ReadInt32();
            if (HasMeshMaterialIndex(reader.Version))
            {
                if (HasMeshMaterialIndexFirst(reader.Version))
                {
                    MeshMaterialIndex = reader.ReadInt32();
                    MeshNormalOffset  = reader.ReadSingle();
                }
            }
            if (HasMeshSpawn(reader.Version))
            {
                MeshSpawn.Read(reader, false);
            }
            Mesh.Read(reader);
            if (HasMeshRenderer(reader.Version))
            {
                MeshRenderer.Read(reader);
                SkinnedMeshRenderer.Read(reader);
            }
            if (HasSprite(reader.Version))
            {
                Sprite.Read(reader);
                SpriteRenderer.Read(reader);
            }
            if (HasMeshMaterialIndex(reader.Version))
            {
                if (!HasMeshMaterialIndexFirst(reader.Version))
                {
                    MeshMaterialIndex = reader.ReadInt32();
                    MeshNormalOffset  = reader.ReadSingle();
                }
            }
            if (HasMeshScale(reader.Version))
            {
                float meshScale = reader.ReadSingle();
                Scale = new Vector3f(meshScale, meshScale, meshScale);
            }
            if (HasUseMeshMaterialIndex(reader.Version))
            {
                UseMeshMaterialIndex = reader.ReadBoolean();
                UseMeshColors        = reader.ReadBoolean();
            }
            if (HasAlignToDirection(reader.Version))
            {
                AlignToDirection = reader.ReadBoolean();
            }
            if (HasRandomDirection(reader.Version))
            {
                bool randomDirection = reader.ReadBoolean();
                RandomDirectionAmount = randomDirection ? 1.0f : 0.0f;
            }
            reader.AlignStream();

            if (HasTexture(reader.Version))
            {
                Texture.Read(reader);
                TextureClipChannel           = reader.ReadInt32();
                TextureClipThreshold         = reader.ReadSingle();
                TextureUVChannel             = reader.ReadInt32();
                TextureColorAffectsParticles = reader.ReadBoolean();
                TextureAlphaAffectsParticles = reader.ReadBoolean();
                TextureBilinearFiltering     = reader.ReadBoolean();
                reader.AlignStream();
            }

            if (HasRandomDirectionAmount(reader.Version))
            {
                RandomDirectionAmount    = reader.ReadSingle();
                SphericalDirectionAmount = reader.ReadSingle();
            }
            if (HasRandomPositionAmount(reader.Version))
            {
                RandomPositionAmount = reader.ReadSingle();
            }
            if (HasRadius(reader.Version))
            {
                if (!HasRadiusFirst(reader.Version))
                {
                    Radius.Read(reader);
                    Arc.Read(reader);
                }
            }
        }