diff --git a/DMX-2.0/Conduite.cs b/DMX-2.0/Conduite.cs index 3f7d51d..88b4fb2 100644 --- a/DMX-2.0/Conduite.cs +++ b/DMX-2.0/Conduite.cs @@ -48,7 +48,7 @@ namespace DMX2 readonly SequenceurMaitre seqmaitre = new SequenceurMaitre(); readonly EventManager eventManager = new EventManager(); // Gestion des fournisseurs d'evenements - actionEventTarget masterEventTarget; // Recepteur d'evenements pour le master + actionEventTargetEx masterEventTarget; // Recepteur d'evenements pour le master readonly MidiEventProvider midip=null; @@ -79,11 +79,15 @@ namespace DMX2 // La conduite peux recevoir des evenements midi midip = new MidiEventProvider (eventManager); - masterEventTarget = new actionEventTarget ( + masterEventTarget = new actionEventTargetEx ( delegate(EventData data) { Master = 100 * data.value / 255; return true; - } + }, + delegate{ + return master * 255 /100; + }, + false ); if (startthread) StartThread(); diff --git a/DMX-2.0/EventManager.cs b/DMX-2.0/EventManager.cs index c90dbcf..db36745 100644 --- a/DMX-2.0/EventManager.cs +++ b/DMX-2.0/EventManager.cs @@ -132,6 +132,59 @@ namespace DMX2 #endregion } + /// + /// Cible generique d'evenement. + /// + public class actionEventTargetEx : IEventTarget { + public delegate bool EventAction (EventData data); + public delegate int GetData(); + EventAction action; + GetData getdata; + bool canfeedback=false , nofeedback=false; + readonly List fbInfos = new List(); + + public actionEventTargetEx(EventAction _action, GetData _getdata,bool feedback) + { + action=_action; + getdata = _getdata; + canfeedback = feedback; + } + #region IEventTarget implementation + bool IEventTarget.FireEvent (EventData data) + { + int val = getdata(); + + if ( + (data.prev_value < val-5 && data.value < val-5) || + (data.prev_value > val+5 && data.value > val+5) + ) { + return true; + } + + nofeedback=true; + bool res =action(data); + nofeedback=false; + return res; + } + + public void FeedBack (byte data) + { + if (nofeedback) + return; + foreach (var info in fbInfos) { + info.FeedBack(data); + } + } + + void IEventTarget.Bind (string id){} // Rien a faire ici + void IEventTarget.Unbind (string id){} + bool IEventTarget.CanFeedback { get { return canfeedback; } } + void IEventTarget.AddFeedback (IFeedbackInfo info) + { + fbInfos.Add(info); + } + #endregion + } public class EventManager { Dictionary bindings = new Dictionary(); diff --git a/DMX-2.0/SequenceurLineaire.cs b/DMX-2.0/SequenceurLineaire.cs index bb025e7..277adae 100644 --- a/DMX-2.0/SequenceurLineaire.cs +++ b/DMX-2.0/SequenceurLineaire.cs @@ -220,7 +220,7 @@ namespace DMX2 Dictionary valeurschangees = new Dictionary (); Dictionary targets = new Dictionary(); - actionEventTarget masterEventTarget=null; + actionEventTargetEx masterEventTarget=null; actionEventTarget goNextEventTarget=null; actionEventTarget goBackEventTarget=null; @@ -241,11 +241,15 @@ namespace DMX2 { effetcourrant = new Effet ("",valeurscourantes , TimeSpan.Zero, TimeSpan.Zero); - masterEventTarget = new actionEventTarget ( + masterEventTarget = new actionEventTargetEx ( delegate(EventData data) { Master = 100 * data.value / 255; return true; - } + }, + delegate{ + return Master * 255 /100; + }, + false ); goNextEventTarget = new actionEventTarget (