DirectOutputR1
DirectOutput framework R1 for virtual pinball cabinets.
Go to:
Overview 
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros Pages
BlinkEffect.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Xml.Serialization;
6 
7 namespace DirectOutput.FX.TimmedFX
8 {
14  {
15 
16  private int _DurationActiveMs = 500;
17 
24  public int DurationActiveMs
25  {
26  get { return _DurationActiveMs; }
27  set { _DurationActiveMs = value.Limit(1, int.MaxValue); }
28  }
29 
30 
31  private int _DurationInactiveMs = 500;
32 
39  public int DurationInactiveMs
40  {
41  get { return _DurationInactiveMs; }
42  set { _DurationInactiveMs = value.Limit(1, int.MaxValue); }
43  }
44 
51  [XmlIgnoreAttribute]
52  public bool Active { get; private set; }
53 
54 
55  private bool BlinkEnabled = false;
56  private bool BlinkState = false;
57  private int BlinkOrgTableElementDataValue = 1;
58  private Table.TableElementData BlinkTableElementData;
59 
60  private void StartBlinking(Table.TableElementData TableElementData)
61  {
62  if (!BlinkEnabled)
63  {
64  BlinkTableElementData = TableElementData.Clone();
65  BlinkOrgTableElementDataValue = BlinkTableElementData.Value;
66  BlinkEnabled = true;
67  BlinkState = false;
68  DoBlink();
69  }
70  }
71 
72  private void StopBlinking()
73  {
74  BlinkEnabled = false;
75  }
76 
77  private void DoBlink()
78  {
79  BlinkState = !BlinkState;
80  if (BlinkState)
81  {
82  BlinkTableElementData.Value = BlinkOrgTableElementDataValue;
83  Table.Pinball.Alarms.RegisterAlarm(DurationActiveMs, DoBlink);
84  }
85  else
86  {
87  BlinkTableElementData.Value = 0;
88  if (BlinkEnabled)
89  {
90  Table.Pinball.Alarms.RegisterAlarm(DurationInactiveMs, DoBlink);
91  }
92  }
93  TargetEffect.Trigger(BlinkTableElementData);
94 
95  }
96 
97 
98 
104  public override void Trigger(Table.TableElementData TableElementData)
105  {
106  if (TargetEffect != null)
107  {
108  if (TableElementData.Value != 0)
109  {
110  StartBlinking(TableElementData);
111  }
112  else
113  {
114  StopBlinking();
115 
116  }
117  }
118  }
119 
120 
121 
125  public override void Finish()
126  {
127  try
128  {
129  Table.Pinball.Alarms.UnregisterAlarm(DoBlink);
130  }
131  catch { }
132  base.Finish();
133  }
134 
135  }
136 }