Advertisement
agmike

spconnector.gs

Dec 6th, 2012
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.91 KB | None | 0 0
  1. /* FILE_HEADER */
  2.  
  3. include "splibrary.gs"
  4.  
  5.  
  6. final class SPPipeState
  7. {
  8.     public float Density;
  9.     public float DensityInterm;
  10.     public float DensityIntermDeriv;
  11.  
  12.     public float DensityInflow;
  13.  
  14.     public float Velocity;
  15.     public float VelocityInterm;
  16.     public float VelocityIntermDeriv;
  17.  
  18.     public float Length;
  19.    
  20.     public float Pressure;
  21.     public float Volume;
  22.    
  23.     public int SchemeNodeId = SPAirScheme.InvalidNodeId;
  24.     public float OpenedFlow;
  25. };
  26.  
  27.  
  28. final class SPWireState
  29. {
  30.     // State < 0: ошибка (несколько контроллеров)
  31.     // State == 0: нейтральное состояние (такой ControllerState игнорируется)
  32.     // State > 0: активное состояние (ControllerState распространяется по всему проводу)
  33.     public int State;
  34.     public float Voltage; // Current = Voltage * InvResistance
  35.    
  36.     public int ControllerState;
  37.     public float ControllerVoltage;
  38.    
  39.     public int ActiveCount = 0;
  40.     public float TotalInvResistance = 0.0f;
  41.    
  42.     public bool Active = false;
  43.     public float InvResistance = 0.0f;
  44.    
  45.     public int[] UserData;
  46. };
  47.  
  48.  
  49.  
  50.  
  51. final class SPConnector
  52. {
  53.     public int StateFlags;
  54.    
  55.     define public int Connected  = 1 << 0; // Рукав соединен с соседом
  56.     define public int PipeOpened = 1 << 1; // Концевой кран/подобное открыт/включен (1 если отсутствует)
  57.     define public int Automatic  = 1 << 2; // Автоматический режим
  58.     define public int Broken     = 1 << 3; // Сломан в результате нештатной расцепки
  59.    
  60.     public void Set(int flag, bool state)
  61.     {
  62.         if (state)
  63.             StateFlags = StateFlags | flag;
  64.         else
  65.             StateFlags = StateFlags & ~flag;
  66.     }
  67.    
  68.     public bool Get(int flag)
  69.     {
  70.         return (StateFlags & flag) == flag;
  71.     }
  72.    
  73.     define public int StateDisconnected = 0;
  74.     define public int StateConnected = 1;
  75.     define public int StateAtm = 2;
  76.    
  77.     public int GetPipeState(SPConnector connection)
  78.     {
  79.         int flags = StateFlags;
  80.         bool autoEnabled = SPLibraryOptions.AutomaticConnectionsEnabled;
  81.         bool automatic = autoEnabled and (flags & Automatic);
  82.         int conFlags = 0;
  83.         if (connection)
  84.             conFlags = connection.StateFlags;
  85.         if (automatic) {
  86.             if (flags & Broken)
  87.                 return StateAtm;
  88.             bool conAutomatic = autoEnabled and (conFlags & Automatic);
  89.             if ((conAutomatic or Flags.Test(conFlags, PipeOpened | Connected)) and !(conFlags & Broken))
  90.                 return StateConnected;
  91.             return StateDisconnected;
  92.         }
  93.         if (!(flags & PipeOpened))
  94.             return StateDisconnected;
  95.         if (!(flags & conFlags & Connected) or ((flags | conFlags) & Broken))
  96.             return StateAtm;
  97.         if (!(conFlags & PipeOpened))
  98.             return StateDisconnected;
  99.         return StateConnected;
  100.     }
  101.    
  102.     public int GetWireState(SPConnector connection)
  103.     {
  104.         int flags = StateFlags;
  105.         bool autoEnabled = SPLibraryOptions.AutomaticConnectionsEnabled;
  106.         bool automatic = autoEnabled and (flags & Automatic);
  107.         int conFlags = 0;
  108.         if (connection)
  109.             conFlags = connection.StateFlags;
  110.         if (automatic) {
  111.             if (flags & Broken)
  112.                 return StateDisconnected;
  113.             bool conAutomatic = autoEnabled and (conFlags & Automatic);
  114.             if ((conAutomatic or (conFlags & Connected)) and !(conFlags & Broken))
  115.                 return StateConnected;
  116.             return StateDisconnected;
  117.         }
  118.         if (!(flags & conFlags & Connected) or ((flags | conFlags) & Broken))
  119.             return StateDisconnected;
  120.         return StateConnected;
  121.     }
  122. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement