/// <summary> /// Initializes the grid synchronously. This is only intended for use if <see cref="automaticInitialization"/> is set to <c>false</c>. /// </summary> public void Initialize() { if (this.grid != null) { return; } EnsureGrid(); RegisterWithManagers(); this.enabled = true; if (_automaticConnections) { this.Connect(NeighbourPosition.Top); this.Connect(NeighbourPosition.Bottom); this.Connect(NeighbourPosition.Left); this.Connect(NeighbourPosition.Right); } var msg = new GridStatusMessage { gridBounds = this.grid.bounds, status = GridStatusMessage.StatusCode.InitializationComplete }; GameServices.messageBus.Post(msg); }
/// <summary> /// Initializes the grid. This is only intended for use if <see cref="automaticInitialization"/> is set to <c>false</c>. /// The grid will be initialized over a number of frames, as to smooth out the initialization. /// </summary> /// <param name="maxMillisecondsUsedPerFrame">The maximum milliseconds used per frame while initializing.</param> /// <param name="callback">Callback that will be called once initialization is complete. The callback will receive a reference to this component for convenience.</param> public void Initialize(int maxMillisecondsUsedPerFrame, Action <GridComponent> callback) { if (this.grid != null) { return; } var builder = GetBuilder(); //This is the callback used for posting the final status message Action msgCallback = () => { if (callback != null) { callback(this); } }; //This is the callback for the initialization routine Action <IGrid> cb = (g) => { this.grid = g; RegisterWithManagers(); this.enabled = true; if (_automaticConnections) { this.Connect(NeighbourPosition.Top); this.Connect(NeighbourPosition.Bottom); this.Connect(NeighbourPosition.Left); this.Connect(NeighbourPosition.Right); } var msg = new GridStatusMessage { gridBounds = g.bounds, status = GridStatusMessage.StatusCode.InitializationComplete }; GameServices.messageBus.PostBalanced(msg, maxMillisecondsUsedPerFrame, msgCallback); }; if (this.bakedData != null) { builder.Create(this.bakedData, maxMillisecondsUsedPerFrame, cb); } else { builder.Create(maxMillisecondsUsedPerFrame, cb); } }
/// <summary> /// Disables the grid and releases all memory. If <see cref="automaticInitialization"/> is <c>true</c>, the grid will be reinitialized if re-enabled, otherwise <see cref="Initialize(int, Action<GridComponent>)"/> must be called to re-enable and re-initialize the grid. /// <param name="maxMillisecondsUsedPerFrame">The maximum milliseconds used per frame while disabling</param> /// </summary> public void Disable(int maxMillisecondsUsedPerFrame) { if (this.grid == null) { return; } this.enabled = false; this.grid = null; var msg = new GridStatusMessage { gridBounds = this.bounds, status = GridStatusMessage.StatusCode.DisableComplete }; GameServices.messageBus.PostBalanced(msg, maxMillisecondsUsedPerFrame); }