private bool OnReact(ITube activeItem, int id, string[] type) { var connectedInfo = GetConnectedDic(activeItem, id); if (connectedInfo.Key != null && connectedInfo.Key is ITube) { var tube = connectedInfo.Key as ITube; var outInoutId = connectedInfo.Value; if (tube is IContainer) { //等待化学反应结束 reactTuple.Enqueue(new Tuple <IContainer, int, string[]>(tube as IContainer, outInoutId, type)); } else { //直接进入下下一步 tube.Import(outInoutId, type); } } else { if (onStepBreak != null) { onStepBreak.Invoke(activeItem); } } return(connectedInfo.Key != null); }
public void Initialize() { _boardColumns = _owner.Window.ClientBounds.Width / _tubeWidth; _boardRows = _owner.Window.ClientBounds.Height / _tubeHeight; _tubesTexture = _owner.Content.Load <Texture2D>(@"Textures\Tile_Sheet"); _font = _owner.Content.Load <SpriteFont>(@"Fonts\Pericles36"); var tubes = new ITube[_boardColumns, _boardRows]; for (var column = 0; column < _boardColumns; column++) { for (var row = 0; row < _boardRows; row++) { // TODO: Simplify the very long line of code. tubes[column, row] = new Tube(_tubesTexture, _owner.SpriteBatch, column * _tubeWidth, row * _tubeHeight, _tubeWidth, _tubeHeight); } } _pipeline = new Pipeline(tubes, 0, 0, _tubeWidth, _tubeHeight); }
public Tube(ITube tube) { tubeData = tube; }