public World(Node node, string fileName) { debug = false; worldName = fileName; _objectMatrix = new WorldObject[node.SizeX, node.SizeY, node.SizeZ]; WorldSizeX = node.SizeX; WorldSizeY = node.SizeY; WorldSizeZ = node.SizeZ; for (int x = 0; x < node.SizeX; x++) { for (int y = 0; y < node.SizeY; y++) { for (int z = 0; z < node.SizeZ; z++) { switch (node.DataMatrix[x, WorldSizeY - y - 1, z]) { case "k": _objectMatrix[x, y, z] = new Cloth(x, y, z, this); break; case "W": _objectMatrix[x, y, z] = new Cloth(x, y, z, this); break; case "w": _objectMatrix[x, y, z] = new Cloth(x, y, z, this); break; case "S": _objectMatrix[x, y, z] = new Cloth(x, y, z, this); break; case "0": _objectMatrix[x, y, z] = new Air(x, y, z, this); break; case "#": _objectMatrix[x, y, z] = new RedstoneWire(x, y, z, this); break; case "^": _objectMatrix[x, y, z] = new RedstoneRepiter(x, y, z, Direction.Forward, 1, this); break; case "<": _objectMatrix[x, y, z] = new RedstoneRepiter(x, y, z, Direction.Right, 1, this); break; case ">": _objectMatrix[x, y, z] = new RedstoneRepiter(x, y, z, Direction.Left, 1, this); break; case "v": _objectMatrix[x, y, z] = new RedstoneRepiter(x, y, z, Direction.Backword, 1, this); break; case "=": _objectMatrix[x, y, z] = new RedstoneRepiter(x, y, z, Direction.Forward, 2, this); break; case "_": _objectMatrix[x, y, z] = new RedstoneTorch(x, y, z, Direction.Backword, this); break; case "-": _objectMatrix[x, y, z] = new RedstoneTorch(x, y, z, Direction.Forward, this); break; case "*": _objectMatrix[x, y, z] = new RedstoneTorch(x, y, z, Direction.Down, this); break; } } } } //Загрузка портов inPorts = new List<IoPort>(); outPorts = new List<IoPort>(); foreach (InPort port in node.InPorts) { int x = port.PosX; int y = WorldSizeY - port.PosY - 1; int z = 0; for (int j = 0; j < WorldSizeZ; j++) { if (_objectMatrix[x, y, j].GetType() == typeof (Cloth)) { z = j+1; } } var p = new IoPort {X = x, Y = y, Z = z, Name = port.Name, Value = false}; inPorts.Add(p); _objectMatrix[x, y, z] = new RedstoneWire(x, y, z, this); ((RedstoneWire) _objectMatrix[x, y, z]).Blocked = true; //((WorldObjects.RedstoneWire)ObjectMatrix[x, y, z]).RedValue = 15; //((WorldObjects.RedstoneWire)ObjectMatrix[x, y, z]).IsActivated = true; } foreach (OutPort port in node.OutPorts) { int x = port.PosX; int y = WorldSizeY - port.PosY - 1; int z = 0; for (int j = 0; j < WorldSizeZ; j++) { if (_objectMatrix[x, y, j].GetType() == typeof (Cloth)) { z = j+1; } } var p = new IoPort {X = x, Y = y, Z = z, Name = port.Name, Value = false}; outPorts.Add(p); _objectMatrix[x, y, z] = new RedstoneWire(x, y, z, this); } R = new Render(this); }