Netcode Bootstrap
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
using Unity.Entities;
|
||||
using UnityEngine;
|
||||
#if RUKHANKA_WITH_NETCODE
|
||||
using Unity.NetCode;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka
|
||||
{
|
||||
[CreateAfter(typeof(RukhankaAnimationSystemGroup))]
|
||||
#if RUKHANKA_WITH_NETCODE
|
||||
[CreateAfter(typeof(PredictedSimulationSystemGroup))]
|
||||
#endif
|
||||
public partial class RukhankaSystemsBootstrap: SystemBase
|
||||
{
|
||||
protected override void OnCreate()
|
||||
{
|
||||
#if RUKHANKA_DEBUG_INFO
|
||||
Debug.LogWarning("RUKHANKA_DEBUG_INFO is defined. Performance may be reduced. Do not forget remove it in release builds.\nFor debug and logging functionality configuration please see documentation");
|
||||
#endif
|
||||
|
||||
#if !UNITY_BURST_EXPERIMENTAL_ATOMIC_INTRINSICS
|
||||
Debug.LogError($"'UNITY_BURST_EXPERIMENTAL_ATOMIC_INTRINSICS' script symbol is not defined. It is required for proper functioning of Rukhanka. Please add it by hand, or just restart editor and Rukhanka's bootstrap will add it automatically");
|
||||
return;
|
||||
#endif
|
||||
|
||||
#if RUKHANKA_WITH_NETCODE
|
||||
bool isClient = World.IsClient();
|
||||
bool isServer = World.IsServer();
|
||||
#else
|
||||
bool isClient = IsClientOrLocalSimulationWorld(World);
|
||||
#endif
|
||||
|
||||
var sysGroup = World.GetOrCreateSystemManaged<RukhankaAnimationSystemGroup>();
|
||||
var acs = World.CreateSystem<AnimatorControllerSystem<AnimatorControllerQuery>>();
|
||||
var facs = World.CreateSystem<FillAnimationsFromControllerSystem>();
|
||||
var aees = World.CreateSystem<AnimationEventEmitSystem>();
|
||||
var aps = World.CreateSystem<AnimationProcessSystem>();
|
||||
var aas = World.CreateSystem<AnimationApplicationSystem>();
|
||||
var cs = World.CreateSystem<AnimationCullingSystem>();
|
||||
var ikGroup = World.GetOrCreateSystemManaged<RukhankaAnimationInjectionSystemGroup>();
|
||||
var actxus = World.GetOrCreateSystemManaged<AnimationCullingContextUpdateSystem>();
|
||||
#if UNITY_EDITOR
|
||||
var wbmrsg = World.GetOrCreateSystemManaged<WaybackMachineRecordSystemGroup>();
|
||||
var wbmrs = World.GetOrCreateSystem<WaybackMachineRecordSystem>();
|
||||
var wbmps = World.GetOrCreateSystem<WaybackMachinePlaybackSystem>();
|
||||
wbmrsg.AddSystemToUpdateList(wbmrs);
|
||||
#endif
|
||||
|
||||
// Add client animator controller systems
|
||||
if (isClient)
|
||||
{
|
||||
|
||||
sysGroup.AddSystemToUpdateList(acs);
|
||||
sysGroup.AddSystemToUpdateList(facs);
|
||||
sysGroup.AddSystemToUpdateList(actxus);
|
||||
sysGroup.AddSystemToUpdateList(cs);
|
||||
sysGroup.AddSystemToUpdateList(aees);
|
||||
#if UNITY_EDITOR
|
||||
sysGroup.AddSystemToUpdateList(wbmrsg);
|
||||
sysGroup.AddSystemToUpdateList(wbmps);
|
||||
#endif
|
||||
sysGroup.AddSystemToUpdateList(aps);
|
||||
sysGroup.AddSystemToUpdateList(ikGroup);
|
||||
sysGroup.AddSystemToUpdateList(aas);
|
||||
|
||||
#if RUKHANKA_WITH_NETCODE
|
||||
var acsForPrediction = World.CreateSystem<AnimatorControllerSystem<PredictedAnimatorControllerQuery>>();
|
||||
var sysGroupPrediction = World.GetOrCreateSystemManaged<RukhankaPredictedAnimationSystemGroup>();
|
||||
sysGroupPrediction.AddSystemToUpdateList(acsForPrediction);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Server systems only for Netcode enabled version
|
||||
#if RUKHANKA_WITH_NETCODE
|
||||
if (isServer)
|
||||
{
|
||||
sysGroup.AddSystemToUpdateList(acs);
|
||||
sysGroup.AddSystemToUpdateList(facs);
|
||||
sysGroup.AddSystemToUpdateList(aees);
|
||||
sysGroup.AddSystemToUpdateList(aps);
|
||||
sysGroup.AddSystemToUpdateList(ikGroup);
|
||||
sysGroup.AddSystemToUpdateList(aas);
|
||||
sysGroup.AddSystemToUpdateList(actxus);
|
||||
sysGroup.AddSystemToUpdateList(cs);
|
||||
|
||||
var acsForPrediction = World.CreateSystem<AnimatorControllerSystem<PredictedAnimatorControllerQuery>>();
|
||||
var sysGroupPrediction = World.GetOrCreateSystemManaged<RukhankaPredictedAnimationSystemGroup>();
|
||||
sysGroupPrediction.AddSystemToUpdateList(acsForPrediction);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Remove bootstrap system from world
|
||||
this.Enabled = false;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public static bool IsClientOrLocalSimulationWorld(World w)
|
||||
{
|
||||
var rv =
|
||||
(w.Flags & WorldFlags.GameClient) == WorldFlags.GameClient ||
|
||||
(w.Flags & WorldFlags.Game) == WorldFlags.Game;
|
||||
return rv;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
protected override void OnUpdate() {}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user