Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 public Tube(ITube tube)
 {
     tubeData = tube;
 }