Skip to content

Commit 2b90ca0

Browse files
[Baker] Fixed LayerMask Scene serialization;
[Editor] Added support for Assets Only build; [Rendering] Readjusted render system priority and disabled frustum culling temporarily; [Rendering] Fixes and improvements to Skinned Animation Controller;
1 parent 82a1c63 commit 2b90ca0

File tree

8 files changed

+133
-76
lines changed

8 files changed

+133
-76
lines changed

Engine/Core/Rendering/Animation/SkinnedAnimationController.cs

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ internal class Parameter
1919

2020
private Dictionary<string, Parameter> parameters = new();
2121

22-
public SkinnedAnimationController(SkinnedMeshAnimator animator, SkinnedAnimationStateMachine stateMachine)
22+
public SkinnedAnimationController(SkinnedMeshAnimator animator)
2323
{
2424
this.animator = animator;
25-
this.stateMachine = stateMachine;
2625

27-
var startState = this.stateMachine.states.FirstOrDefault()?.name;
26+
stateMachine = animator.stateMachine;
27+
28+
var startState = stateMachine.states.FirstOrDefault()?.name;
2829

2930
if(startState != null)
3031
{
@@ -78,6 +79,18 @@ public void SetFloatParameter(string name, float value)
7879
CheckConditions();
7980
}
8081

82+
private bool AnimationFinished()
83+
{
84+
if(currentState == null ||
85+
animator.animation != currentState.animation ||
86+
animator.evaluator == null)
87+
{
88+
return false;
89+
}
90+
91+
return animator.evaluator.FinishedPlaying;
92+
}
93+
8194
private bool CheckParameter(SkinnedAnimationStateMachine.AnimationConditionParameter parameter)
8295
{
8396
if (parameter.name == null || parameter.name.Length == 0)
@@ -235,34 +248,42 @@ private void CheckConditions()
235248
{
236249
var shouldTrigger = false;
237250

238-
if(connection.any)
251+
if(connection.onFinish)
239252
{
240-
foreach(var parameter in connection.parameters)
253+
shouldTrigger = AnimationFinished();
254+
}
255+
256+
if (shouldTrigger == false && connection.parameters.Count > 0)
257+
{
258+
if (connection.any)
241259
{
242-
if(CheckParameter(parameter))
260+
foreach (var parameter in connection.parameters)
243261
{
244-
shouldTrigger = true;
262+
if (CheckParameter(parameter))
263+
{
264+
shouldTrigger = true;
245265

246-
break;
266+
break;
267+
}
247268
}
248269
}
249-
}
250-
else
251-
{
252-
shouldTrigger = true;
253-
254-
foreach(var parameter in connection.parameters)
270+
else
255271
{
256-
if(CheckParameter(parameter) == false)
272+
shouldTrigger = true;
273+
274+
foreach (var parameter in connection.parameters)
257275
{
258-
shouldTrigger = false;
276+
if (CheckParameter(parameter) == false)
277+
{
278+
shouldTrigger = false;
259279

260-
break;
280+
break;
281+
}
261282
}
262283
}
263284
}
264285

265-
if(shouldTrigger)
286+
if (shouldTrigger)
266287
{
267288
SetState(connection.name);
268289

Engine/Core/Rendering/Animation/SkinnedMeshAnimationEvaluator.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,22 @@ internal class SkinnedMeshAnimationEvaluator
88
public MeshAsset.Animation animation;
99
public MeshAsset meshAsset;
1010
public SkinnedMeshAnimator animator;
11-
12-
public Dictionary<int, int> lastPositionIndex = new();
13-
public Dictionary<int, int> lastRotationIndex = new();
14-
public Dictionary<int, int> lastScaleIndex = new();
15-
public float lastTime;
1611
public MeshAsset.Node rootNode;
1712

13+
private Dictionary<int, int> lastPositionIndex = new();
14+
private Dictionary<int, int> lastRotationIndex = new();
15+
private Dictionary<int, int> lastScaleIndex = new();
16+
private float lastTime;
17+
18+
public bool FinishedPlaying
19+
{
20+
get
21+
{
22+
return animator.repeat == false &&
23+
animator.playTime * animation.ticksPerSecond >= animation.duration;
24+
}
25+
}
26+
1827
public SkinnedMeshAnimationEvaluator(MeshAsset asset, MeshAsset.Animation animation, MeshAsset.Node rootNode, SkinnedMeshAnimator animator)
1928
{
2029
meshAsset = asset;

Engine/Core/Rendering/Animation/SkinnedMeshAnimatorSystem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public void Process(Entity entity, Transform transform, IComponent relatedCompon
7777
{
7878
if (animator.stateMachine != null && animator.animationController == null)
7979
{
80-
animator.animationController = new(animator, animator.stateMachine);
80+
animator.animationController = new(animator);
8181
}
8282
}
8383

Engine/Core/Rendering/RenderSystem.cs

Lines changed: 5 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ internal class DrawBucket
3535

3636
public SubsystemType type { get; } = SubsystemType.Update;
3737

38+
internal static byte Priority = 1;
39+
3840
public static bool useDrawcallInterpolator = false;
3941

4042
/// <summary>
@@ -54,8 +56,6 @@ internal class DrawBucket
5456

5557
private readonly Transform stagingTransform = new();
5658

57-
internal static byte Priority = 1;
58-
5959
/// <summary>
6060
/// Calculates the blending function for blending flags
6161
/// </summary>
@@ -141,9 +141,9 @@ public static bgfx.ResetFlags ResetFlags(VideoFlags videoFlags)
141141
public void Startup()
142142
{
143143
renderSystems.Add(new SpriteRenderSystem());
144-
renderSystems.Add(new MeshRenderSystem());
145144
renderSystems.Add(new SkinnedMeshAnimatorSystem());
146145
renderSystems.Add(new SkinnedMeshRenderSystem());
146+
renderSystems.Add(new MeshRenderSystem());
147147
renderSystems.Add(new TextRenderSystem());
148148

149149
Time.OnAccumulatorFinished += () =>
@@ -250,7 +250,7 @@ private void UpdateStandard()
250250
if (related is Renderable renderable &&
251251
renderable.enabled)
252252
{
253-
renderable.isVisible = frustumCuller.AABBTest(renderable.bounds) != FrustumAABBResult.Invisible;
253+
renderable.isVisible = frustumCuller.AABBTest(renderable.bounds) != FrustumAABBResult.Invisible || true; //TEMP: Figure out what's wrong with the frustum culler
254254

255255
if (renderable.isVisible && renderable.forceRenderingOff == false)
256256
{
@@ -270,37 +270,6 @@ private void UpdateStandard()
270270
system.Submit();
271271
}
272272

273-
viewID++;
274-
}
275-
}
276-
277-
if (needsDrawCalls)
278-
{
279-
viewID = 1;
280-
281-
lock (lockObject)
282-
{
283-
(currentDrawBucket, previousDrawBucket) = (previousDrawBucket, currentDrawBucket);
284-
285-
currentDrawBucket.drawCalls.Clear();
286-
}
287-
288-
foreach (var c in cameras)
289-
{
290-
var camera = c.camera;
291-
var cameraTransform = c.transform;
292-
293-
unsafe
294-
{
295-
var projection = Camera.Projection(c.entity, c.camera);
296-
var view = cameraTransform.Matrix;
297-
298-
Matrix4x4.Invert(view, out view);
299-
300-
frustumCuller.Update(view, projection);
301-
}
302-
303-
304273
viewID++;
305274
}
306275
}
@@ -460,7 +429,7 @@ private void UpdateAccumulator()
460429
if (related is Renderable renderable &&
461430
renderable.enabled)
462431
{
463-
renderable.isVisible = frustumCuller.AABBTest(renderable.bounds) != FrustumAABBResult.Invisible;
432+
renderable.isVisible = frustumCuller.AABBTest(renderable.bounds) != FrustumAABBResult.Invisible || true; //TEMP: Figure out what's wrong with the frustum culler
464433

465434
if (renderable.isVisible && renderable.forceRenderingOff == false)
466435
{

Engine/Core/Serialization/Scene/SceneSerialization.cs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -279,15 +279,27 @@ public static void DeserializeField(FieldInfo field, ref IComponent componentIns
279279

280280
case SceneComponentParameterType.Int:
281281

282-
try
282+
if (field.FieldType == typeof(LayerMask))
283283
{
284-
var value = System.Convert.ChangeType(parameter.intValue, field.FieldType);
284+
var mask = new LayerMask()
285+
{
286+
value = (uint)parameter.intValue,
287+
};
285288

286-
field.SetValue(componentInstance, value);
289+
field.SetValue(componentInstance, mask);
287290
}
288-
catch (Exception e)
291+
else
289292
{
290-
return;
293+
try
294+
{
295+
var value = System.Convert.ChangeType(parameter.intValue, field.FieldType);
296+
297+
field.SetValue(componentInstance, value);
298+
}
299+
catch (Exception e)
300+
{
301+
return;
302+
}
291303
}
292304

293305
break;
@@ -381,15 +393,6 @@ public static void DeserializeField(FieldInfo field, ref IComponent componentIns
381393
field.SetValue(componentInstance, value);
382394
}
383395
}
384-
else if (field.FieldType == typeof(LayerMask))
385-
{
386-
var mask = new LayerMask()
387-
{
388-
value = (uint)parameter.intValue,
389-
};
390-
391-
field.SetValue(componentInstance, mask);
392-
}
393396

394397
break;
395398
}

Engine/Editor/StapleEditor+Build.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ internal partial class StapleEditor
1414
/// <param name="outPath">The output path</param>
1515
/// <param name="debug">Whether to make a debug build</param>
1616
/// <param name="nativeAOT">Whether to build natively</param>
17-
public void BuildPlayer(PlayerBackend backend, string outPath, bool debug, bool nativeAOT)
17+
/// <param name="assetsOnly">Whether to just pack and copy assets</param>
18+
public void BuildPlayer(PlayerBackend backend, string outPath, bool debug, bool nativeAOT, bool assetsOnly)
1819
{
1920
lock (backgroundLock)
2021
{
@@ -182,6 +183,11 @@ public void BuildPlayer(PlayerBackend backend, string outPath, bool debug, bool
182183
return;
183184
}
184185

186+
if(assetsOnly)
187+
{
188+
return;
189+
}
190+
185191
if(backend.publish)
186192
{
187193
args = $" publish -r {backend.platformRuntime} \"{projectPath}\" -c {configurationName} -o \"{outPath}\" --self-contained -p:UseAppHost=true";

Engine/Editor/Windows/BuildWindow.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,38 @@ public override void OnGUI()
164164

165165
StapleEditor.instance.StartBackgroundTask((ref float progressFraction) =>
166166
{
167-
StapleEditor.instance.BuildPlayer(backend, path, StapleEditor.instance.buildPlayerDebug, StapleEditor.instance.buildPlayerNativeAOT);
167+
StapleEditor.instance.BuildPlayer(backend, path, StapleEditor.instance.buildPlayerDebug, StapleEditor.instance.buildPlayerNativeAOT, false);
168+
169+
return true;
170+
});
171+
}
172+
else
173+
{
174+
Log.Error($"Failed to open file dialog: {Nfd.GetError()}");
175+
}
176+
}
177+
178+
EditorGUI.SameLine();
179+
180+
if (EditorGUI.Button("Build (Assets Only)"))
181+
{
182+
var result = Nfd.PickFolder(Path.GetFullPath(StapleEditor.instance.lastPickedBuildDirectories.TryGetValue(backend.platform, out var p) ? p : basePath),
183+
out var path);
184+
185+
if (result == Nfd.NfdResult.NFD_OKAY)
186+
{
187+
StapleEditor.instance.lastPickedBuildDirectories.AddOrSetKey(backend.platform, path);
188+
189+
StapleEditor.instance.UpdateLastSession();
190+
191+
StapleEditor.instance.showingProgress = true;
192+
StapleEditor.instance.progressFraction = 0;
193+
194+
ImGui.OpenPopup("ShowingProgress");
195+
196+
StapleEditor.instance.StartBackgroundTask((ref float progressFraction) =>
197+
{
198+
StapleEditor.instance.BuildPlayer(backend, path, StapleEditor.instance.buildPlayerDebug, StapleEditor.instance.buildPlayerNativeAOT, true);
168199

169200
return true;
170201
});

Tools/Baker/Baker+Scene.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,24 @@ public static void ConvertComponentDataIntoParameters(SceneComponent component)
289289
stringValue = (string)pair.Value,
290290
});
291291
}
292+
else if (pair.Value.GetType() == typeof(int))
293+
{
294+
component.parameters.Add(new SceneComponentParameter()
295+
{
296+
name = pair.Key,
297+
type = SceneComponentParameterType.Int,
298+
intValue = (int)pair.Value,
299+
});
300+
}
301+
else if (pair.Value.GetType() == typeof(float))
302+
{
303+
component.parameters.Add(new SceneComponentParameter()
304+
{
305+
name = pair.Key,
306+
type = SceneComponentParameterType.Float,
307+
floatValue = (float)pair.Value,
308+
});
309+
}
292310
else if (pair.Value.GetType() == typeof(long))
293311
{
294312
component.parameters.Add(new SceneComponentParameter()

0 commit comments

Comments
 (0)