public virtual List<ChocolatePiece> CreateBar(ChocolateBar bar, GameObject prefab)
        {
            List<ChocolatePiece> pieces = new List<ChocolatePiece>();
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    //Instantiate the prefab for chocolate piece. Then get the script component to pass to conststructor
                    //for the class that controls the piece. then add to the list.
                    GameObject hooksGO = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity) as GameObject;
                    ChocolatePieceHooks hooks = hooksGO.GetComponent<ChocolatePieceHooks>();
                    ChocolatePiece chocolatePiece = new ChocolatePiece(hooks);
                    chocolatePiece.Initialize();
                    float width = chocolatePiece.SpriteRenderer.sprite.bounds.size.x;
                    float height = chocolatePiece.SpriteRenderer.sprite.bounds.size.y;
                    float offsetX = gridOffsets[i, j].x * width;
                    float offsetY = gridOffsets[i, j].y * height;
                    Vector3 offset = new Vector3(offsetX, offsetY);
                    chocolatePiece.Position = bar.Position + offset;
                    pieces.Add(chocolatePiece);
                }
            }

            return pieces;
        }
        public ChocolatePieceState Create(ChocolatePieceStates state, ChocolatePiece piece)
        {
            switch (state)
            {
                case ChocolatePieceStates.ConnectedToBar:
                    return new ChocolatePieceStateConnectedToBar(piece);
                case ChocolatePieceStates.Selected:
                    return new ChocolatePieceStateSelected(piece);
                case ChocolatePieceStates.Broken:
                    return new ChocolatePieceStateBroken(piece);
                case ChocolatePieceStates.Inactive:
                    return new ChocolatePieceStateInactive(piece);
            }

            Assert.IsTrue(false);
            return null;
        }
 public ChocolatePieceStateConnectedToBar(ChocolatePiece piece)
     : base(piece)
 {
 }
 public ChocolatePieceState(ChocolatePiece piece)
 {
     _chocolatePiece = piece;
 }
 public ChocolatePieceStateInactive(ChocolatePiece piece)
     : base(piece)
 {
 }
 public ChocolatePieceStateBroken(ChocolatePiece piece)
     : base(piece)
 {
 }