static bool AppendSystemToPlayerLoopListImpl(ComponentSystemBase system, ref PlayerLoopSystem playerLoop, Type playerLoopSystemType) { if (playerLoop.type == playerLoopSystemType) { var del = new DummyDelegateWrapper(system); int oldListLength = (playerLoop.subSystemList != null) ? playerLoop.subSystemList.Length : 0; var newSubsystemList = new PlayerLoopSystem[oldListLength + 1]; for (var i = 0; i < oldListLength; ++i) { newSubsystemList[i] = playerLoop.subSystemList[i]; } newSubsystemList[oldListLength].type = system.GetType(); newSubsystemList[oldListLength].updateDelegate = del.TriggerUpdate; playerLoop.subSystemList = newSubsystemList; return(true); } if (playerLoop.subSystemList != null) { for (int i = 0; i < playerLoop.subSystemList.Length; ++i) { if (AppendSystemToPlayerLoopListImpl(system, ref playerLoop.subSystemList[i], playerLoopSystemType)) { return(true); } } } return(false); }
private static void InsertManagerIntoSubsystemList <T>(PlayerLoopSystem[] subsystemList, int insertIndex, T mgr) where T : ComponentSystemBase { var del = new DummyDelegateWrapper(mgr); subsystemList[insertIndex].type = typeof(T); subsystemList[insertIndex].updateDelegate = del.TriggerUpdate; }