private void CompleteBehaviourInternal(Scheme nextSchemeType, ISchemeModelMarkup nextModel) { var currentSchemeType = CurrentScheme.SchemeType; CurrentScheme.Finish(); _activeSchemes.Pop(); if (nextSchemeType != Scheme.Unknown) { var schemeInStack = _activeSchemes .FirstOrDefault(s => s.SchemeType == nextSchemeType); if (schemeInStack != null) { if (schemeInStack != _activeSchemes.Peek()) { throw new Exception("Wrong next scheme type!"); } } else { var nextBehaviour = _provider.GetScheme(nextSchemeType); nextBehaviour.Init(CompleteScheme); _activeSchemes.Push(nextBehaviour); CurrentScheme.Execute(nextModel, currentSchemeType); return; } } throw new Exception("There is no active schemes!"); }
public void AddScheme(Scheme type, ISchemeModelMarkup model) { var currentSchemeType = CurrentScheme?.SchemeType ?? Scheme.Unknown; var scenarioInStack = _activeSchemes .FirstOrDefault(s => s.SchemeType == type); if (scenarioInStack != null) { throw new Exception($"Behaviour '{type}' is already added!"); } var newScheme = _provider.GetScheme(type); newScheme.Init(CompleteScheme); _activeSchemes.Push(newScheme); CurrentScheme?.Execute(model, currentSchemeType); }
public void CompleteScheme(Scheme nextBehaviourType, ISchemeModelMarkup nextModel) { CompleteBehaviourInternal(nextBehaviourType, nextModel); }
protected void CompleteBehaviour(Scheme nextType, ISchemeModelMarkup model) { _onBehaviourComplete?.Invoke(nextType, model); }
protected abstract void Behave(ISchemeModelMarkup model);
public void Execute(ISchemeModelMarkup model, Scheme parentBehaviour) { Behave(model); }
protected override void Behave(ISchemeModelMarkup model) { _viewManager.AddView(Window.GameHud, new GameHudModel(_playerManager)); }
protected override void Behave(ISchemeModelMarkup model) { _viewManager.AddView(Window.StartMenu, new StartMenuModel(HandleStartButtonPressed)); }