using System; using System.Collections.Generic; using System.Collections.ObjectModel; namespace DMX2 { public class SequenceurLineaire : Sequenceur { TimeSpan timeStamp = TimeSpan.Zero; public TimeSpan TimeStamp { get { return timeStamp; } } public class Effet { string _nom; public Effet(string nom, Dictionary valeurs, TimeSpan duree, TimeSpan transition) { _nom=nom; _valeurs = new Dictionary(valeurs); _duree=duree; _transition=transition; } public string Nom { get { return _nom; } } Dictionary _valeurs; public int this [Circuit index] { get { if(!_valeurs.ContainsKey(index)) _valeurs.Add(index,0); return _valeurs[index]; } } public void RetireCircuit(Circuit c){ _valeurs.Remove(c); } TimeSpan _duree =TimeSpan.Zero ; TimeSpan _transition = TimeSpan.Zero; public TimeSpan Duree { get { return _duree; } } public TimeSpan Transition { get { return _transition; } } } List circuitsSeq = new List(); public ReadOnlyCollection Circuits { get { return circuitsSeq.AsReadOnly(); } } public void ChangeCircuits (System.Collections.Generic.List list) { foreach (var c in circuitsSeq) { if(!list.Contains(c)) RetireCircuit(c); } foreach(var c in list) if(!circuitsSeq.Contains(c)) AjouteCircuit(c); circuitsSeq = list; } void AjouteCircuit (Circuit c) { valeurscourantes[c]=0; valeursinitiales[c]=0; } private void RetireCircuit(Circuit c) { foreach (var ef in effets) { ef.RetireCircuit(c); } circuitsSeq.Remove(c); valeurscourantes.Remove(c); valeursinitiales.Remove(c); } public override void MajCircuitsSupprimes () { foreach (var c in circuitsSeq.ToArray()) { if(!Conduite.Courante.Circuits.Contains(c)) RetireCircuit(c); } } List effets = new List(); public ReadOnlyCollection Effets { get { return effets.AsReadOnly() ; } } Effet effetcourrant=null; bool enTransition=false; Dictionary valeurscourantes = new Dictionary(); Dictionary valeursinitiales = new Dictionary(); public SequenceurLineaire () { } public SequenceurLineaire (int id) :base (id) { } public override int EtatCircuit (Circuit c) { if (!circuitsSeq.Contains (c)) return 0; return valeurscourantes[c]; } public override void Tick (TimeSpan time) { timeStamp += time; if (enTransition) { if(timeStamp(valeurscourantes); enTransition = true; timeStamp = TimeSpan.Zero; } public void SauveEffet (string nom, TimeSpan duree, TimeSpan transition) { effets.Add(new Effet(nom, valeurscourantes,duree,transition)); } public override System.Xml.XmlElement Save () { throw new System.NotImplementedException (); } SeqLinUI ui=null; public override SequenceurUI GetUI () { if (ui == null) { ui = new SeqLinUI (this); ui.Destroyed += UiDestroyed;; } return ui; } void UiDestroyed (object sender, EventArgs e) { ui=null; } } }