public Coin(int inventory, int coinValue, CoinInserter inserter, CoinDispenser dispenser, VendingMachineController vmController)
 {
     numCoins          = inventory;
     value             = coinValue;
     coinInserter      = inserter;
     coinDispenser     = dispenser;
     this.vmController = vmController;
 }
 public CoinReturnButton(VendingMachineController controller)
 {
     vmController = controller;
 }
        private void Form1_Load(object sender, EventArgs e)
        {
            amountDisplay = new AmountDisplay(txtAmount);

            displayNum10Yen  = new DebugDisplay(txtNum10Yen);
            displayNum50Yen  = new DebugDisplay(txtNum50Yen);
            displayNum100Yen = new DebugDisplay(txtNum100Yen);
            displayNum500Yen = new DebugDisplay(txtNum500Yen);
            displayPrice0    = new DebugDisplay(txtPrice0);
            displayPrice1    = new DebugDisplay(txtPrice1);
            displayPrice2    = new DebugDisplay(txtPrice2);
            displayPrice3    = new DebugDisplay(txtPrice3);
            displayName0     = new DebugDisplay(txtName0);
            displayName1     = new DebugDisplay(txtName1);
            displayName2     = new DebugDisplay(txtName2);
            displayName3     = new DebugDisplay(txtName3);
            displayNumCans0  = new DebugDisplay(txtNumCan0);
            displayNumCans1  = new DebugDisplay(txtNumCan1);
            displayNumCans2  = new DebugDisplay(txtNumCan2);
            displayNumCans3  = new DebugDisplay(txtNumCan3);

            soldOutLight0 = new Light(pbxSOLight0, Color.Orange);
            soldOutLight1 = new Light(pbxSOLight1, Color.Orange);
            soldOutLight2 = new Light(pbxSOLight2, Color.Orange);
            soldOutLight3 = new Light(pbxSOLight3, Color.Orange);

            noChangeLight = new TimerLight(pbxNoChange, Color.Red, timer1);

            purchasableLight0 = new Light(pbxPurLight0, Color.Aqua);
            purchasableLight1 = new Light(pbxPurLight1, Color.Aqua);
            purchasableLight2 = new Light(pbxPurLight2, Color.Aqua);
            purchasableLight3 = new Light(pbxPurLight3, Color.Aqua);

            coinDispenser10Yen  = new CoinDispenser(txtChange10Yen);
            coinDispenser50Yen  = new CoinDispenser(txtChange50Yen);
            coinDispenser100Yen = new CoinDispenser(txtChange100Yen);
            coinDispenser500Yen = new CoinDispenser(txtChange500Yen);

            // All candispensers share the same output textbox for simulation
            canDispenser0 = new CanDispenser(txtCanDispenser, CANNAMES[0]);
            canDispenser1 = new CanDispenser(txtCanDispenser, CANNAMES[1]);
            canDispenser2 = new CanDispenser(txtCanDispenser, CANNAMES[2]);
            canDispenser3 = new CanDispenser(txtCanDispenser, CANNAMES[3]);

            // Instantiate your entity and control objects
            // Connect these objects

            cans         = new List <Can>();
            coins        = new List <Coin>();
            vmController = new VendingMachineController(cans, coins, noChangeLight, amountDisplay);
            canCola      = new Can(CANPRICES[0], NUMCANS[0], CANNAMES[0], soldOutLight0, purchaseButton0, canDispenser0, vmController, purchasableLight0);
            cans.Add(canCola);
            canPepsi = new Can(CANPRICES[1], NUMCANS[1], CANNAMES[1], soldOutLight1, purchaseButton1, canDispenser1, vmController, purchasableLight1);
            cans.Add(canPepsi);
            canDrPepper = new Can(CANPRICES[2], NUMCANS[2], CANNAMES[2], soldOutLight2, purchaseButton2, canDispenser2, vmController, purchasableLight2);
            cans.Add(canDrPepper);
            canSprite = new Can(CANPRICES[3], NUMCANS[3], CANNAMES[3], soldOutLight3, purchaseButton3, canDispenser3, vmController, purchasableLight3);
            cans.Add(canSprite);

            coin500 = new Coin(NUMCOINS[3], COINVALUES[3], coinInserter500Yen, coinDispenser500Yen, vmController);
            coins.Add(coin500);
            coin100 = new Coin(NUMCOINS[2], COINVALUES[2], coinInserter100Yen, coinDispenser100Yen, vmController);
            coins.Add(coin100);
            coin50 = new Coin(NUMCOINS[1], COINVALUES[1], coinInserter50Yen, coinDispenser50Yen, vmController);
            coins.Add(coin50);
            coin10 = new Coin(NUMCOINS[0], COINVALUES[0], coinInserter10Yen, coinDispenser10Yen, vmController);
            coins.Add(coin10);

            // You must replace the following default constructors with
            // constructors with arguments (non-default constructors)
            // to pass (set) the first object that ButtonPressed() will
            // visit

            purchaseButton0 = new PurchaseButton(canCola);
            purchaseButton1 = new PurchaseButton(canPepsi);
            purchaseButton2 = new PurchaseButton(canDrPepper);
            purchaseButton3 = new PurchaseButton(canSprite);

            // You must replace the following default constructors with
            // constructors that take armuments to pass the first object that
            // the CoinInserted() will call
            coinInserter10Yen  = new CoinInserter(coin10);
            coinInserter50Yen  = new CoinInserter(coin50);
            coinInserter100Yen = new CoinInserter(coin100);
            coinInserter500Yen = new CoinInserter(coin500);

            coinReturnButton = new CoinReturnButton(vmController);

            // Display debug information
            displayCanPricesAndNames();
            updateDebugDisplays();
        }