/// <summary> /// Notify the transition that it has been 'selected' /// By default, it does nothing but notifies the process instance /// that the transition has been selected /// </summary> public void NotifyTransitionSelected() { ActivationRequired(true); if (this.Status != TransitionStatus.ENABLED && this.Status != TransitionStatus.STARTED) throw new Exception("Status invalid"); OnTransitionSelected(); this.Status = TransitionStatus.STARTED; _containerCallback.TransitionStarted(this.CorrelationId); }
public ActiveTransition(Task tsk) { this.Status = TransitionStatus.ENABLED; this.TaskId = tsk.Id; }
/// <summary> /// Initiate task (start the transition). /// If the transition is immediate, this operation will execute the task. /// If the transition is not immediate, this will initiate the transition. /// Subclasses should override this function, but should always call base.InitiateTask() /// </summary> public virtual void InitiateTask() { ActivationRequired(true); this.Status = TransitionStatus.ENABLED; DoInitiateTask(); }
/// <summary> /// Pass task completion information to active transition. /// As a result, task internal data is updated and /// OnTaskCompleted is invoked. Then the transition is marked /// as completed and TransitionCompleted callback is invoked. /// </summary> /// <param name="tci"></param> public void NotifyTaskCompleted(TaskCompletionInfo tci) { ActivationRequired(true); if (Status != TransitionStatus.STARTED && Status != TransitionStatus.COMPLETED) throw new ApplicationException("Invalid transition status"); if (tci.CorrelationId != this.CorrelationId) throw new ApplicationException("Invalid correlation id"); if (tci.ResultXml != null) { DataObject dob = DataObject.ParseXml(tci.ResultXml); this.UpdateTaskData(dob); } OnTaskCompleted(tci); this.Status = TransitionStatus.COMPLETED; _containerCallback.TransitionCompleted(CorrelationId); }
/// <summary> /// Invoked by runtime to cancel an active transition /// </summary> public virtual void CancelTask() { ActivationRequired(true); if (this.Status != TransitionStatus.ENABLED && Status != TransitionStatus.STARTED) throw new ApplicationException("Cannot cancel task - status invalid"); DoCancelTask(); this.Status = TransitionStatus.CANCELLED; }
/// <summary> /// Execute an immediate task /// </summary> public virtual void ExecuteTask() { ActivationRequired(true); if (!IsImmediate) throw new ApplicationException("Execute is allowed only for immediate task"); DoExecuteTask(); this.Status = TransitionStatus.COMPLETED; this._containerCallback.TransitionCompleted(this.CorrelationId); }
public override void Update(GameTime gameTime, ScreenManager screenManager) { if (!Enabled) return; //control finished! if (status == TransitionStatus.Dead) { //call OnFinish event if (OnFinish != null) OnFinish(this); return; } if (status == TransitionStatus.Dead) return; if (status == TransitionStatus.NotShown) status = TransitionStatus.TransitioningIn; //now this.status must among [FadingIn, Shown, FadingOut] switch (status) { case TransitionStatus.TransitioningIn: if (!UpdateTransition(gameTime, transitionOnTime, 1)) { status = TransitionStatus.Shown; } break; case TransitionStatus.Shown: alreadyShownTime += gameTime.ElapsedGameTime; if (stopTime != TimeSpan.Zero && alreadyShownTime > stopTime) { // clear alreadyShownTime for next texture alreadyShownTime = TimeSpan.Zero; status = TransitionStatus.TransitioningOut; } break; case TransitionStatus.TransitioningOut: if (!UpdateTransition(gameTime, transitionOffTime, -1)) { Textures.Remove(Textures.ElementAt(0).Key); // do we reach the end? status = Textures.Count == 0 ? TransitionStatus.Dead : TransitionStatus.TransitioningIn; } break; default: throw new ArgumentException("Transition status error."); } base.Update(gameTime, screenManager); }
public override void HandleInput(InputState inputState, bool isTopMost, ScreenManager screenManager) { if (!Enabled) return; if (!canInterrupt) return; if (!inputState.IsNewMouseLeftButtonReleased(Bounds)) return; // we only handle Mouse1 if (status == TransitionStatus.TransitioningIn) transitionPosition = 1; else if (status == TransitionStatus.Shown) status = TransitionStatus.TransitioningOut; else if (status == TransitionStatus.TransitioningOut) transitionPosition = 0; base.HandleInput(inputState, isTopMost, screenManager); }
private void Update() { float dt = Time.deltaTime; // Handle transitions while they're running if(transitionStatus == TransitionStatus.TransitionIn) { if(transitionCanvas.alpha < 1f) { transitionCanvas.alpha += dt; } else { transitionStatus = TransitionStatus.TransitionOut; AdvanceToNextSlide(); } } if(transitionStatus == TransitionStatus.TransitionOut) { if(transitionCanvas.alpha > 0f) { transitionCanvas.alpha -= dt; } else { transitionStatus = TransitionStatus.Idle; transitionScreen.SetActive(false); } } transitionCanvas.alpha = Mathf.Clamp (transitionCanvas.alpha, 0f, 1f); // Handle current slide update. if(currentSlideScript != null) { currentSlideScript.UpdateSlide(dt); } // Allow arrow keys to trigger transitions. if(Input.GetKeyDown(KeyCode.RightArrow) && transitionStatus == TransitionStatus.Idle) { TransitionForwards(); } else if(Input.GetKeyDown(KeyCode.LeftArrow) && transitionStatus == TransitionStatus.Idle) { TransitionBackwards(); } }
private void TransitionForwards() { transitionDirection = TransitionDirection.Forwards; transitionScreen.SetActive(true); transitionStatus = TransitionStatus.TransitionIn; }
/// <summary> /// Restore task shell's state /// </summary> /// <param name="state"></param> public virtual void RestoreState(DataObject state) { RequireActivation(false); CorrelationId = (string)state["CorrelationId"]; TaskId = (string)state["TaskId"]; _status = (TransitionStatus)Enum.Parse(typeof(TransitionStatus), (string)state["Status"]); SharedId = (string)state["SharedId"]; IList lst = state.GetArray("AllocatedPlaces"); if (lst != null) { List<string> ls = new List<string>(); foreach (string s in lst) ls.Add(s); SetAllocatedPlaces(ls); } _taskState = (DataObject)state["Task"]; }