public abstract void Update(RelativeClock clock, float dt);
 public void ForceCaptureShift(RelativeClock clock)
 {
     CaptureShift(clock);
 }
 public void ForceCaptureSkill(RelativeClock clock)
 {
     CaptureSkill(clock);
 }
 public override void Update(RelativeClock clock, float dt)
 {
     if (!Input.GetMouseButtonDown(0)) return;
     var proprotionalPosition = UnityHelper.MouseProportionalPosition();
     if (proprotionalPosition.y > 0.8f) return;
     if (proprotionalPosition.x > 0.5f) CaptureSkill(clock);
     else CaptureShift(clock);
 }
 public override void Update(RelativeClock clock, float dt)
 {
     if (Input.GetKeyDown(SkillKey))
         CaptureSkill(clock);
     if (Input.GetKeyDown(ShiftKey))
         CaptureShift(clock);
 }
 private static TermAndGrade CaptureInput(RelativeClock clock)
 {
     var term = clock.GetCurrentTermAndDistance().Term;
     var grade = clock.Relative > 0 ? InputGrade.Good : InputGrade.Bad;
     return new TermAndGrade(term, grade);
 }
 protected void CaptureSkill(RelativeClock clock)
 {
     Skill = CaptureInput(clock);
 }
 protected void CaptureShift(RelativeClock clock)
 {
     Shift = CaptureInput(clock);
 }