If changing gate level properties during runtime, be sure to update internal state by calling PrepareForGate
public double MaxGateLevel { get; set; }