Skip to content

Commit 24d6361

Browse files
committed
Add simple butch update
1 parent 86f7d61 commit 24d6361

10 files changed

+131
-2
lines changed

GameTemplate/Assets/GeneralGameAssembly.asmdef

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616
"GUID:4307f53044263cf4b835bd812fc161a4",
1717
"GUID:d60799ab2a985554ea1a39cd38695018",
1818
"GUID:89dcb66bc38a0d640922fdcb803cf4bf",
19-
"GUID:4b4794e38edc74eb8986ad993a5ad5c8",
2019
"GUID:4233b5049d96f5846991895f3845e9d3",
2120
"GUID:38fe782b688022a4a98328b1d5900bdb",
2221
"GUID:46cc2325ddc967847a6e9ca3f6ebd47f",
2322
"GUID:7793e5cd8d2e94e21b56de41db6606bb",
2423
"GUID:cf414061cae3a954baf92763590f3127",
2524
"GUID:735c8f008d0ad4caa9cdc4306f1c3042",
2625
"GUID:912e75b90945e408ba68bdb73fd29eb9",
27-
"GUID:696a0953692949b40bec8730e64e1fdd"
26+
"GUID:696a0953692949b40bec8730e64e1fdd",
27+
"GUID:9075cc9e1ab791048a99eff30736064f"
2828
],
2929
"includePlatforms": [],
3030
"excludePlatforms": [],

GameTemplate/Assets/Plugins/BatchUpdate.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "BatchUpdate",
3+
"rootNamespace": "",
4+
"references": [
5+
"GUID:89dcb66bc38a0d640922fdcb803cf4bf"
6+
],
7+
"includePlatforms": [],
8+
"excludePlatforms": [],
9+
"allowUnsafeCode": false,
10+
"overrideReferences": false,
11+
"precompiledReferences": [],
12+
"autoReferenced": true,
13+
"defineConstraints": [],
14+
"versionDefines": [],
15+
"noEngineReferences": false
16+
}

GameTemplate/Assets/Plugins/BatchUpdate/BatchUpdate.asmdef.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
5+
public interface IBatchUpdate {
6+
void BatchUpdate();
7+
}

GameTemplate/Assets/Plugins/BatchUpdate/IBatchUpdate.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
5+
public abstract class MonoBehaviourBatchUpdate : MonoBehaviour, IBatchUpdate
6+
{
7+
public abstract void BatchUpdate();
8+
9+
protected virtual void OnEnable() {
10+
UpdateManager.RegisterSlicedUpdate(this, UpdateManager.UpdateMode.Always);
11+
}
12+
13+
protected virtual void OnDisable() {
14+
UpdateManager.DeregisterSlicedUpdate(this);
15+
}
16+
}

GameTemplate/Assets/Plugins/BatchUpdate/MonoBehavourBatchUpdate.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
5+
public static class UpdateManager {
6+
public enum UpdateMode { BucketA, BucketB, Always }
7+
8+
static readonly HashSet<IBatchUpdate> _slicedUpdateBehavioursBucketA = new HashSet<IBatchUpdate>();
9+
static readonly HashSet<IBatchUpdate> _slicedUpdateBehavioursBucketB = new HashSet<IBatchUpdate>();
10+
static bool _isCurrentBucketA;
11+
12+
[RuntimeInitializeOnLoadMethod]
13+
private static void Initialize() {
14+
PlayerLoopInterface.InsertSystemBefore(typeof(UpdateManager), UpdateSystem, typeof(UnityEngine.PlayerLoop.Update.ScriptRunBehaviourUpdate));
15+
}
16+
17+
private static void UpdateSystem() {
18+
var targetUpdateFunctions = _isCurrentBucketA ? _slicedUpdateBehavioursBucketA : _slicedUpdateBehavioursBucketB;
19+
foreach (var slicedUpdateBehaviour in targetUpdateFunctions) {
20+
slicedUpdateBehaviour.BatchUpdate();
21+
}
22+
_isCurrentBucketA = !_isCurrentBucketA;
23+
}
24+
25+
#region Register
26+
public static void RegisterSlicedUpdate(IBatchUpdate slicedUpdateBehaviour, UpdateMode updateMode) {
27+
if (updateMode == UpdateMode.Always) {
28+
_slicedUpdateBehavioursBucketA.Add(slicedUpdateBehaviour);
29+
_slicedUpdateBehavioursBucketB.Add(slicedUpdateBehaviour);
30+
}
31+
else {
32+
var targetUpdateFunctions = updateMode == UpdateMode.BucketA ? _slicedUpdateBehavioursBucketA : _slicedUpdateBehavioursBucketB;
33+
targetUpdateFunctions.Add(slicedUpdateBehaviour);
34+
}
35+
}
36+
37+
public static void DeregisterSlicedUpdate(IBatchUpdate slicedUpdateBehaviour) {
38+
_slicedUpdateBehavioursBucketA.Remove(slicedUpdateBehaviour);
39+
_slicedUpdateBehavioursBucketB.Remove(slicedUpdateBehaviour);
40+
}
41+
#endregion
42+
}

GameTemplate/Assets/Plugins/BatchUpdate/UpdateManager.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)