private void UpdateState(bool _aliveState) { visibleState = _aliveState; OnVisibilityChange(_aliveState); MonoBehaviour[] scripts = GetComponentsInChildren <MonoBehaviour>(true); Collider2D[] colliders = GetComponentsInChildren <Collider2D>(); Renderer[] renderers = GetComponentsInChildren <Renderer>(true); for (int i = 0; i < scripts.Length; i++) { if (CanBeDisabled(scripts[i])) { scripts[i].enabled = _aliveState; } } for (int i = 0; i < colliders.Length; i++) { colliders[i].enabled = _aliveState; } for (int i = 0; i < renderers.Length; i++) { SpriteRenderer sr = renderers[i] as SpriteRenderer; // Cast and check cast. // This is necessary because some renderers fail the cast. if (sr != null && !CanBeDisabled(sr)) { } else { renderers[i].enabled = _aliveState; } } if (registerTile != null) { if (_aliveState) { registerTile.UpdatePositionClient(); registerTile.UpdatePositionServer(); } else { registerTile.UnregisterClient(); registerTile.UnregisterServer(); } } }
/// <summary> /// Essentially the Update loop /// </summary> /// <returns>true if transform changed</returns> private bool Synchronize() { if (!predictedState.Active) { return(false); } bool server = isServer; if (server && !serverState.Active) { return(false); } bool changed = false; if (IsFloatingClient) { changed &= CheckFloatingClient(); } if (server) { changed &= CheckFloatingServer(); } if (predictedState.Position != transform.localPosition) { Lerp(); changed = true; } if (serverState.Position != serverLerpState.Position) { ServerLerp(); changed = true; } if (predictedState.SpinFactor != 0) { transform.Rotate(Vector3.forward, Time.deltaTime * predictedState.Speed * predictedState.SpinFactor); changed = true; } //Checking if we should change matrix once per tile if (server && registerTile.PositionServer != Vector3Int.RoundToInt(serverState.Position)) { CheckMatrixSwitch(); registerTile.UpdatePositionServer(); changed = true; } //Registering if (registerTile.PositionClient != Vector3Int.RoundToInt(predictedState.Position)) { // Logger.LogTraceFormat( "registerTile updating {0}->{1} ", Category.Transform, registerTile.WorldPositionC, Vector3Int.RoundToInt( predictedState.WorldPosition ) ); registerTile.UpdatePositionClient(); changed = true; } return(changed); }