// The App class accepts its commands via constructor-injection public App(CircleCommand circleCommand, TriangleCommand triangleCommand, SquareCommand squareCommand, NoneCommand noneCommand) { _circleCommand = circleCommand; _triangleCommand = triangleCommand; _squareCommand = squareCommand; _noneCommand = noneCommand; }
public ICommand EndStroke(Transform parent, Material mat) { string stripId = System.Guid.NewGuid().ToString(); // Reset Preview and Pass it's data to the new tube TriangleCommand tc = new TriangleCommand(stripId, this, _preview.Vertices, _preview.Tris, _preview.Uvs, parent, mat); _preview.Reset(); tc.Execute(); return(tc); }
private bool _TryParseTriangle(CommandKind cmdKind, string[] argsText, out AbstractCommand cmd) { // здесь может некорректный формат команды cmd = new BadCommand(this.currCmdText); // команда работы с треугольником принимает лидо длины строн (3 аргумента), // либо координаты вершин (6 аргументов) if (argsText.Length != 3 && argsText.Length != 6) return false; TriangleCommand trnglCmd = null; // создаём конкретную команду switch (cmdKind) { case CommandKind.TRIANGLE_AREA: trnglCmd = new TriangleAreaCommand(); break; case CommandKind.TRIANGLE_PERIM: trnglCmd = new TrianglePerimCommand(); break; case CommandKind.TRIANGLE_IS_RIGHT: trnglCmd = new TriangleIsRightCommand(); break; case CommandKind.TRIANGLE_IS_EQUIL: trnglCmd = new TriangleIsRightCommand(); break; default: Debug.Assert(false, "_TryParseTriangle must be called only for triangle commands"); break; } // инициализируем данными треугольника if (argsText.Length == 3) { double[] sides; if (!_TryParseTriangleSides(argsText, out sides)) return false; trnglCmd.Init(sides); } else { Debug.Assert(argsText.Length == 6, "This case only for 6 args-coordinates"); Point[] vertices; if (!_TryParseTriangleVertices(argsText, out vertices)) return false; trnglCmd.Init(vertices); } cmd = trnglCmd; return true; }