Advertisement
agmike

LseStdESSwitch — first device as scheme object

Oct 1st, 2011
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.82 KB | None | 0 0
  1. class LseStdSwitch isclass LseDevice
  2. {
  3.     public string ControlName;
  4.     public float OffValue = 0.0;
  5.     public float OnValue = 1.0;
  6.     public float OnValueDelta = 0.2;
  7.  
  8.     public bool State;
  9.  
  10.     public void Init(LseDeviceManager mgr, LseLocomotive loco)
  11.     {
  12.         inherited(mgr, loco);
  13.  
  14.         loco.SetControlHandler(ControlName, me);
  15.     }
  16.  
  17.     public void ProcessControl(string controlName,
  18.                                LseCabinControlState controlState,
  19.                                float value)
  20.     {
  21.         State = Math.Fabs(value - OnValue) <= OnValueDelta;
  22.     }
  23.  
  24.     public void SetState(bool state)
  25.     {
  26.         float value = OffValue;
  27.         if (state)
  28.             value = OnValue;
  29.         int controlId = Loco.GetControlId(ControlName);
  30.         Loco.GetControlState(controlId).Value = value;
  31.         Loco.UpdateControlState(controlId);
  32.     }
  33.  
  34.     public LseStdSwitch Clone(LseStdSwitch ret)
  35.     {
  36.         ret.ControlName = ControlName;
  37.         ret.OffValue = OffValue;
  38.         ret.OnValue = OnValue;
  39.         ret.OnValueDelta = OnValueDelta;
  40.  
  41.         return ret;
  42.     }
  43.    
  44.     public LseDevice CloneDevice() { return cast<LseDevice> Clone(new LseStdSwitch()); }
  45. };
  46.  
  47.  
  48. class LseStdESSwitch isclass LseGapiESObject, LseStdSwitch
  49. {
  50.     public string[] Contacts = null;
  51.     public string[] InvContacts = null;
  52.     // public bool State = false;
  53.     public float ContactResistance = LseGapiESConst.Zero;
  54.     public float ContactClosedResistance = LseGapiESConst.Inf;
  55.    
  56.     LseGapiESEdge[] _contactEdges;
  57.     LseGapiESEdge[] _invContactEdges;
  58.  
  59.     public void Init(LseDeviceManager mgr, LseLocomotive loco)
  60.     {
  61.         inherited(mgr, loco);
  62.     }
  63.    
  64.     public void InitES(LseGapiElectricScheme mScheme, string name, LlHashSoup elements)
  65.     {
  66.         int i;
  67.         if (Contacts)
  68.         {
  69.             _contactEdges = new LseGapiESEdge[Contacts.size()];
  70.             for (i = 0; i < Contacts.size(); ++i)
  71.             {
  72.                 int edgeId = elements.GetNamedTagAsInt(Contacts[i], -1);
  73.                 _contactEdges[i] = Scheme.GetEdge(edgeId);
  74.             }
  75.         }
  76.        
  77.         if (InvContacts)
  78.         {
  79.             _invContactEdges = new LseGapiESEdge[InvContacts.size()];
  80.             for (i = 0; i < InvContacts.size(); ++i)
  81.             {
  82.                 int edgeId = elements.GetNamedTagAsInt(InvContacts[i], -1);
  83.                 _invContactEdges[i] = Scheme.GetEdge(edgeId);
  84.             }
  85.         }
  86.        
  87.         mScheme.AddObject(me);
  88.     }
  89.    
  90.     public void InitES(LseGapiElectricScheme mScheme, string name, LlHashSoup elements, LlHashSoup props)
  91.     {
  92.         int i;
  93.         if (!Contacts)
  94.         {
  95.             LlHashSoup cnts = props.GetNamedSoup("contacts");
  96.             _contactEdges = new LseGapiESEdge[cnts.CountTags()];
  97.             for (i = 0; i < cnts.CountTags(); ++i)
  98.             {
  99.                 int edgeId = elements.GetNamedTagAsInt(cnts.GetNamedTag(i), -1);
  100.                 _contactEdges[i] = Scheme.GetEdge(edgeId);
  101.             }
  102.         }
  103.        
  104.         if (!InvContacts)
  105.         {
  106.             LlHashSoup cnts = props.GetNamedSoup("invcontacts");
  107.             _invContactEdges = new LseGapiESEdge[cnts.CountTags()];
  108.             for (i = 0; i < cnts.CountTags(); ++i)
  109.             {
  110.                 int edgeId = elements.GetNamedTagAsInt(cnts.GetNamedTag(i), -1);
  111.                 _invContactEdges[i] = Scheme.GetEdge(edgeId);
  112.             }
  113.         }
  114.     }
  115.    
  116.     public void SetPropertiesES(LlHashSoup props)
  117.     {
  118.         ContactResistance = props.GetNamedTagAsFloat("r", ContactResistance);
  119.         ContactClosedResistance = props.GetNamedTagAsFloat("rclosed", ContactClosedResistance);
  120.         State = props.GetNamedTagAsBool("state", State);
  121.     }
  122.    
  123.     public void UpdateES(float dt)
  124.     {
  125.         LseGapiESEdge[] opened;
  126.         LseGapiESEdge[] closed;
  127.        
  128.         if (State)
  129.         {
  130.             opened = _contactEdges;
  131.             closed = _invContactEdges;
  132.         }
  133.         else
  134.         {
  135.             closed = _contactEdges;
  136.             opened = _invContactEdges;
  137.         }
  138.        
  139.         float g = 1.0 / ContactResistance;
  140.         float cg = 1.0 / ContactClosedResistance;
  141.        
  142.         int i;
  143.         for (i = 0; i < opened.size(); ++i)
  144.             opened[i].SetG(g);
  145.         for (i = 0; i < closed.size(); ++i)
  146.             closed[i].SetG(cg);
  147.     }
  148.  
  149.     public LseStdESSwitch CloneESSwitch(LseStdESSwitch ret)
  150.     {
  151.         Clone(cast<LseStdSwitch> ret);
  152.  
  153.         ret.Contacts = Contacts;
  154.         ret.InvContacts = InvContacts;
  155.         ret.ContactResistance = ContactResistance;
  156.         ret.ContactClosedResistance = ContactClosedResistance;
  157.        
  158.         return ret;
  159.     }
  160.    
  161.     public LseDevice CloneDevice() { return cast<LseDevice> Clone(new LseStdESSwitch()); }
  162. };
  163.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement