/// <summary> /// 反初始化 /// </summary> public override void Uninitialize() { _stateHistory = null; _state.Release(); _state = null; _switchMediatorData.Release(); _switchMediatorData = null; for (int i = 0; i < _mediator.Count; i++) { MediatorData data = _mediator[i]; if (data.Mediator == null) { continue; } JW.Common.Log.LogE("UIStateService.Uninitialize error - mediator not destroy {0}", data.Mediator.GetType().FullName); } _mediator.Release(); _mediator = null; }
//切换状态 private void SwitchState(int changeType, string oldStateName, string newStateName, object stateParam) { // 新状态信息应用 if (string.IsNullOrEmpty(newStateName)) { JW.Common.Log.LogE("UIStateService.ChangeState error stateName"); return; } // 通知Mediator _switchMediatorData.Clear(); for (int i = 0; i < _mediator.Count; i++) { MediatorData mediatorData = _mediator[i]; if (mediatorData.Mediator == null) { continue; } bool oldState = mediatorData.IsBelongsState(oldStateName); bool newState = mediatorData.IsBelongsState(newStateName); if (oldState == newState) { if (newState) { _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 0)); } continue; } if (oldState) { _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 1)); } if (newState) { _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 2)); } } // out for (int i = 0; i < _switchMediatorData.Count; i++) { KeyValuePair <UIMediator, int> data = _switchMediatorData[i]; if (data.Value == 1) { data.Key.ChangeState(changeType, false, oldStateName, newStateName, null); } } if (Hook != null) { Hook(1, changeType, oldStateName, newStateName, stateParam); } //清理资源 if (StateService.IsValidate()) { AssetService.GetInstance().ClearUIStateCache(_stateHistory); } for (int i = 0; i < _switchMediatorData.Count; i++) { KeyValuePair <UIMediator, int> data = _switchMediatorData[i]; if (data.Value == 2) { data.Key.ChangeState(changeType, true, oldStateName, newStateName, stateParam); } } if (Hook != null) { Hook(2, changeType, oldStateName, newStateName, stateParam); } //stay for (int i = 0; i < _switchMediatorData.Count; i++) { KeyValuePair <UIMediator, int> data = _switchMediatorData[i]; if (data.Value == 0) { data.Key.RefreshState(changeType, oldStateName, newStateName, stateParam); } } if (Hook != null) { Hook(0, changeType, oldStateName, newStateName, stateParam); } JW.Common.Log.LogD("<color=yellow>UIStateService</color>--->Switch UI State from {0} to {1}<----", oldStateName, newStateName); }