# Fruit Cannon
Drag the ball to push fruits into corresponding contours
![[DESIGNS/TOYS/FruitCannon.gif]]
## Code
#### Cannon Controller
```cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DrNDr_III_Cannon : MonoBehaviour
{
public List<GameObject> fruitsList = new List<GameObject>();
public Vector2 forceVector = new Vector3(5, 5);
public Transform firePosition;
private void Start()
{
InvokeRepeating("ShootFruits", 0, 2);
}
private void ShootFruits()
{
int fruitIndex = Random.Range(0, fruitsList.Count);
GameObject fruit = Instantiate(fruitsList[fruitIndex],
firePosition.position, Quaternion.identity);
fruit.name = fruitsList[fruitIndex].name;
fruit.GetComponent<Rigidbody2D>().AddForce(
forceVector, ForceMode2D.Impulse);
}
}
```
#### Ball Dragger
```cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DrNDr_III_Football : MonoBehaviour
{
private bool isDragged;
private void OnMouseDown()
{
isDragged = true;
}
private void OnMouseUp()
{
isDragged = false;
}
private void DragObject()
{
if (isDragged)
{
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
transform.Translate(mousePos);
}
}
private void Update()
{
DragObject();
}
}
```
#### UI Controller
```cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class DrNDr_III_UI : MonoBehaviour
{
public TMP_Text pearCounter;
public TMP_Text bananaCounter;
public TMP_Text grapesCounter;
private int pearNum;
private int bananaNum;
private int grapesNum;
public void UpdateCounter(string fruitName)
{
if (fruitName == "Pear") pearNum++;
if (fruitName == "Banana") bananaNum++;
if (fruitName == "Grape") grapesNum++;
DisplayUpdatedUI();
}
public void DisplayUpdatedUI()
{
pearCounter.text = pearNum.ToString();
bananaCounter.text = bananaNum.ToString();
grapesCounter.text = grapesNum.ToString();
}
}
```