source: 2014/30/MitjaK/Tonnin Seteli/Tonnin Seteli/Tonnin seteli/Tonnin seteli/Tonnin Seteli/Tonnin Seteli/Tonnin Seteli/QuickTimeEvent.cs @ 5699

Revision 5647, 1.9 KB checked in by mikrkana, 6 years ago (diff)


Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6
7public class QuickTimeEvent
8{
9    public enum Result { Success, Failure }
10
11    public char[] QTESeries { get; private set; }
12
13    public int CurrentKey { get; private set; }
14
15    public DoubleMeter TotalTime { get; private set; }
16
17    private Timer ajastin = new Timer();
18
19    public delegate void QTEResultHandler(Result result);
20    public event QTEResultHandler QTEResult;
21
22    public delegate void QTEHandler(char k);
23    public event QTEHandler NextKey;
24
25    public Game Peli { get; private set; }
26
27    public QuickTimeEvent(Game peli, char[] series, double time)
28    {
29        QTESeries = series;
30        TotalTime = new DoubleMeter(time, 0, time);
31        ajastin.Interval = 0.1;
32        ajastin.Timeout += delegate { TotalTime.Value -= 0.1; };
33        TotalTime.LowerLimit += Failure;
34        for (int i = 0; i < QTESeries.Length; i++)
35        {
36            QTESeries[i] = char.ToUpper(QTESeries[i]);
37        }
38        Peli = peli;
39    }
40
41    public void StartEvent()
42    {
43        ajastin.Start();
44        Peli.Keyboard.ListenAll(ButtonState.Pressed, KeyEntered);
45    }
46
47    private void KeyEntered(Key k)
48    {
49        if (NextKey != null)
50        {
51            if (CurrentKey + 1 < QTESeries.Length)
52                NextKey(QTESeries[CurrentKey + 1]);
53        }
54        if (k.ToString()[0] == QTESeries[CurrentKey])
55        {
56            CurrentKey++;
57            if (CurrentKey == QTESeries.Length)
58                Success();
59        }
60        else Failure();
61    }
62
63    private void Success()
64    {
65        if (QTEResult != null)
66            QTEResult(Result.Success);
67        ajastin.Stop();
68        Peli.Keyboard.Clear();
69    }
70
71    private void Failure()
72    {
73        if (QTEResult != null)
74            QTEResult(Result.Failure);
75        ajastin.Stop();
76        Peli.Keyboard.Clear();
77    }
78}
Note: See TracBrowser for help on using the repository browser.