diff --git a/Assets/LDtkUnity/Editor/Builders/LDtkBuilderEntity.cs b/Assets/LDtkUnity/Editor/Builders/LDtkBuilderEntity.cs index d6c67717..83daecfc 100644 --- a/Assets/LDtkUnity/Editor/Builders/LDtkBuilderEntity.cs +++ b/Assets/LDtkUnity/Editor/Builders/LDtkBuilderEntity.cs @@ -13,6 +13,7 @@ internal sealed class LDtkBuilderEntity : LDtkBuilderLayer private LDtkComponentEntity _entityComponent; private LDtkFields _fieldsComponent; private LDtkIid _iidComponent; + private LDtkFieldsFactory _fieldsFactory; public LDtkBuilderEntity(LDtkProjectImporter project, Level level, LDtkComponentLayer layerComponent, LDtkSortingOrder sortingOrder, LDtkLinearLevelVector linearVector, WorldLayout layout, LDtkAssetProcessorActionCache assetProcess, LDtkJsonImporter importer) : base(project, level, layerComponent, sortingOrder, importer) @@ -89,9 +90,9 @@ private void AddEntityComponent() private void AddFieldData() { LDtkProfiler.BeginSample("SetEntityFieldsComponent"); - LDtkFieldsFactory fieldsFactory = new LDtkFieldsFactory(_entityObj, _entity.FieldInstances, Project, Importer); - fieldsFactory.SetEntityFieldsComponent(); - _fieldsComponent = fieldsFactory.FieldsComponent; + _fieldsFactory = new LDtkFieldsFactory(_entityObj, _entity.FieldInstances, Project, Importer); + _fieldsFactory.SetEntityFieldsComponent(); + _fieldsComponent = _fieldsFactory.FieldsComponent; LDtkProfiler.EndSample(); LDtkProfiler.BeginSample("InterfaceEvents"); @@ -128,6 +129,11 @@ private void ScaleEntity() newScale.x *= _entityComponent.ScaleFactor.x; newScale.y *= _entityComponent.ScaleFactor.y; _entityObj.transform.localScale = newScale; + + if (_fieldsFactory != null) + { + _fieldsFactory.ApplyPointScale(_entityComponent.ScaleFactor); + } } private void PositionEntity() @@ -168,4 +174,4 @@ public PointParseData GetParsedPointData() }; } } -} \ No newline at end of file +} diff --git a/Assets/LDtkUnity/Editor/ParsedField/LDtkFieldsFactory.cs b/Assets/LDtkUnity/Editor/ParsedField/LDtkFieldsFactory.cs index f4a7903d..1c1bd468 100644 --- a/Assets/LDtkUnity/Editor/ParsedField/LDtkFieldsFactory.cs +++ b/Assets/LDtkUnity/Editor/ParsedField/LDtkFieldsFactory.cs @@ -1,4 +1,5 @@ -using UnityEngine; +using System.Collections.Generic; +using UnityEngine; namespace LDtkUnity.Editor { @@ -11,6 +12,7 @@ internal sealed class LDtkFieldsFactory private readonly FieldInstance[] _fieldInstances; private readonly LDtkProjectImporter _project; private readonly LDtkJsonImporter _importer; + private readonly List _pointTransforms = new List(); public LDtkFields FieldsComponent { get; private set; } @@ -61,6 +63,8 @@ private LDtkField[] GetFields() { LDtkFieldElement element = field._data[ii]; Transform newPoint = new GameObject($"{_fieldInstances[i].Identifier}_{ii}").transform; + _pointTransforms.Add(newPoint); + element.SetPointLocalTransform(newPoint); newPoint.SetParent(_instance.transform, true); } @@ -69,5 +73,16 @@ private LDtkField[] GetFields() } return fields; } + + public void ApplyPointScale(Vector2 scale) + { + foreach (Transform point in _pointTransforms) + { + Vector3 local = point.localPosition; + local.x /= scale.x; + local.y /= scale.y; + point.localPosition = local; + } + } } -} \ No newline at end of file +}