Skip to content

Commit 54d92a6

Browse files
[Entities] Adjust Transform to check whether it was changed;
1 parent 0253c58 commit 54d92a6

File tree

2 files changed

+86
-12
lines changed

2 files changed

+86
-12
lines changed

Engine/Core/Entities/Transform.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,13 @@ public Vector3 Position
124124

125125
set
126126
{
127-
Changed = true;
128-
129127
var parentPosition = parent?.Position ?? Vector3.Zero;
130128

131-
position = value - parentPosition;
129+
var target = value - parentPosition;
130+
131+
Changed |= target != position;
132+
133+
position = target;
132134
}
133135
}
134136

@@ -141,7 +143,7 @@ public Vector3 LocalPosition
141143

142144
set
143145
{
144-
Changed = true;
146+
Changed |= value != position;
145147

146148
position = value;
147149
}
@@ -161,11 +163,13 @@ public Vector3 Scale
161163

162164
set
163165
{
164-
Changed = true;
165-
166166
var parentScale = parent?.Scale ?? Vector3.One;
167167

168-
scale = value / parentScale;
168+
var target = value / parentScale;
169+
170+
Changed |= target != scale;
171+
172+
scale = target;
169173
}
170174
}
171175

@@ -178,7 +182,7 @@ public Vector3 LocalScale
178182

179183
set
180184
{
181-
Changed = true;
185+
Changed |= value != scale;
182186

183187
scale = value;
184188
}
@@ -198,11 +202,13 @@ public Quaternion Rotation
198202

199203
set
200204
{
201-
Changed = true;
202-
203205
var parentRotation = parent?.Rotation ?? Quaternion.Identity;
204206

205-
rotation = Quaternion.Inverse(parentRotation) * value;
207+
var target = Quaternion.Inverse(parentRotation) * value;
208+
209+
Changed |= target != rotation;
210+
211+
rotation = target;
206212
}
207213
}
208214

@@ -215,7 +221,7 @@ public Quaternion LocalRotation
215221

216222
set
217223
{
218-
Changed = true;
224+
Changed |= value != rotation;
219225

220226
rotation = value;
221227
}

Engine/StapleCoreTests/TransformTests.cs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,74 @@ namespace CoreTests
55
{
66
internal class TransformTests
77
{
8+
[Test]
9+
public void TestChanged()
10+
{
11+
var transform = new Transform();
12+
13+
Assert.IsFalse(transform.Changed);
14+
15+
transform.LocalPosition = transform.LocalPosition;
16+
17+
Assert.IsFalse(transform.Changed);
18+
19+
transform.LocalRotation = transform.LocalRotation;
20+
21+
Assert.IsFalse(transform.Changed);
22+
23+
transform.LocalScale = transform.LocalScale;
24+
25+
Assert.IsFalse(transform.Changed);
26+
27+
transform.Position = transform.Position;
28+
29+
Assert.IsFalse(transform.Changed);
30+
31+
transform.Rotation = transform.Rotation;
32+
33+
Assert.IsFalse(transform.Changed);
34+
35+
transform.Scale = transform.Scale;
36+
37+
Assert.IsFalse(transform.Changed);
38+
39+
transform.LocalPosition = Vector3.One;
40+
41+
Assert.IsTrue(transform.Changed);
42+
43+
transform.Changed = false;
44+
45+
transform.LocalRotation = Quaternion.CreateFromYawPitchRoll(1, 2, 3);
46+
47+
Assert.IsTrue(transform.Changed);
48+
49+
transform.Changed = false;
50+
51+
transform.LocalScale = Vector3.Zero;
52+
53+
Assert.IsTrue(transform.Changed);
54+
55+
transform.Changed = false;
56+
57+
transform.Position = Vector3.Zero;
58+
59+
Assert.IsTrue(transform.Changed);
60+
61+
transform.Changed = false;
62+
63+
transform.Rotation = Quaternion.Identity;
64+
65+
Assert.IsTrue(transform.Changed);
66+
67+
transform.Changed = false;
68+
69+
transform.Scale = Vector3.One;
70+
71+
Assert.IsTrue(transform.Changed);
72+
73+
transform.Changed = false;
74+
}
75+
876
[Test]
977
public void TestLocalPosition()
1078
{

0 commit comments

Comments
 (0)