200 lines
3.8 KiB
C#
200 lines
3.8 KiB
C#
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<Circuit,int> valeurs, TimeSpan duree, TimeSpan transition)
|
|
{
|
|
_nom=nom;
|
|
_valeurs = new Dictionary<Circuit, int>(valeurs);
|
|
_duree=duree;
|
|
_transition=transition;
|
|
}
|
|
public string Nom {
|
|
get {
|
|
return _nom;
|
|
}
|
|
}
|
|
|
|
Dictionary<Circuit,int> _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<Circuit> circuitsSeq = new List<Circuit>();
|
|
|
|
public ReadOnlyCollection<Circuit> Circuits {
|
|
get {
|
|
return circuitsSeq.AsReadOnly();
|
|
}
|
|
}
|
|
|
|
public void ChangeCircuits (System.Collections.Generic.List<Circuit> 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<Effet> effets = new List<Effet>();
|
|
|
|
public ReadOnlyCollection<Effet> Effets {
|
|
get {
|
|
return effets.AsReadOnly() ;
|
|
}
|
|
}
|
|
Effet effetcourrant=null;
|
|
|
|
bool enTransition=false;
|
|
|
|
Dictionary<Circuit,int> valeurscourantes = new Dictionary<Circuit, int>();
|
|
Dictionary<Circuit,int> valeursinitiales = new Dictionary<Circuit, int>();
|
|
|
|
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<effetcourrant.Duree){
|
|
foreach( Circuit c in circuitsSeq)
|
|
{
|
|
if(valeurscourantes[c] != effetcourrant[c])
|
|
{
|
|
valeurscourantes[c] = (effetcourrant[c]-valeursinitiales[c]) * effetcourrant.Duree.Milliseconds / time.Milliseconds + valeursinitiales[c];
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
FinDeTransition();
|
|
}
|
|
}
|
|
}
|
|
|
|
void FinDeTransition ()
|
|
{
|
|
enTransition = false;
|
|
foreach( Circuit c in circuitsSeq)
|
|
valeurscourantes[c]=effetcourrant[c];
|
|
}
|
|
|
|
|
|
public void ChangeEffet(Effet effet)
|
|
{
|
|
effetcourrant = effet;
|
|
valeursinitiales = new Dictionary<Circuit, int>(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;
|
|
}
|
|
|
|
|
|
}
|
|
}
|