public override void Read(AssetReader reader) { base.Read(reader); Rect.Read(reader); Offset.Read(reader); if (IsReadBorder(reader.Version)) { Border.Read(reader); } PixelsToUnits = reader.ReadSingle(); if (IsReadPivot(reader.Version)) { Pivot.Read(reader); } Extrude = reader.ReadUInt32(); if (IsReadPolygon(reader.Version)) { IsPolygon = reader.ReadBoolean(); reader.AlignStream(AlignType.Align4); } if (IsReadRendererData(reader.Version)) { RenderDataKey = reader.ReadTupleTLong <EngineGUID>(); m_atlasTags = reader.ReadStringArray(); SpriteAtlas.Read(reader); } RD.Read(reader); reader.AlignStream(AlignType.Align4); if (IsReadPhysicsShape(reader.Version)) { int count = reader.ReadInt32(); m_physicsShape = new Vector2f[count][]; for (int i = 0; i < count; i++) { m_physicsShape[i] = reader.ReadArray <Vector2f>(); } } if (IsReadBones(reader.Version)) { m_bones = reader.ReadArray <SpriteBone>(); } }
public override void Read(AssetStream stream) { base.Read(stream); Rect.Read(stream); Offset.Read(stream); if (IsReadBorder(stream.Version)) { Border.Read(stream); } PixelsToUnits = stream.ReadSingle(); if (IsReadPivot(stream.Version)) { Pivot.Read(stream); } Extrude = stream.ReadUInt32(); if (IsReadPolygon(stream.Version)) { IsPolygon = stream.ReadBoolean(); stream.AlignStream(AlignType.Align4); } if (IsReadRendererData(stream.Version)) { RenderDataKey = stream.ReadTupleTLong <UtinyGUID>(); m_atlasTags = stream.ReadStringArray(); SpriteAtlas.Read(stream); } RD.Read(stream); stream.AlignStream(AlignType.Align4); if (IsReadPhysicsShape(stream.Version)) { int count = stream.ReadInt32(); m_physicsShape = new Vector2f[count][]; for (int i = 0; i < count; i++) { m_physicsShape[i] = stream.ReadArray <Vector2f>(); } } }
public void GetExportPosition(out Rectf rect, out Vector2f pivot, out Vector4f border) { SpriteAtlas atlas = null; if (IsReadRendererData(File.Version)) { atlas = SpriteAtlas.FindAsset(File); } Vector2f rectOffset; if (atlas == null) { Vector2f textureOffset = RD.TextureRect.Position; Vector2f textureSize = RD.TextureRect.Size; rectOffset = RD.TextureRectOffset; // should be equal to RD.TextureRect.Position - Rect.Position rect = new Rectf(textureOffset, textureSize); } else { SpriteAtlasData atlasData = atlas.RenderDataMap[RenderDataKey]; Vector2f textureOffset = atlasData.TextureRect.Position; Vector2f textureSize = atlasData.TextureRect.Size; rectOffset = atlasData.TextureRectOffset; rect = new Rectf(textureOffset, textureSize); } Vector2f sizeDif = Rect.Size - rect.Size; Vector2f pivotShiftSize = new Vector2f(Pivot.X * sizeDif.X, Pivot.Y * sizeDif.Y); Vector2f relPivotShiftPos = new Vector2f(rectOffset.X / rect.Size.X, rectOffset.Y / rect.Size.Y); Vector2f relPivotShiftSize = new Vector2f(pivotShiftSize.X / rect.Size.X, pivotShiftSize.Y / rect.Size.Y); pivot = Pivot - relPivotShiftPos + relPivotShiftSize; float borderL = Border.X == 0.0f ? 0.0f : Border.X - rectOffset.X; float borderB = Border.Y == 0.0f ? 0.0f : Border.Y - rectOffset.Y; float borderR = Border.Z == 0.0f ? 0.0f : Border.Z + rectOffset.X - sizeDif.X; float borderT = Border.W == 0.0f ? 0.0f : Border.W + rectOffset.Y - sizeDif.Y; border = new Vector4f(borderL, borderB, borderR, borderT); }