// Must call Reset() before this in advance public Cube4 GetCube4() { if (!Exist()) { return(null); } double a = rd.NextDouble(), b = rd.NextDouble(); var c = rd.NextDouble() < CF ? Corner.odd[Array.FindIndex(OCPs, x => x > a * OCP)] : Corner.even[Array.FindIndex(ECPs, x => x > a * ECP)]; var w = Wing.list[Array.FindIndex(WPs, x => x > b)]; var xc = XCenter.GetInstance(xcLimit); return(new Cube4(c.GetInstance(), w.GetInstance(), xc)); }