Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* FILE_HEADER */
- include "splibrary.gs"
- final class SPPipeState
- {
- public float Density;
- public float DensityInterm;
- public float DensityIntermDeriv;
- public float DensityInflow;
- public float Velocity;
- public float VelocityInterm;
- public float VelocityIntermDeriv;
- public float Length;
- public float Pressure;
- public float Volume;
- public int SchemeNodeId = SPAirScheme.InvalidNodeId;
- public float OpenedFlow;
- };
- final class SPWireState
- {
- // State < 0: ошибка (несколько контроллеров)
- // State == 0: нейтральное состояние (такой ControllerState игнорируется)
- // State > 0: активное состояние (ControllerState распространяется по всему проводу)
- public int State;
- public float Voltage; // Current = Voltage * InvResistance
- public int ControllerState;
- public float ControllerVoltage;
- public int ActiveCount = 0;
- public float TotalInvResistance = 0.0f;
- public bool Active = false;
- public float InvResistance = 0.0f;
- public int[] UserData;
- };
- final class SPConnector
- {
- public int StateFlags;
- define public int Connected = 1 << 0; // Рукав соединен с соседом
- define public int PipeOpened = 1 << 1; // Концевой кран/подобное открыт/включен (1 если отсутствует)
- define public int Automatic = 1 << 2; // Автоматический режим
- define public int Broken = 1 << 3; // Сломан в результате нештатной расцепки
- public void Set(int flag, bool state)
- {
- if (state)
- StateFlags = StateFlags | flag;
- else
- StateFlags = StateFlags & ~flag;
- }
- public bool Get(int flag)
- {
- return (StateFlags & flag) == flag;
- }
- define public int StateDisconnected = 0;
- define public int StateConnected = 1;
- define public int StateAtm = 2;
- public int GetPipeState(SPConnector connection)
- {
- int flags = StateFlags;
- bool autoEnabled = SPLibraryOptions.AutomaticConnectionsEnabled;
- bool automatic = autoEnabled and (flags & Automatic);
- int conFlags = 0;
- if (connection)
- conFlags = connection.StateFlags;
- if (automatic) {
- if (flags & Broken)
- return StateAtm;
- bool conAutomatic = autoEnabled and (conFlags & Automatic);
- if ((conAutomatic or Flags.Test(conFlags, PipeOpened | Connected)) and !(conFlags & Broken))
- return StateConnected;
- return StateDisconnected;
- }
- if (!(flags & PipeOpened))
- return StateDisconnected;
- if (!(flags & conFlags & Connected) or ((flags | conFlags) & Broken))
- return StateAtm;
- if (!(conFlags & PipeOpened))
- return StateDisconnected;
- return StateConnected;
- }
- public int GetWireState(SPConnector connection)
- {
- int flags = StateFlags;
- bool autoEnabled = SPLibraryOptions.AutomaticConnectionsEnabled;
- bool automatic = autoEnabled and (flags & Automatic);
- int conFlags = 0;
- if (connection)
- conFlags = connection.StateFlags;
- if (automatic) {
- if (flags & Broken)
- return StateDisconnected;
- bool conAutomatic = autoEnabled and (conFlags & Automatic);
- if ((conAutomatic or (conFlags & Connected)) and !(conFlags & Broken))
- return StateConnected;
- return StateDisconnected;
- }
- if (!(flags & conFlags & Connected) or ((flags | conFlags) & Broken))
- return StateDisconnected;
- return StateConnected;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement