# Lab 2 Documentation ## Task - Create a new type of pickup with a new score rule. Give good variable names or document it properly so that the code is readable. - It has to subscribe to the onHit event and must inherit Consumable.cs - Edit Consumable.cs enum type to have one more type of pickup - The ItemManager must update score accordingly with this pickup type ## Documentation New object would have the sprite : - Created a new object which is denoted as type 4. Object will have the sprite of a dog. ```csharp= ... public enum items { // Creates the different types of pickup items. Useful for creating different types of items in the game world. GREENJEWEL = 0, YELLOWJEWEL = 1, GARBAGEJEWEL = 2, COIN = 3, /* * new object would have the sprite : Sprite will be a dog * - Created a new object which is denoted as type 4. Object will have the sprite of a dog. */ DOG = 4 } ... ``` The new pickup is called dog because the sprite is a dog. The following is the newly created Object ```csharp= /* * Created a new object called Dog which is denoted by a dog sprite in the game. * - Currently It subscribes to an onhit event as seen in line 19 * - inherits Consumable. * - This is similar to the coin. */ public class Dog : Consumable { // Coin Properties public int amount = 1; protected GameObject dog; public Dog(items type, int cost, float happiness = 0 ) : base(type, 0, happiness) { ItemManager.onHit += hit; } public void create(GameObject dog) { dog.GetComponent<BasicObjectScript>().type = type; dog.GetComponent<BasicObjectScript>().index = 0; this.dog = dog; } public void hit(items type, int index) { if (type == this.type) { dog.SetActive(false); amount-- ; } } } ``` I have also updated the scoring rule for the dog. This can be seen in the following. ```csharp= ... /* * New Scoring system for the new object. * - With the DOG object now players would need to get the coin first before they take the dog. * Concept-wise imagine buying a dog with the collected jewels which is traded for the coin. * - Player gets rewards with the preset dog health if they got the coin first * - else player gets punished. */ else if (type == Consumable.items.DOG) { if (coin.amount == 0 && score >= 0) { score += (int)dog.health * 5; } else score += Mathf.FloorToInt(-1 * 10 * speed * dog.health); } ... ``` New End condition is also added ```csharp= ... if (score >= 50 && dog.amount == 0 && coin.amount ==0) { //... then set the text property of our winText object to "You win!" winText.text = "You win!"; winText.enabled = true; // stop time Time.timeScale = 0; Application.Quit(); } //if there's nothing else to eat else if (coin.amount == 0 && greenJewel.amount == 0 && yellowJewel.amount == 0 && garbageJewel.amount == 0 && dog.amount == 0) { winText.text = "You Lose!"; winText.enabled = true; Time.timeScale = 0; } ... ``` ## Youtube link: https://youtu.be/VWwrwoCzul4