예제 #1
0
        private void SetModelViewInstances(int state)
        {
            (Type ModelType, Type ViewType)stateInformation = _stateHandler.GetStateInformation(state);

            if (stateInformation.ViewType.GetConstructor(new[] { typeof(IViewRegistry) }) != null)
            {
                _view = (IView)Activator.CreateInstance(stateInformation.ViewType, _viewRegistry);
            }
            else
            {
                _view = (IView)Activator.CreateInstance(stateInformation.ViewType);
            }
            _view.GameWindowEvent += GameWindowEvent;

            IModel existingModel = (from inactiveModel in _inactiveModels
                                    where inactiveModel.GetType() == stateInformation.ModelType
                                    select inactiveModel).FirstOrDefault();

            if (existingModel != null)
            {
                _model = existingModel;
                _inactiveModels.Remove(existingModel);
            }
            else
            {
                if (stateInformation.ModelType.GetConstructor(new[] { typeof(IModelRegistry) }) != null)
                {
                    _model = (IModel)Activator.CreateInstance(stateInformation.ModelType, _modelRegistry);
                }
                else
                {
                    _model = (IModel)Activator.CreateInstance(stateInformation.ModelType);
                }
                _model.ModelEvent   += (sender, e) => _view.ProcessModelEvent(e);
                _model.StateChanged += StateChanged;
            }
            _app.ResourceManager.ShaderChanged += _view.ShaderChanged;
            _view.LoadResources(_app.ResourceManager);
        }