├── .gitignore ├── README.md ├── assessments ├── portfolio-marking-rubric.pdf └── portfolio.pdf ├── course-directive.pdf ├── lecture-notes ├── 01-github-unity-main-camera-sprite-rigidbody-2d-collider-2d-script.md ├── 02-physic-material-2d-tag-canvas-text.md ├── 03-multiple-inputs-fixed-update-prefabs-grid-snap-panel.md ├── 04-audio │ ├── brick.wav │ ├── kill-zone.wav │ ├── paddle.wav │ └── wall.wav ├── 04-instantiate-design-patterns-audio-scene-management-assets.md ├── 05-assets │ ├── Audio │ │ ├── sfx_laser1.ogg │ │ ├── sfx_laser2.ogg │ │ ├── sfx_lose.ogg │ │ ├── sfx_shieldDown.ogg │ │ ├── sfx_shieldUp.ogg │ │ ├── sfx_twoTone.ogg │ │ └── sfx_zap.ogg │ ├── Fonts │ │ ├── kenvector_future.ttf │ │ └── kenvector_future_thin.ttf │ └── Sprites │ │ ├── backgrounds │ │ ├── black.png │ │ ├── blue.png │ │ ├── darkPurple.png │ │ └── purple.png │ │ ├── button │ │ ├── buttonBlue.png │ │ ├── buttonGreen.png │ │ ├── buttonRed.png │ │ └── buttonYellow.png │ │ ├── enemy │ │ ├── enemyBlack1.png │ │ ├── enemyBlack2.png │ │ ├── enemyBlack3.png │ │ ├── enemyBlack4.png │ │ ├── enemyBlack5.png │ │ ├── enemyBlue1.png │ │ ├── enemyBlue2.png │ │ ├── enemyBlue3.png │ │ ├── enemyBlue4.png │ │ ├── enemyBlue5.png │ │ ├── enemyGreen1.png │ │ ├── enemyGreen2.png │ │ ├── enemyGreen3.png │ │ ├── enemyGreen4.png │ │ ├── enemyGreen5.png │ │ ├── enemyRed1.png │ │ ├── enemyRed2.png │ │ ├── enemyRed3.png │ │ ├── enemyRed4.png │ │ └── enemyRed5.png │ │ ├── fire │ │ ├── fire00.png │ │ ├── fire01.png │ │ ├── fire02.png │ │ ├── fire03.png │ │ ├── fire04.png │ │ ├── fire05.png │ │ ├── fire06.png │ │ ├── fire07.png │ │ ├── fire08.png │ │ ├── fire09.png │ │ ├── fire10.png │ │ ├── fire11.png │ │ ├── fire12.png │ │ ├── fire13.png │ │ ├── fire14.png │ │ ├── fire15.png │ │ ├── fire16.png │ │ ├── fire17.png │ │ ├── fire18.png │ │ └── fire19.png │ │ ├── laser │ │ ├── laserBlue01.png │ │ ├── laserBlue02.png │ │ ├── laserBlue03.png │ │ ├── laserBlue04.png │ │ ├── laserBlue05.png │ │ ├── laserBlue06.png │ │ ├── laserBlue07.png │ │ ├── laserBlue08.png │ │ ├── laserBlue09.png │ │ ├── laserBlue10.png │ │ ├── laserBlue11.png │ │ ├── laserBlue12.png │ │ ├── laserBlue13.png │ │ ├── laserBlue14.png │ │ ├── laserBlue15.png │ │ ├── laserBlue16.png │ │ ├── laserGreen01.png │ │ ├── laserGreen02.png │ │ ├── laserGreen03.png │ │ ├── laserGreen04.png │ │ ├── laserGreen05.png │ │ ├── laserGreen06.png │ │ ├── laserGreen07.png │ │ ├── laserGreen08.png │ │ ├── laserGreen09.png │ │ ├── laserGreen10.png │ │ ├── laserGreen11.png │ │ ├── laserGreen12.png │ │ ├── laserGreen13.png │ │ ├── laserGreen14.png │ │ ├── laserGreen15.png │ │ ├── laserGreen16.png │ │ ├── laserRed01.png │ │ ├── laserRed02.png │ │ ├── laserRed03.png │ │ ├── laserRed04.png │ │ ├── laserRed05.png │ │ ├── laserRed06.png │ │ ├── laserRed07.png │ │ ├── laserRed08.png │ │ ├── laserRed09.png │ │ ├── laserRed10.png │ │ ├── laserRed11.png │ │ ├── laserRed12.png │ │ ├── laserRed13.png │ │ ├── laserRed14.png │ │ ├── laserRed15.png │ │ └── laserRed16.png │ │ ├── meteor │ │ ├── meteorBrown_big1.png │ │ ├── meteorBrown_big2.png │ │ ├── meteorBrown_big3.png │ │ ├── meteorBrown_big4.png │ │ ├── meteorBrown_med1.png │ │ ├── meteorBrown_med3.png │ │ ├── meteorBrown_small1.png │ │ ├── meteorBrown_small2.png │ │ ├── meteorBrown_tiny1.png │ │ ├── meteorBrown_tiny2.png │ │ ├── meteorGrey_big1.png │ │ ├── meteorGrey_big2.png │ │ ├── meteorGrey_big3.png │ │ ├── meteorGrey_big4.png │ │ ├── meteorGrey_med1.png │ │ ├── meteorGrey_med2.png │ │ ├── meteorGrey_small1.png │ │ ├── meteorGrey_small2.png │ │ ├── meteorGrey_tiny1.png │ │ └── meteorGrey_tiny2.png │ │ ├── player-life │ │ ├── playerLife1_blue.png │ │ ├── playerLife1_green.png │ │ ├── playerLife1_orange.png │ │ ├── playerLife1_red.png │ │ ├── playerLife2_blue.png │ │ ├── playerLife2_green.png │ │ ├── playerLife2_orange.png │ │ ├── playerLife2_red.png │ │ ├── playerLife3_blue.png │ │ ├── playerLife3_green.png │ │ ├── playerLife3_orange.png │ │ └── playerLife3_red.png │ │ ├── player-ship │ │ ├── playerShip1_blue.png │ │ ├── playerShip1_green.png │ │ ├── playerShip1_orange.png │ │ ├── playerShip1_red.png │ │ ├── playerShip2_blue.png │ │ ├── playerShip2_green.png │ │ ├── playerShip2_orange.png │ │ ├── playerShip2_red.png │ │ ├── playerShip3_blue.png │ │ ├── playerShip3_green.png │ │ ├── playerShip3_orange.png │ │ └── playerShip3_red.png │ │ ├── power-ups │ │ ├── bold_silver.png │ │ ├── bolt_bronze.png │ │ ├── bolt_gold.png │ │ ├── pill_blue.png │ │ ├── pill_green.png │ │ ├── pill_red.png │ │ ├── pill_yellow.png │ │ ├── powerupBlue.png │ │ ├── powerupBlue_bolt.png │ │ ├── powerupBlue_shield.png │ │ ├── powerupBlue_star.png │ │ ├── powerupGreen.png │ │ ├── powerupGreen_bolt.png │ │ ├── powerupGreen_shield.png │ │ ├── powerupGreen_star.png │ │ ├── powerupRed.png │ │ ├── powerupRed_bolt.png │ │ ├── powerupRed_shield.png │ │ ├── powerupRed_star.png │ │ ├── powerupYellow.png │ │ ├── powerupYellow_bolt.png │ │ ├── powerupYellow_shield.png │ │ ├── powerupYellow_star.png │ │ ├── shield_bronze.png │ │ ├── shield_gold.png │ │ ├── shield_silver.png │ │ ├── star_bronze.png │ │ ├── star_gold.png │ │ ├── star_silver.png │ │ ├── things_bronze.png │ │ ├── things_gold.png │ │ └── things_silver.png │ │ └── ufo │ │ ├── ufoBlue.png │ │ ├── ufoGreen.png │ │ ├── ufoRed.png │ │ └── ufoYellow.png ├── 05-input-manager-clamping-prefab-variants.md ├── 06-invoke-api-integration-saving-to-file.md ├── 07-assets.zip ├── 07-spritesheet-sorting-layer.md ├── 08-animation-tilemaps-tile-palettes.md ├── 09-collision-layers.md └── 10-room-random-generation.md └── resources ├── img ├── 01-images │ ├── 01-images-1.png │ ├── 01-images-10.png │ ├── 01-images-11.png │ ├── 01-images-12.png │ ├── 01-images-13.png │ ├── 01-images-2.png │ ├── 01-images-3.png │ ├── 01-images-4.png │ ├── 01-images-5.png │ ├── 01-images-6.png │ ├── 01-images-7.png │ ├── 01-images-8.png │ └── 01-images-9.png ├── 02-images │ ├── 02-images-1.png │ ├── 02-images-10.png │ ├── 02-images-11.png │ ├── 02-images-12.png │ ├── 02-images-13.png │ ├── 02-images-14.png │ ├── 02-images-15.png │ ├── 02-images-16.png │ ├── 02-images-17.png │ ├── 02-images-18.png │ ├── 02-images-19.png │ ├── 02-images-2.png │ ├── 02-images-3.png │ ├── 02-images-4.png │ ├── 02-images-5.png │ ├── 02-images-6.png │ ├── 02-images-7.png │ ├── 02-images-8.png │ ├── 02-images-9.png │ └── expected-outputs │ │ ├── 02-expected-output-1.png │ │ ├── 02-expected-output-2.png │ │ └── 02-expected-output-3.png ├── 03-images │ ├── 03-image-1.png │ ├── 03-image-10.png │ ├── 03-image-11.png │ ├── 03-image-12.png │ ├── 03-image-13.png │ ├── 03-image-14.png │ ├── 03-image-2.png │ ├── 03-image-3.png │ ├── 03-image-4.png │ ├── 03-image-5.png │ ├── 03-image-6.png │ ├── 03-image-7.png │ ├── 03-image-8.png │ └── 03-image-9.png ├── 04-images │ ├── 04-image-1.png │ ├── 04-image-10.png │ ├── 04-image-11.png │ ├── 04-image-12.png │ ├── 04-image-13.png │ ├── 04-image-14.png │ ├── 04-image-15.png │ ├── 04-image-16.png │ ├── 04-image-17.png │ ├── 04-image-18.png │ ├── 04-image-19.png │ ├── 04-image-2.png │ ├── 04-image-3.png │ ├── 04-image-4.png │ ├── 04-image-5.png │ ├── 04-image-6.png │ ├── 04-image-7.png │ ├── 04-image-8.png │ └── 04-image-9.png ├── 05-images │ ├── 05-image-1.png │ ├── 05-image-2.png │ ├── 05-image-3.png │ ├── 05-image-4.png │ ├── 05-image-5.png │ └── 05-image-6.png ├── 07-images │ ├── 07-image-1.png │ ├── 07-image-10.png │ ├── 07-image-11.png │ ├── 07-image-12.png │ ├── 07-image-2.png │ ├── 07-image-3.png │ ├── 07-image-4.png │ ├── 07-image-5.png │ ├── 07-image-6.png │ ├── 07-image-7.png │ ├── 07-image-8.png │ └── 07-image-9.png ├── 08-images │ ├── 08-image-1.png │ ├── 08-image-10.png │ ├── 08-image-11.png │ ├── 08-image-12.png │ ├── 08-image-13.png │ ├── 08-image-14.png │ ├── 08-image-15.png │ ├── 08-image-16.png │ ├── 08-image-17.png │ ├── 08-image-18.png │ ├── 08-image-19.png │ ├── 08-image-2.png │ ├── 08-image-20.png │ ├── 08-image-21.png │ ├── 08-image-22.png │ ├── 08-image-23.png │ ├── 08-image-24.png │ ├── 08-image-25.png │ ├── 08-image-26.png │ ├── 08-image-27.png │ ├── 08-image-28.png │ ├── 08-image-29.png │ ├── 08-image-3.png │ ├── 08-image-30.png │ ├── 08-image-31.png │ ├── 08-image-4.png │ ├── 08-image-5.png │ ├── 08-image-6.png │ ├── 08-image-7.png │ ├── 08-image-8.png │ └── 08-image-9.png ├── 09-images │ ├── 09-image-1.png │ ├── 09-image-2.png │ ├── 09-image-3.png │ ├── 09-image-4.png │ ├── 09-image-5.png │ ├── 09-image-6.png │ ├── 09-image-7.png │ └── 09-image-8.png ├── 10-images │ ├── 10-image-1.png │ ├── 10-image-10.png │ ├── 10-image-11.png │ ├── 10-image-12.png │ ├── 10-image-2.png │ ├── 10-image-3.png │ ├── 10-image-4.png │ ├── 10-image-5.png │ ├── 10-image-6.png │ ├── 10-image-7.png │ ├── 10-image-8.png │ └── 10-image-9.png └── logo.jpg ├── rubrics └── portfolio-marking-rubric.docx └── tex ├── course-directive.log ├── course-directive.pdf ├── course-directive.tex ├── portfolio.log └── portfolio.tex /.gitignore: -------------------------------------------------------------------------------- 1 | # latex 2 | *.aux 3 | *.fdb_latexmk 4 | *.fls 5 | *.out 6 | *.synctex.gz 7 | *.xdv -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ID623001 Introduction to Algorithmic Problem Solving 2 | -------------------------------------------------------------------------------- /assessments/portfolio-marking-rubric.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/assessments/portfolio-marking-rubric.pdf -------------------------------------------------------------------------------- /assessments/portfolio.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/assessments/portfolio.pdf -------------------------------------------------------------------------------- /course-directive.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/course-directive.pdf -------------------------------------------------------------------------------- /lecture-notes/02-physic-material-2d-tag-canvas-text.md: -------------------------------------------------------------------------------- 1 | ## Week 02 2 | 3 | ## Previous Class 4 | 5 | Link to the previous class: [Week 01](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/01-github-unity-main-camera-sprite-rigidbody-2d-collider-script.md) 6 | 7 | --- 8 | 9 | ## Pong Game 10 | 11 | In this module, you will continue to develop **Pong** using **Unity**. 12 | 13 | --- 14 | 15 | ## Physics Material 2D 16 | 17 | **Physics Material 2D** is used to adjust the friction and bounciness of colliders. 18 | 19 | In the **Assets** folder, create a new folder called **Materials**. Double-click the **Materials** folder to open it. Right-click in the **Materials** folder and select **Create > 2D > Physics Material 2D**. Name the material `BallPhysicsMaterial`. 20 | 21 | ![](../resources/img/02-images/02-images-1.png) 22 | 23 | In the **Inspector**, change the **Friction** to `0` and the **Bounciness** to `1`. Drag and drop the `BallPhysicsMaterial` onto the `Ball` **Sprite** in the **Hierarchy**. 24 | 25 | ![](../resources/img/02-images/02-images-2.png) 26 | 27 | Click on the `Ball` **Sprite** in the **Hierarchy**. In the **Inspector**, change the **Material** to `BallPhysicsMaterial`. 28 | 29 | ![](../resources/img/02-images/02-images-3.png) 30 | 31 | Click the **Play** button to test the game. The ball should now bounce off the paddles, walls and goals. You will notice a minor issue where the paddles and ball rotate when they collide. 32 | 33 | To fix this, click on the `Ball` **Sprite** in the **Hierarchy**. In the **Inspector**, check the **Rigidbody 2D > Constraints > Freeze Rotation** box for the **Z** axis. Repeat this process for the `LeftPaddle` and `RightPaddle` **Sprite**. 34 | 35 | ![](../resources/img/02-images/02-images-4.png) 36 | 37 | Click the **Play** button to test the game. The paddles and ball should no longer rotate when they collide. Again, you will notice a minor issue where the paddles move on the **X** axis when they collide with the ball. 38 | 39 | Click on the `LeftPaddle` **Sprite** in the **Hierarchy**. In the **Inspector**, check the **Rigidbody 2D > Constraints > Freeze Position** box for the **X** axis. Repeat this process for the `RightPaddle` **Sprite**. 40 | 41 | ![](../resources/img/02-images/02-images-5.png) 42 | 43 | --- 44 | 45 | ## Trigger 46 | 47 | A **Trigger** is a collider that does not physically interact with other colliders. It is used to detect when other colliders enter or exit its area. For example, you can use a trigger to detect when the ball collides with the left or right goals. 48 | 49 | Click on the `LeftGoal` and `RightGoal` **Sprites** in the **Hierarchy**. In the **Inspector**, check the **Box Collider 2D > Is Trigger** box. 50 | 51 | ![](../resources/img/02-images/02-images-6.png) 52 | 53 | --- 54 | 55 | ## Tag 56 | 57 | A **Tag** is a label that you can assign to **GameObjects**. You can use tags to identify **GameObjects** in your scripts. For example, you can use tags to identify the ball, paddles, walls and goals. 58 | 59 | Click on the `Ball` **Sprite** in the **Hierarchy**. In the **Inspector**, click the **Tag** dropdown menu and select **Add Tag**. Click the **+** button to add a new tag. Name the tag `Ball` and click **Save**. Repeat this process for the `TopWall`, `BottomWall`, `LeftGoal`, `RightGoal`, `LeftPaddle` and `RightPaddle` **Sprites**. 60 | 61 | ![](../resources/img/02-images/02-images-7.png) 62 | 63 | Click on the `Ball` **Sprite** in the **Hierarchy**. In the **Inspector**, click the **Tag** dropdown menu and select the `Ball` tag. Repeat this process for the `TopWall`, `BottomWall`, `LeftGoal`, `RightGoal`, `LeftPaddle` and `RightPaddle` **Sprites**. 64 | 65 | ![](../resources/img/02-images/02-images-8.png) 66 | 67 | --- 68 | 69 | ## Reset Ball 70 | 71 | In this section, you will create a script that resets the ball when it enters the left or right goals. In the **Scripts** folder, create a new script called `GoalController`. 72 | 73 | Add the following code to the `GoalController` script: 74 | 75 | ```csharp 76 | using System.Collections; 77 | using System.Collections.Generic; 78 | using UnityEngine; 79 | 80 | public class GoalController : MonoBehaviour 81 | { 82 | [SerializeField] private bool isLeftPaddle; 83 | [SerializeField] private BallController ball; 84 | 85 | private void OnTriggerEnter2D(Collider2D collision) 86 | { 87 | if (collision.gameObject.CompareTag("Ball")) 88 | { 89 | if (!isLeftPaddle) 90 | { 91 | // Left paddle scored 92 | } 93 | else 94 | { 95 | // Right paddle scored 96 | } 97 | 98 | ball.Reset(); 99 | } 100 | } 101 | } 102 | ``` 103 | 104 | What is happening in the code above? 105 | 106 | - The `OnTriggerEnter2D` method is called when the `Ball` **Sprite** enters the `LeftGoal` or `RightGoal` **Sprite** collider 107 | - If the `Ball` **Sprite** enters the `LeftGoal` or `RightGoal` **Sprite** collider, the `Reset` method in the `BallController` script is called 108 | 109 | Drag and drop the `GoalController` script onto the `LeftGoal` and `RightGoal` **Sprites** in the **Hierarchy**. Click on the `LeftGoal` **Sprite** in the **Hierarchy**. Change the `isLeftPaddle` value to `true` and the `ball` value to the `Ball` **Sprite**. Repeat this process for the `RightGoal` **Sprite** but change the `isLeftPaddle` value to `false`. 110 | 111 | ![](../resources/img/02-images/02-images-9.png) 112 | 113 | --- 114 | 115 | ## Game Manager 116 | 117 | In this section, you will create a script that keeps track of the left and right paddle scores. In the **Scripts** folder, create a new script called `GameController`. 118 | 119 | Add the following code to the `GameController` script: 120 | 121 | ```csharp 122 | using System.Collections; 123 | using System.Collections.Generic; 124 | using UnityEngine; 125 | 126 | public class GameController : MonoBehaviour 127 | { 128 | private int leftPaddleScore = 0; 129 | private int rightPaddleScore = 0; 130 | 131 | public void LeftPaddleScored() 132 | { 133 | leftPaddleScore++; 134 | Debug.Log($"Left Paddle Scored: {leftPaddleScore}"); 135 | } 136 | 137 | public void RightPaddleScored() 138 | { 139 | rightPaddleScore++; 140 | Debug.Log($"Right Paddle Scored: {rightPaddleScore}"); 141 | } 142 | } 143 | ``` 144 | 145 | > **Note:** The `Debug.Log` method is used to display messages in the **Console**. You can use this method to debug your scripts. Please remove the `Debug.Log` method calls when you have finished testing your scripts. 146 | 147 | In the **Hierarchy**, create an empty **GameObject**, i.e., **Create Empty** called `Game`. Drag and drop the `GameController` script onto the `Game` **GameObject**. Also, reset the `Game` **GameObject**'s **Transform** values to `0`. 148 | 149 | ![](../resources/img/02-images/02-images-10.png) 150 | 151 | **Tasks:** 152 | 153 | 1. In the `GoalController` script, add a reference to the `GameController` script 154 | 2. Click on the `LeftGoal` **Sprite** in the **Hierarchy**. Change the `game` value to the `Game` **GameObject**. Repeat this process for the `RightGoal` **Sprite**. 155 | 156 | ![](../resources/img/02-images/02-images-11.png) 157 | 158 | 3. In the `GoalController` script, call the `LeftPaddleScored` method when the `Ball` **Sprite** enters the `LeftGoal` **Sprite** collider 159 | 4. In the `GoalController` script, call the `RightPaddleScored` method when the `Ball` **Sprite** enters the `RightGoal` **Sprite** collider 160 | 161 | Click the **Play** button to test the game. The left and right paddle scores should be displayed in the **Console** when the ball enters the left or right goals. 162 | 163 | --- 164 | 165 | ## Canvas 166 | 167 | The **Canvas** is a **GameObject** that holds all UI elements. You will use the **Canvas** to display the left and right paddle scores. 168 | 169 | In the **Hierarchy**, right-click and select **UI > Canvas**. This is also going to create an **EventSystem** **GameObject**. 170 | 171 | ![](../resources/img/02-images/02-images-12.png) 172 | 173 | Right-click on the **Canvas** **GameObject** and select **UI > Text - Text Mesh Pro**. 174 | 175 | ![](../resources/img/02-images/02-images-13.png) 176 | 177 | You will need to install **Text Mesh Pro** if you have not already done so. 178 | 179 | ![](../resources/img/02-images/02-images-14.png) 180 | 181 | You will notice the **Text - Text Mesh Pro** **GameObject** is created as a child of the **Canvas** **GameObject**. 182 | 183 | > **Note:** The **EventSystem** **GameObject** is used to manage input from the keyboard, mouse and touch. You do not need to modify the **EventSystem** **GameObject**. 184 | 185 | Zoom out in the **Scene** to see the **Canvas** **GameObject** and **Text - Text Mesh Pro** **GameObject**. 186 | 187 | ![](../resources/img/02-images/02-images-15.png) 188 | 189 | What happens when you resize the **Scene**? The **Text - Text Mesh Pro** **GameObject** will resize to fit the **Scene**. 190 | 191 | ![](../resources/img/02-images/02-images-16.png) 192 | 193 | Click on the **Canvas** **GameObject** in the **Hierarchy**. In the **Inspector**, change the **Canvas Scaler > UI Scale Mode** to `Scale With Screen Size` and the **Canvas Scaler > Reference Resolution** to `1920 x 1080`. 194 | 195 | ![](../resources/img/02-images/02-images-17.png) 196 | 197 | **Tasks:** 198 | 199 | 1. Rename the **Text - Text Mesh Pro** **GameObject**'s name to `LeftPaddleScoreText`. 200 | 2. Click on the **Text - Text Mesh Pro** **GameObject** in the **Hierarchy** and change the **Font Size** to `85`. 201 | 3. Move the **Text - Text Mesh Pro** **GameObject** to an appropriate position on the **Canvas** **GameObject**. 202 | 4. Change the **Text - Text Mesh Pro** **GameObject**'s **Text** value to `0`. 203 | 5. Repeat the above steps for the right paddle score. 204 | 205 | After completing the above tasks, your **Canvas** **GameObject** should look similar to the image below. 206 | 207 | ![](../resources/img/02-images/02-images-18.png) 208 | 209 | You are now ready to update the left and right paddle scores in the **Canvas** **GameObject**. 210 | 211 | In the `GameController` script, update the `LeftPaddleScored` and `RightPaddleScored` methods to update the left and right paddle scores in the **Canvas** **GameObject**. 212 | 213 | ```csharp 214 | // Omitted for brevity 215 | 216 | using TMPro; 217 | 218 | public class GameController : MonoBehaviour 219 | { 220 | // Omitted for brevity 221 | 222 | [SerializeField] TextMeshProUGUI leftPaddleScoreText; 223 | [SerializeField] TextMeshProUGUI rightPaddleScoreText; 224 | 225 | public void LeftPaddleScored() 226 | { 227 | // Omitted for brevity 228 | leftPaddleScoreText.text = leftPaddleScore.ToString(); 229 | } 230 | 231 | public void RightPaddleScored() 232 | { 233 | // Omitted for brevity 234 | rightPaddleScoreText.text = rightPaddleScore.ToString(); 235 | } 236 | } 237 | ``` 238 | 239 | In the **Inspector**, drag and drop the `LeftPaddleScoreText` and `RightPaddleScoreText` **Text - Text Mesh Pro** **GameObjects** onto the `GameController` script's `leftPaddleScoreText` and `rightPaddleScoreText` fields. 240 | 241 | ![](../resources/img/02-images/02-images-19.png) 242 | 243 | Click the **Play** button to test the game. The left and right paddle scores should be displayed in the **Canvas** **GameObject**. 244 | 245 | --- 246 | 247 | ## Formative Assessment 248 | 249 | Learning to use AI tools is an important skill. While AI tools are powerful, you **must** be aware of the following: 250 | 251 | - If you provide an AI tool with a prompt that is not refined enough, it may generate a not-so-useful response 252 | - Do not trust the AI tool's responses blindly. You **must** still use your judgement and may need to do additional research to determine if the response is correct 253 | - Acknowledge what AI tool you have used. In the assessment's repository **README.md** file, please include what prompt(s) you provided to the AI tool and how you used the response(s) to help you with your work 254 | 255 | --- 256 | 257 | ### Task 1 258 | 259 | Create a center line using a **Sprite**. The center line should be a thin line that runs vertically down the center of the game. 260 | 261 | --- 262 | 263 | ### Task 2 (Independent Research) 264 | 265 | When a new game starts, randomise the colour of the ball, paddles, walls, goals and center line. The colour of the walls, goals and center line should be the same. 266 | 267 | > **Hint on how to solve this task:** To access a **Sprite**'s **Color** property, you will need to access the **SpriteRenderer** component. 268 | 269 | ```csharp 270 | private SpriteRenderer ballRenderer; 271 | 272 | void Start() 273 | { 274 | ballRenderer = GetComponent(); 275 | ballRenderer.color = new Color(Random.value, Random.value, Random.value); 276 | } 277 | ``` 278 | 279 | --- 280 | 281 | ### Task 3 282 | 283 | When a player presses the **P** key, pause the game. When the game is paused, display **Paused** in the center of the game. When the player presses the **P** key again, unpause the game. 284 | 285 | > **Hint on how to solve this task:** To pause the game, you can set the **Time.timeScale** property to `0f`. To unpause the game, you can set the **Time.timeScale** property to `1f`. 286 | 287 | --- 288 | 289 | ### Task 4 290 | 291 | When a player scores 10 points, stop the game, hide the ball, paddles and center line and display either **Left Paddle Wins! Press R to Restart** or **Right Paddle Wins! Press R to Restart** in the center of the game. 292 | 293 | --- 294 | 295 | ### Task 5 (Independent Research) 296 | 297 | When a player presses the **R** key, restart the game. 298 | 299 | > **Hint on how to solve this task:** To restart the game, you can reload the current scene using the **SceneManager.LoadScene** method. 300 | 301 | ```csharp 302 | SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); 303 | ``` 304 | 305 | --- 306 | 307 | ### Expected Outputs 308 | 309 | ![](../resources/img/02-images/expected-outputs/02-expected-output-1.png) 310 | 311 | ![](../resources/img/02-images/expected-outputs/02-expected-output-2.png) 312 | 313 | ![](../resources/img/02-images/expected-outputs/02-expected-output-3.png) 314 | 315 | --- 316 | 317 | ## Next Class 318 | 319 | Link to the next class: [Week 03](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/03-multiple-inputs-fixed-update-prefabs-grid-snap-panel.md) 320 | -------------------------------------------------------------------------------- /lecture-notes/03-multiple-inputs-fixed-update-prefabs-grid-snap-panel.md: -------------------------------------------------------------------------------- 1 | ## Week 03 2 | 3 | ## Previous Class 4 | 5 | Link to the previous class: [Week 02](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/02-physic-material-2d-tag-canvas-text.md) 6 | 7 | --- 8 | 9 | ## Breakout Game 10 | 11 | In this module, you will develop **Breakout** using **Unity**. Create a new **Unity** project using the **2D (Built-In Render Pipeline)** template. Name your project `breakout` and select a location to save your project. Click on the **Create project** button. 12 | 13 | --- 14 | 15 | ## Sprites 16 | 17 | Setup your scene with `Ball`, `TopWall`, `LeftWall`, `RightWall` and `Paddle` sprites. 18 | 19 | > **Note:** You can organise your **GameObjects** in the **Hierarchy**. For example, you can create an empty **GameObject** and name it `Walls` and then drag all the wall **GameObjects** under it. 20 | 21 | ![](../resources/img/03-images/03-image-1.png) 22 | 23 | **Task:** 24 | 25 | 1. Add a **Box Collider 2D** component to the `TopWall`, `LeftWall` and `RightWall` sprites. 26 | 27 | --- 28 | 29 | ## Paddle 30 | 31 | Add a **Rigidbody 2D** and a **Box Collider 2D** component to the `Paddle` sprite. 32 | 33 | **Tasks:** 34 | 35 | 1. Set the `Gravity Scale` to `0`. 36 | 2. Prevent the `Paddle` sprite from rotating. 37 | 3. Prevent the `Paddle` sprite from moving in the Y-axis. 38 | 39 | Create a new script called `PaddleController` and attach it to the `Paddle` sprite. 40 | 41 | ```csharp 42 | using System.Collections; 43 | using System.Collections.Generic; 44 | using UnityEngine; 45 | 46 | public class PaddleController : MonoBehaviour 47 | { 48 | [SerializeField] private Rigidbody2D rb; 49 | [SerializeField] private float speed = 10f; 50 | 51 | private float direction; 52 | 53 | void Update() 54 | { 55 | if (Input.GetKey(KeyCode.RightArrow)) 56 | { 57 | direction = 1f; 58 | } 59 | else if (Input.GetKey(KeyCode.LeftArrow)) 60 | { 61 | direction = -1f; 62 | } 63 | else 64 | { 65 | direction = 0f; 66 | } 67 | 68 | rb.linearVelocity = new Vector2(direction, 0f) * speed; 69 | } 70 | } 71 | ``` 72 | 73 | Click the **Play** button to test the game. You should be able to move the `Paddle` sprite left and right. 74 | 75 | --- 76 | 77 | ## Multiple Inputs 78 | 79 | Currently, the `Paddle` sprite can only be moved using the arrow keys. Let us add support for the `A` and `D` keys. Update the `PaddleController` script as follows: 80 | 81 | ```csharp 82 | // Omitted for brevity 83 | 84 | public class PaddleController : MonoBehaviour 85 | { 86 | // Omitted for brevity 87 | 88 | void Update() 89 | { 90 | if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)) 91 | { 92 | direction = 1f; 93 | } 94 | else if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A)) 95 | { 96 | direction = -1f; 97 | } 98 | 99 | // Omitted for brevity 100 | } 101 | } 102 | ``` 103 | 104 | Click the **Play** button to test the game. You should be able to move the `Paddle` sprite left and right using the arrow keys and the `A` and `D` keys. 105 | 106 | --- 107 | 108 | ## Fixed Update 109 | 110 | The `Update` method is called once per frame. If you are using physics in your game, you should use the `FixedUpdate` method instead. The `FixedUpdate` method is called at a fixed interval and is independent of the frame rate. 111 | 112 | Update the `PaddleController` script to use the `FixedUpdate` method: 113 | 114 | ```csharp 115 | // Omitted for brevity 116 | 117 | public class PaddleController : MonoBehaviour 118 | { 119 | // Omitted for brevity 120 | 121 | void FixedUpdate() 122 | { 123 | rb.linearVelocity = new Vector2(direction, 0f) * speed; 124 | } 125 | 126 | void Update() 127 | { 128 | if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)) 129 | { 130 | direction = 1f; 131 | } 132 | else if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A)) 133 | { 134 | direction = -1f; 135 | } 136 | else 137 | { 138 | direction = 0f; 139 | } 140 | } 141 | } 142 | ``` 143 | 144 | **Task:** 145 | 146 | 1. In your **Pong** game, update the `PlayerController` script to use the `FixedUpdate` method. 147 | 148 | --- 149 | 150 | ## Ball 151 | 152 | Add a **Rigidbody 2D** and a **Circle Collider 2D** component to the `Ball` sprite. 153 | 154 | **Tasks:** 155 | 156 | 1. Set the `Gravity Scale` to `0`. 157 | 2. Prevent the `Ball` sprite from rotating. 158 | 3. Add a new **Physics Material 2D** called `BounceMaterial` and set the `Bounciness` to `0.987`. 159 | 4. In the **Rigidbody 2D** component, set the `Material` to `BallPhysicsMaterial`. 160 | 161 | Create a new script called `BallController` and attach it to the `Ball` sprite. 162 | 163 | ```csharp 164 | using System.Collections; 165 | using System.Collections.Generic; 166 | using UnityEngine; 167 | 168 | public class BallController : MonoBehaviour 169 | { 170 | [SerializeField] private Rigidbody2D rb; 171 | [SerializeField] private float speed = 5f; 172 | 173 | Vector2 startPos; 174 | 175 | void Start() 176 | { 177 | startPos = transform.position; 178 | 179 | Reset(); 180 | } 181 | 182 | void FixedUpdate() 183 | { 184 | rb.linearVelocity = rb.linearVelocity.normalized * speed; 185 | } 186 | 187 | public void Reset() 188 | { 189 | transform.position = Vector3.zero; 190 | 191 | float x = 0; 192 | 193 | int randNum = Random.Range(0, 2); 194 | 195 | if (randNum == 0) 196 | { 197 | x = 1f; 198 | } 199 | else if (randNum == 1) 200 | { 201 | x = -1f; 202 | } 203 | 204 | rb.linearVelocity = new Vector2(x, 1f) * speed; 205 | } 206 | } 207 | ``` 208 | 209 | --- 210 | 211 | ## Prefabs 212 | 213 | **Prefabs** are pre-configured **GameObjects** that you can reuse in your game. 214 | 215 | Create a new sprite called `Brick`. In the **Assets** folder, create a new folder called `Prefabs`. 216 | 217 | ![](../resources/img/03-images/03-image-2.png) 218 | 219 | Drag the `Brick` sprite into the `Prefabs` folder to create a **Prefab**. 220 | 221 | ![](../resources/img/03-images/03-image-3.png) 222 | 223 | --- 224 | 225 | ## Grid Snap 226 | 227 | **Grid Snap** allows you to align **GameObjects** to a grid. This is useful when you want to align **GameObjects** in your scene. 228 | 229 | In **Toggle Grid Snapping**, set the **Grid Size** to `0.5` and check **Snap To Grid** to enable **Grid Snap**. 230 | 231 | **Tasks:** 232 | 233 | 1. Add six `Brick` **Prefabs** to your scene. 234 | 235 | Your scene should look like this: 236 | 237 | ![](../resources/img/03-images/03-image-6.png) 238 | 239 | 2. Create a **GameObject** called `Bricks` and drag all the `Brick` **GameObjects** under it. 240 | 241 | ![](../resources/img/03-images/03-image-7.png) 242 | 243 | --- 244 | 245 | ## Destroy Bricks 246 | 247 | You are going to use the `OnCollisionEnter2D` method to detect collisions between the `Ball` and the `Brick` **GameObjects**. 248 | 249 | **Tasks:** 250 | 251 | 1. Add a **Box Collider 2D** component to the `Brick` **Prefab**. 252 | 253 | 2. In the `Ball` sprite, create a new **Tag** called `Ball`. Set the **Tag** to `Ball`. 254 | 255 | 3. Create a new script called `BrickController` and attach it to the `Brick` **Prefab**. 256 | 257 | ```csharp 258 | using System.Collections; 259 | using System.Collections.Generic; 260 | using UnityEngine; 261 | 262 | public class BrickController : MonoBehaviour 263 | { 264 | private void OnCollisionEnter2D(Collision2D collision) 265 | { 266 | if (collision.gameObject.CompareTag("Ball")) 267 | { 268 | Destroy(gameObject); 269 | } 270 | } 271 | } 272 | ``` 273 | 274 | Click the **Play** button to test the game. When the `Ball` sprite collides with the `Brick` **GameObjects**, the `Brick` **GameObject** should be destroyed. 275 | 276 | When a `Brick` **GameObject** is destroyed, what do you notice about the **Hierarchy**? 277 | 278 | --- 279 | 280 | ## Creating More Bricks 281 | 282 | **Tasks:** 283 | 284 | 1. Create two more `Brick` **Prefabs** called `Brick2` and `Brick3`. 285 | 286 | ![](../resources/img/03-images/03-image-8.png) 287 | 288 | 2. For `Brick2`, set the **Color** to `Red` and for `Brick3`, set the **Color** to `Blue`. 289 | 3. Add some `Brick2` and `Brick3` **Prefabs** to your scene. 290 | 4. In the `BrickController` script, add a new `SerializedField` called `health` and set it to `1`. 291 | 5. Set the `health` of `Brick2` to `2` and the `health` of `Brick3` to `3`. 292 | 6. In the `BrickController` script, update the `OnCollisionEnter2D` method to reduce the `health` of the `Brick` **GameObject**. If the `health` is less than or equal to `0`, destroy the `Brick` **GameObject**. You also need to change the **Color** of the `Brick` **GameObject** based on the `health`. For example, if the `health` is `1`, set the **Color** to `White`, if the `health` is `2`, set the **Color** to `Red` and so forth. 293 | 294 | --- 295 | 296 | ## Kill Zone 297 | 298 | A **Kill Zone** is an area in your game where the player loses a life. In **Breakout**, the **Kill Zone** is the bottom of the screen. 299 | 300 | **Tasks:** 301 | 302 | 1. Copy the `TopWall` **GameObject** and rename it to `KillZone`. 303 | 2. Set the `KillZone` **GameObject** to the bottom of the screen. 304 | 305 | ![](../resources/img/03-images/03-image-9.png) 306 | 307 | 3. In the `Box Collider 2D` component, set the `Is Trigger` to `true`. 308 | 4. Create a new **Tag** called `KillZone`. Set the **Tag** to `KillZone`. 309 | 5. In the `BallController` script, add a new `OnTriggerEnter2D` method to detect collisions between the `Ball` and the `KillZone` **GameObject**. 310 | 311 | ```csharp 312 | private void OnTriggerEnter2D(Collider2D collision) 313 | { 314 | if (collision.gameObject.CompareTag("KillZone")) 315 | { 316 | Debug.Log("Ball hit the Kill Zone"); 317 | } 318 | } 319 | ``` 320 | 321 | Click the **Play** button to test the game. When the `Ball` sprite collides with the `KillZone` **GameObject**, you should see the message `Ball hit the Kill Zone` in the **Console**. 322 | 323 | --- 324 | 325 | ## Panel 326 | 327 | You are going to create a **Panel** that will display when the game is over. 328 | 329 | **Tasks:** 330 | 331 | 1. Create a new **UI** **Canvas** called `GameOverCanvas`. 332 | 2. Create a new **UI** **Panel** called `GameOverPanel`. 333 | 334 | ![](../resources/img/03-images/03-image-10.png) 335 | 336 | 3. In the `GameOverPanel`, add a **Text - Text Mesh Pro** **GameObject** called `GameOverText` and a **Button - Text Mesh Pro** **GameObject** called `RestartButton`. Set the **Text** of the `GameOverText` to `Game Over` and the **Text** of the `RestartButton` to `Restart`. 337 | 338 | ![](../resources/img/03-images/03-image-11.png) 339 | 340 | 4. Disable the `GameOverPanel` **GameObject**. To do this, in the **Inspector**, uncheck the **GameObject** checkbox. 341 | 342 | ![](../resources/img/03-images/03-image-12.png) 343 | 344 | 5. Create a new script called `GameController`. In the `GameController` script, add the following code: 345 | 346 | ```csharp 347 | // Omitted for brevity 348 | 349 | public class GameController : MonoBehaviour 350 | { 351 | [SerializeField] private GameObject gameOverPanel; 352 | 353 | public void PlayerDied() 354 | { 355 | GameOver(); 356 | } 357 | 358 | private void GameOver() 359 | { 360 | gameOverPanel.SetActive(true); 361 | } 362 | } 363 | ``` 364 | 365 | 6. Create a new **GameObject** called `Game`, attach the `GameController` script to it and set the `GameOverPanel` to the `GameOverPanel` **GameObject**. 366 | 367 | ![](../resources/img/03-images/03-image-13.png) 368 | 369 | 7. In the `BallController` script, add a reference to the `GameController` script. When the `Ball` sprite collides with the `KillZone` **GameObject**, call the `PlayerDied` method. 370 | 371 | ```csharp 372 | // Omitted for brevity 373 | 374 | public class BallController : MonoBehaviour 375 | { 376 | // Omitted for brevity 377 | [SerializeField] private GameController game; 378 | 379 | // Omitted for brevity 380 | 381 | private void OnTriggerEnter2D(Collider2D collision) 382 | { 383 | if (collision.gameObject.CompareTag("KillZone")) 384 | { 385 | game.PlayerDied(); 386 | } 387 | } 388 | } 389 | ``` 390 | 391 | 8. In the `Ball` sprite, set the `Game` to the `Game` **GameObject**. 392 | 393 | ![](../resources/img/03-images/03-image-14.png) 394 | 395 | Click the **Play** button to test the game. When the `Ball` sprite collides with the `KillZone` **GameObject**, the `GameOverPanel` should be displayed. 396 | 397 | --- 398 | 399 | ## Formative Assessment 400 | 401 | Learning to use AI tools is an important skill. While AI tools are powerful, you **must** be aware of the following: 402 | 403 | - If you provide an AI tool with a prompt that is not refined enough, it may generate a not-so-useful response 404 | - Do not trust the AI tool's responses blindly. You **must** still use your judgement and may need to do additional research to determine if the response is correct 405 | - Acknowledge what AI tool you have used. In the assessment's repository **README.md** file, please include what prompt(s) you provided to the AI tool and how you used the response(s) to help you with your work 406 | 407 | --- 408 | 409 | ### Task 1 410 | 411 | The `Brick` **prefab's** colour to `Yellow`. 412 | 413 | --- 414 | 415 | ### Task 2 416 | 417 | Create a new `Brick` **Prefab** called `Brick4`. Set the colour to `White`. This brick should be unbreakable. Add some `Brick4` **Prefabs** to your scene. 418 | 419 | --- 420 | 421 | ### Task 3 422 | 423 | When a `Brick` **GameObject** is destroyed, increase the score by `10`. Display the score on the screen. 424 | 425 | --- 426 | 427 | ### Task 4 428 | 429 | When the game starts, the player has `3` lives. When the `Ball` sprite collides with the `KillZone` **GameObject**, reduce the lives by `1`. Display the lives on the screen. 430 | 431 | --- 432 | 433 | ### Task 5 434 | 435 | When the player has no lives left, display the `GameOverPanel`. Show "You Lose!" and the final score. 436 | 437 | --- 438 | 439 | ### Task 6 440 | 441 | When the player has destroyed all the `Brick` **GameObjects**, display the `GameOverPanel`. Show "You Win!" and the final score. 442 | 443 | --- 444 | 445 | ### Task 7 446 | 447 | When the player clicks the `Restart` button, reset the game. 448 | 449 | --- 450 | 451 | ## Next Class 452 | 453 | Link to the next class: [Week 04]() 454 | -------------------------------------------------------------------------------- /lecture-notes/04-audio/brick.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/04-audio/brick.wav -------------------------------------------------------------------------------- /lecture-notes/04-audio/kill-zone.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/04-audio/kill-zone.wav -------------------------------------------------------------------------------- /lecture-notes/04-audio/paddle.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/04-audio/paddle.wav -------------------------------------------------------------------------------- /lecture-notes/04-audio/wall.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/04-audio/wall.wav -------------------------------------------------------------------------------- /lecture-notes/05-assets/Audio/sfx_laser1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Audio/sfx_laser1.ogg -------------------------------------------------------------------------------- /lecture-notes/05-assets/Audio/sfx_laser2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Audio/sfx_laser2.ogg -------------------------------------------------------------------------------- /lecture-notes/05-assets/Audio/sfx_lose.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Audio/sfx_lose.ogg -------------------------------------------------------------------------------- /lecture-notes/05-assets/Audio/sfx_shieldDown.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Audio/sfx_shieldDown.ogg -------------------------------------------------------------------------------- /lecture-notes/05-assets/Audio/sfx_shieldUp.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Audio/sfx_shieldUp.ogg -------------------------------------------------------------------------------- /lecture-notes/05-assets/Audio/sfx_twoTone.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Audio/sfx_twoTone.ogg -------------------------------------------------------------------------------- /lecture-notes/05-assets/Audio/sfx_zap.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Audio/sfx_zap.ogg -------------------------------------------------------------------------------- /lecture-notes/05-assets/Fonts/kenvector_future.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Fonts/kenvector_future.ttf -------------------------------------------------------------------------------- /lecture-notes/05-assets/Fonts/kenvector_future_thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Fonts/kenvector_future_thin.ttf -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/backgrounds/black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/backgrounds/black.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/backgrounds/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/backgrounds/blue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/backgrounds/darkPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/backgrounds/darkPurple.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/backgrounds/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/backgrounds/purple.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/button/buttonBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/button/buttonBlue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/button/buttonGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/button/buttonGreen.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/button/buttonRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/button/buttonRed.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/button/buttonYellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/button/buttonYellow.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlack1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlack1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlack2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlack2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlack3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlack3.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlack4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlack4.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlack5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlack5.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlue1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlue1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlue2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlue2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlue3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlue3.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlue4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlue4.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyBlue5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyBlue5.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyGreen1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyGreen1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyGreen2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyGreen2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyGreen3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyGreen3.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyGreen4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyGreen4.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyGreen5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyGreen5.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyRed1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyRed1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyRed2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyRed2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyRed3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyRed3.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyRed4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyRed4.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/enemy/enemyRed5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/enemy/enemyRed5.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire00.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire01.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire02.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire03.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire04.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire05.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire06.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire07.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire08.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire09.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire10.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire11.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire12.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire13.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire14.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire15.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire16.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire17.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire18.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/fire/fire19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/fire/fire19.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue01.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue02.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue03.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue04.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue05.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue06.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue07.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue08.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue09.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue10.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue11.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue12.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue13.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue14.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue15.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserBlue16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserBlue16.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen01.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen02.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen03.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen04.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen05.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen06.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen07.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen08.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen09.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen10.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen11.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen12.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen13.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen14.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen15.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserGreen16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserGreen16.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed01.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed02.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed03.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed04.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed05.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed06.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed07.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed08.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed09.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed10.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed11.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed12.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed13.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed14.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed15.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/laser/laserRed16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/laser/laserRed16.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_big1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_big1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_big2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_big2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_big3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_big3.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_big4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_big4.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_med1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_med1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_med3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_med3.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_small1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_small1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_small2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_small2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_tiny1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_tiny1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorBrown_tiny2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorBrown_tiny2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_big1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_big1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_big2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_big2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_big3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_big3.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_big4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_big4.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_med1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_med1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_med2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_med2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_small1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_small1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_small2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_small2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_tiny1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_tiny1.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/meteor/meteorGrey_tiny2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/meteor/meteorGrey_tiny2.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife1_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife1_blue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife1_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife1_green.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife1_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife1_orange.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife1_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife1_red.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife2_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife2_blue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife2_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife2_green.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife2_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife2_orange.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife2_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife2_red.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife3_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife3_blue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife3_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife3_green.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife3_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife3_orange.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-life/playerLife3_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-life/playerLife3_red.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip1_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip1_blue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip1_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip1_green.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip1_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip1_orange.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip1_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip1_red.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip2_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip2_blue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip2_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip2_green.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip2_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip2_orange.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip2_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip2_red.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip3_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip3_blue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip3_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip3_green.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip3_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip3_orange.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/player-ship/playerShip3_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/player-ship/playerShip3_red.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/bold_silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/bold_silver.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/bolt_bronze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/bolt_bronze.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/bolt_gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/bolt_gold.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/pill_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/pill_blue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/pill_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/pill_green.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/pill_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/pill_red.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/pill_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/pill_yellow.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupBlue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupBlue_bolt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupBlue_bolt.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupBlue_shield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupBlue_shield.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupBlue_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupBlue_star.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupGreen.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupGreen_bolt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupGreen_bolt.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupGreen_shield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupGreen_shield.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupGreen_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupGreen_star.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupRed.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupRed_bolt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupRed_bolt.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupRed_shield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupRed_shield.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupRed_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupRed_star.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupYellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupYellow.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupYellow_bolt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupYellow_bolt.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupYellow_shield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupYellow_shield.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/powerupYellow_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/powerupYellow_star.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/shield_bronze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/shield_bronze.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/shield_gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/shield_gold.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/shield_silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/shield_silver.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/star_bronze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/star_bronze.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/star_gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/star_gold.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/star_silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/star_silver.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/things_bronze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/things_bronze.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/things_gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/things_gold.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/power-ups/things_silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/power-ups/things_silver.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/ufo/ufoBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/ufo/ufoBlue.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/ufo/ufoGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/ufo/ufoGreen.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/ufo/ufoRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/ufo/ufoRed.png -------------------------------------------------------------------------------- /lecture-notes/05-assets/Sprites/ufo/ufoYellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/05-assets/Sprites/ufo/ufoYellow.png -------------------------------------------------------------------------------- /lecture-notes/05-input-manager-clamping-prefab-variants.md: -------------------------------------------------------------------------------- 1 | ## Week 05 2 | 3 | ## Previous Class 4 | 5 | Link to the previous class: [Week 04](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/04-instantiate-design-patterns-audio-scene-management-assets.md) 6 | 7 | --- 8 | 9 | ## Space Invaders Game 10 | 11 | In this module, you will develop **Space Invaders** using **Unity**. Create a new **Unity** project using the **2D (Built-In Render Pipeline)** template. Name your project `space-invaders` and select a location to save your project. Click on the **Create project** button. 12 | 13 | --- 14 | 15 | ## Assets 16 | 17 | In the **lecture-notes** folder, you will find a folder named **05-assets**. Inside this folder, you will find the audio, font and sprite assets required for the **Space Invaders** game. Drag and drop the folders in the **05-assets** folder into the **Assets** folder. 18 | 19 | --- 20 | 21 | ## Background and Player 22 | 23 | **Tasks:** 24 | 25 | 1. Create a new **GameObject** for the background. Add a **Sprite Renderer** component to the **GameObject**. Drag and drop a background sprite from the **Sprites** folder into the **Sprite** field of the **Sprite Renderer** component. 26 | 2. Set the **Order in Layer** to **-1**. This will ensure that the background is rendered behind other **GameObjects**. 27 | 3. Create a new **GameObject** for the player. Add a **Sprite Renderer** component to the **GameObject**. Drag and drop a player sprite from the **Sprites** folder into the **Sprite** field of the **Sprite Renderer** component. 28 | 29 | ![](../resources/img/05-images/05-image-1.png) 30 | 31 | 4. In the **Assets** folder, create a new folder called **Prefabs**. Drag and drop the player **GameObject** into the **Prefabs** folder to create a prefab. 32 | 33 | --- 34 | 35 | ## Input Manager 36 | 37 | In **Unity**, you can use the **Input Manager** to manage input from the keyboard, mouse and other input devices. The **Input Manager** is a system that allows you to define input axes and buttons. You can then access these axes and buttons in your scripts. 38 | 39 | ![](../resources/img/05-images/05-image-2.png) 40 | 41 | --- 42 | 43 | ## Player Movement 44 | 45 | Create a new script called `PlayerController` and attach it to the player **Prefab**. In the `PlayerController` script, add the following code: 46 | 47 | ```csharp 48 | // Omitted for brevity 49 | 50 | public class PlayerController : MonoBehaviour 51 | { 52 | [SerializeField] float speed = 5f; 53 | 54 | void Update() 55 | { 56 | float direction = Input.GetAxis("Horizontal"); 57 | transform.position += Vector3.right * direction * Time.deltaTime * speed; 58 | } 59 | } 60 | ``` 61 | 62 | What does this code do? 63 | 64 | - The `speed` variable is used to control the speed of the player. 65 | - The `Update` method is called once per frame. In the `Update` method, `Input.GetAxis("Horizontal")` is used to get the horizontal input. This returns a value between -1 and 1 based on the input from the keyboard, where -1 is left and 1 is right. 66 | - Move the player in the horizontal direction based on the input. Multiply the direction by the speed and `Time.deltaTime` to make the movement frame rate independent. `Time.deltaTime` is the time in seconds it took to complete the last frame. 67 | 68 | Click on the **Play** button to test the player movement. The player should move left and right based on the input from the keyboard. 69 | 70 | --- 71 | 72 | ## Clamping Player Movement 73 | 74 | To prevent the player from moving outside the screen, player's position is clamped using the `Mathf.Clamp` method. Update the `PlayerController` script as follows: 75 | 76 | ```csharp 77 | // Omitted for brevity 78 | 79 | public class PlayerController : MonoBehaviour 80 | { 81 | // Omitted for brevity 82 | 83 | void Update() 84 | { 85 | // Omitted for brevity 86 | 87 | float clampedX = Mathf.Clamp(transform.position.x, -8f, 8f); 88 | transform.position = new Vector3(clampedX, transform.position.y, 0); 89 | } 90 | } 91 | ``` 92 | 93 | What does this code do? 94 | 95 | - Use the `Mathf.Clamp` method to clamp the player's position in the x-axis between -10 and 10. This ensures that the player cannot move outside the screen. 96 | - Update the player's position using the clamped x value and the original y value. 97 | - The z value is set to 0 to ensure that the player remains in the 2D plane. 98 | 99 | Click on the **Play** button to test the player movement. The player should move left and right within the screen bounds. 100 | 101 | --- 102 | 103 | ## Player Shooting 104 | 105 | **Tasks:** 106 | 107 | 1. Create a new **GameObject** for the laser. 108 | 2. Drag and drop the laser **GameObject** into the **Prefabs** folder to create a prefab. 109 | 3. Add a **Sprite Renderer** component to the laser **Prefab**. Drag and drop a laser sprite from the **Sprites** folder into the **Sprite** field of the **Sprite Renderer** component. 110 | 4. Add a **Box Collider 2D** component to the laser **Prefab**. Set the **Is Trigger** property to **true**. 111 | 5. Add a **Rigidbody 2D** component to the laser **Prefab**. Set the **Body Type** property to **Kinematic**. This will allow us to move the laser using the `transform.Translate` method without the need for physics calculations. 112 | 6. Create a **Tag** called `Laser` and assign it to the laser **Prefab**. 113 | 7. Create a new script called `LaserController` and attach it to the laser **Prefab**. In the `LaserController` script, add the following code: 114 | 115 | ```csharp 116 | public class PlayerLaser : MonoBehaviour 117 | { 118 | [SerializeField] float speed = 5f; 119 | 120 | void Update() 121 | { 122 | transform.Translate(Vector3.up * speed * Time.deltaTime); 123 | } 124 | } 125 | ``` 126 | 127 | What does this code do? 128 | 129 | - The `speed` variable is used to control the speed of the laser. 130 | - The `Update` method is called once per frame. In the `Update` method, the laser moves on the y-axis based on the speed value. 131 | 132 | Click on the **Play** button to test the laser movement. The laser should move upwards based on the speed value. 133 | 134 | **Task:** 135 | 136 | 1. You can recall creating a kill zone in the **Breakout** game. Create a similar kill zone at the top and bottom of the screen to destroy the laser when it collides with the kill zone. 137 | 138 | ![](../resources/img/05-images/05-image-3.png) 139 | 140 | --- 141 | 142 | ## Player Laser 143 | 144 | **Tasks:** 145 | 146 | 1. Delete the laser **Prefab** from the **Scene**. 147 | 2. Update the `PlayerController` script as follows: 148 | 149 | ```csharp 150 | // Omitted for brevity 151 | 152 | public class PlayerController : MonoBehaviour 153 | { 154 | // Omitted for brevity 155 | [SerializeField] GameObject laserPrefab; 156 | 157 | float counter = 0f; 158 | 159 | void Update() 160 | { 161 | // Omitted for brevity 162 | 163 | counter += Time.deltaTime; 164 | if (Input.GetButtonDown("Fire1") && counter > 0.5f) 165 | { 166 | Instantiate(laserPrefab, transform.position, Quaternion.identity); 167 | counter = 0f; 168 | } 169 | } 170 | } 171 | ``` 172 | 173 | What does this code do? 174 | 175 | - Add a `laserPrefab` variable to store a reference to the laser **Prefab**. 176 | - Add a `counter` variable to keep track of the time since the last laser was fired. This is used to prevent the player from firing multiple lasers in quick succession. 177 | - In the `Update` method, increment the `counter` value by `Time.deltaTime`. 178 | - Check if the **Fire1** button is pressed and the `counter` value is greater than 0.5 seconds. If both conditions are met, instantiate a laser at the player's position and reset the `counter` value. 179 | 180 | Click on the **Play** button to test the player shooting. The player should be able to shoot lasers by pressing the **Fire1** button. 181 | 182 | --- 183 | 184 | ## Enemy Prefab 185 | 186 | **Tasks:** 187 | 188 | 1. Create a new **GameObject** for the enemy. Add a **Sprite Renderer** component to the **GameObject**. Drag and drop an enemy sprite from the **Sprites** folder into the **Sprite** field of the **Sprite Renderer** component. 189 | 2. Add a **Box Collider 2D** component to the **GameObject**. Set the **Is Trigger** property to **true**. 190 | 3. Create a new script called `EnemyController` and attach it to the enemy **GameObject**. In the `EnemyController` script, add the following code: 191 | 192 | ```csharp 193 | // Omitted for brevity 194 | 195 | public class EnemyController : MonoBehaviour 196 | { 197 | private void OnTriggerEnter2D(Collider2D collision) 198 | { 199 | if (collision.gameObject.CompareTag("Laser")) 200 | { 201 | // TODO: Write code to destroy the laser 202 | // TODO: Write code to destroy the enemy 203 | } 204 | } 205 | } 206 | ``` 207 | 208 | Click on the **Play** button to test the enemy collision. The enemy and the laser should be destroyed when they collide. 209 | 210 | --- 211 | 212 | ## Prefab Variants 213 | 214 | **Prefab Variants** are copies of a **Prefab** that inherit the properties of the original **Prefab**. You can create **Prefab Variants** to create variations of a **Prefab** without modifying the original **Prefab**. 215 | 216 | To create a **Prefab Variant**, right-click on the `Enemy` **Prefab** in the **Prefabs** folder and select **Create > Prefab Variant**. This will create a new **Prefab Variant** of the `Enemy` **Prefab**. Rename the **Prefab Variant** to `Enemy2`. 217 | 218 | ![](../resources/img/05-images/05-image-4.png) 219 | 220 | **Task:** 221 | 222 | 1. Create a parent **GameObject** called `Enemies` in the **Scene**. 223 | 2. In the `Enemies` **GameObject**, add `Enemy` and `Enemy2` **Prefabs** as children. 224 | 225 | ![](../resources/img/05-images/05-image-5.png) 226 | 227 | --- 228 | 229 | ## Moving Enemies 230 | 231 | **Tasks:** 232 | 233 | 1. Create a new **GameObject** for the wall. 234 | 2. Drag and drop the wall **GameObject** into the **Prefabs** folder to create a prefab. 235 | 3. Add a **Box Collider 2D** component to the wall **Prefab**. Set the **Is Trigger** property to **true**. 236 | 4. Add a **Rigidbody 2D** component to the wall **Prefab**. Set the **Body Type** property to **Kinematic**. 237 | 5. Create a new **Tag** called `Wall` and assign it to the wall **Prefab**. 238 | 6. Create a parent **GameObject** called `Walls` in the **Hierarchy**. In the `Walls` **GameObject**, add a left wall and a right wall as children. 239 | 240 | ![](../resources/img/05-images/05-image-6.png) 241 | 242 | 7. Create a new script called `EnemiesController` and attach it to the `Enemies` **GameObject**. In the `EnemiesController` script, add the following code: 243 | 244 | ```csharp 245 | // Omitted for brevity 246 | 247 | public class EnemiesController : MonoBehaviour 248 | { 249 | [SerializeField] float speed = 1f; 250 | 251 | Vector3 direction = Vector3.right; 252 | float counter = 0; 253 | 254 | void Update() 255 | { 256 | counter += Time.deltaTime; 257 | transform.position += direction * speed * Time.deltaTime; 258 | } 259 | 260 | public void ChangeDirection() 261 | { 262 | if (counter > 0.5f) 263 | { 264 | direction *= -1f; 265 | counter = 0; 266 | transform.position += Vector3.down; 267 | } 268 | } 269 | } 270 | ``` 271 | 272 | What does this code do? 273 | 274 | - The `speed` variable is used to control the speed of the enemies. 275 | - The `direction` variable is used to store the direction in which the enemies are moving. 276 | - The `counter` variable is used to keep track of the time since the last direction change. 277 | - In the `Update` method, increment the `counter` value by `Time.deltaTime` and move the enemies in the current direction. 278 | - The `ChangeDirection` method is used to change the direction of the enemies. If the `counter` value is greater than 0.5 seconds, change the direction of the enemies, reset the `counter` value and move the enemies down. 279 | 280 | In the `EnemyController` script, add the following code: 281 | 282 | ```csharp 283 | // Omitted for brevity 284 | 285 | public class EnemyController : MonoBehaviour 286 | { 287 | [SerializeField] EnemiesController enemiesController; 288 | 289 | private void OnTriggerEnter2D(Collider2D collision) 290 | { 291 | // Omitted for brevity 292 | 293 | if (collision.gameObject.CompareTag("Wall")) 294 | { 295 | enemiesController.ChangeDirection(); 296 | } 297 | } 298 | } 299 | ``` 300 | 301 | In the `Enemy` and `Enemy2` **Prefabs**, add the `EnemyController` script and assign the `EnemiesController` script to the `EnemiesController` field. 302 | 303 | Click on the **Play** button to test the enemy movement. The enemies should move left and right, change direction and move down when they collide with the walls. 304 | 305 | --- 306 | 307 | ## Next Class 308 | 309 | Link to the next class: [Week 06](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/06-invoke-api-integration-saving-to-file.md) -------------------------------------------------------------------------------- /lecture-notes/06-invoke-api-integration-saving-to-file.md: -------------------------------------------------------------------------------- 1 | ## Week 06 2 | 3 | ## Previous Class 4 | 5 | Link to the previous class: [Week 05](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/05-input-manager-clamping-prefab-variants.md) 6 | 7 | --- 8 | 9 | ## Space Invaders Game 10 | 11 | In this module, you will continue to develop **Space Invaders** using Unity. 12 | 13 | > **Note:** The following content does not take into account last week's formative assessment. Please ensure you have completed the formative assessment before continuing with this week's content. 14 | 15 | --- 16 | 17 | ## Game Manager 18 | 19 | In the **Hierarchy**, create an empty game object and name it `Game`. Create a new script called `GameController` and attach it to the `Game` object. In the `GameController` script, add the following code: 20 | 21 | ```csharp 22 | // Omitted for brevity 23 | 24 | public class GameController : MonoBehaviour 25 | { 26 | public void WinGame() 27 | { 28 | Debug.Log("You win!"); 29 | } 30 | } 31 | ``` 32 | 33 | > **Note:** This is for debugging purposes only. 34 | 35 | In the `EnemyController` script, update the `OnTriggerEnter2D` method to the following: 36 | 37 | ```csharp 38 | // Omitted for brevity 39 | 40 | public class EnemyController : MonoBehaviour 41 | { 42 | // Omitted for brevity 43 | [SerializeField] GameController gameController; 44 | 45 | private void OnTriggerEnter2D(Collider2D collision) 46 | { 47 | if (collision.gameObject.CompareTag("Laser")) 48 | { 49 | if (transform.parent.childCount <= 1) 50 | { 51 | gameController.WinGame(); 52 | } 53 | 54 | Destroy(collision.gameObject); 55 | Destroy(gameObject); 56 | } 57 | 58 | // Omitted for brevity 59 | } 60 | } 61 | ``` 62 | 63 | When the last enemy is destroyed, the `WinGame` method will be called. For each `Enemy` and `Enemy2` **Prefab**, drag the `Game` object into the `Game Controller` field. 64 | 65 | Click on the **Play** button to test the game. When the last enemy is destroyed, you should see the message "You win!" in the console. 66 | 67 | --- 68 | 69 | ## Enemy Laser 70 | 71 | Create a **Prefab** for the enemy laser. This **Prefab** will be similar to the player's laser, but with a different sprite. Create a new script called `EnemyLaserController` and attach it to the **Prefab**. In the `EnemyLaserController` script, add the following code: 72 | 73 | ```csharp 74 | // Omitted for brevity 75 | 76 | public class EnemyLaserController : MonoBehaviour 77 | { 78 | [SerializeField] float speed = 5f; 79 | 80 | void Update() 81 | { 82 | transform.Translate(Vector3.down * speed * Time.deltaTime); 83 | } 84 | } 85 | ``` 86 | 87 | **Task:** 88 | 89 | 1. The code is similar to the `LaserController` script, but the laser moves downwards. Think about how you can improve the code by reusing the `LaserController` script. 90 | 91 | --- 92 | 93 | ## Invoke Repeating 94 | 95 | The `InvokeRepeating` method is used to call a method repeatedly after a specified delay. In the `EnemyController` script, add the following code: 96 | 97 | ```csharp 98 | // Omitted for brevity 99 | 100 | public class EnemyController : MonoBehaviour 101 | { 102 | // Omitted for brevity 103 | [SerializeField] GameObject laserPrefab; 104 | 105 | void Start() 106 | { 107 | InvokeRepeating(nameof(Fire), 1f, 1f); 108 | } 109 | 110 | void Fire() 111 | { 112 | if (Random.value < (1f / transform.parent.childCount)) 113 | { 114 | Instantiate(laserPrefab, transform.position, Quaternion.identity); 115 | } 116 | } 117 | 118 | // Omitted for brevity 119 | } 120 | ``` 121 | 122 | What does this code do? 123 | 124 | - `InvokeRepeating(nameof(Fire), 1f, 1f)` calls the `Fire` method every second. 125 | - `Random.value < (1f / transform.parent.childCount)` is used to determine the probability of firing a laser. The probability is inversely proportional to the number of enemies left. 126 | - `Instantiate(laserPrefab, transform.position, Quaternion.identity)` creates a new enemy laser at the enemy's position. 127 | 128 | **Tasks:** 129 | 130 | 1. Click on the `Enemy` and `Enemy2` **Prefab** and drag the enemy laser **Prefab** into the `Laser Prefab` field. 131 | 2. In the `KillZone` script, destroy the enemy laser when it collides with the kill zone. 132 | 2. Add a **Box Collider 2D** component to the player **Prefab**. 133 | 3. In the `PlayerController` script destroy the enemy or enemy laser and the player when they collide. 134 | 135 | Click on the **Play** button to test the game. The enemies should now fire lasers at the player. 136 | 137 | --- 138 | 139 | ## API Integration 140 | 141 | You are going to learn how to consume an API using Unity. In this example, you will use the **Random User Generator** API to get a random user's information. 142 | 143 | In the **Assets > Scripts** folder, create a new folder called `API`. Inside the `API` folder, create a new script called `APIController`. In the `APIController` script, add the following code: 144 | 145 | ```csharp 146 | using System; 147 | using System.Collections; 148 | using System.Collections.Generic; 149 | using UnityEngine; 150 | using UnityEngine.Networking; 151 | 152 | [Serializable] 153 | public class ApiResponse 154 | { 155 | public List results; 156 | } 157 | 158 | [Serializable] 159 | public class Login 160 | { 161 | public string uuid; 162 | public string username; 163 | } 164 | 165 | [Serializable] 166 | public class User 167 | { 168 | public Login login; 169 | } 170 | 171 | public class APIController : MonoBehaviour 172 | { 173 | private const string API_URL = "https://randomuser.me/api/"; 174 | 175 | public string uuid; 176 | public string username; 177 | 178 | void Start() 179 | { 180 | StartCoroutine(FetchUserData()); 181 | } 182 | 183 | IEnumerator FetchUserData() 184 | { 185 | using (UnityWebRequest request = UnityWebRequest.Get(API_URL)) 186 | { 187 | yield return request.SendWebRequest(); 188 | 189 | if (request.result == UnityWebRequest.Result.Success) 190 | { 191 | ApiResponse apiResponse = JsonUtility.FromJson(request.downloadHandler.text); 192 | if (apiResponse.results.Count > 0) 193 | { 194 | User user = apiResponse.results[0]; 195 | uuid = user.login.uuid; 196 | username = user.login.username; 197 | 198 | Debug.Log($"Login UUID: {uuid}"); 199 | Debug.Log($"Username: {username}"); 200 | } 201 | } 202 | else 203 | { 204 | Debug.LogError("Failed to fetch user data: " + request.error); 205 | } 206 | } 207 | } 208 | } 209 | ``` 210 | 211 | What does this code do? 212 | 213 | - The `ApiResponse` class is used to deserialize the JSON response from the API. 214 | - The `Login` class is used to deserialize the `login` object in the JSON response. 215 | - The `User` class is used to deserialize the `results` object in the JSON response. 216 | - The `APIController` class is used to fetch user data from the API. 217 | - The `API_URL` constant is the URL of the API. 218 | - The `Start` method calls the `FetchUserData` coroutine when the game starts. A coroutine is a function that can pause its execution and return control to Unity but then continue where it left off on the following frame. 219 | - The `FetchUserData` coroutine sends a GET request to the API and deserializes the JSON response. The user's login UUID and username are logged to the console. 220 | 221 | Attach the `APIController` script to the `Game` **GameObject**. Click on the **Play** button to test the game. The user's login UUID and username should be logged to the console. 222 | 223 | --- 224 | 225 | ## Saving to File 226 | 227 | In the `GameController` script, add the following code: 228 | 229 | ```csharp 230 | // Omitted for brevity 231 | using System.IO; 232 | 233 | public class GameController : MonoBehaviour 234 | { 235 | public void WinGame(string uuid, string username) 236 | { 237 | Debug.Log("You win!"); 238 | SaveDataToFile(uuid, username); 239 | } 240 | 241 | private void SaveDataToFile(string uuid, string username) 242 | { 243 | string path = $"{Application.dataPath}/data.txt"; 244 | string data = $"UUID: {uuid}\nUsername: {username}"; 245 | File.WriteAllText(path, data); 246 | Debug.Log($"Data saved to file: {path}"); 247 | } 248 | } 249 | ``` 250 | 251 | What does this code do? 252 | 253 | - The `WinGame` method calls the `SaveDataToFile` method when the player wins the game. 254 | - The `SaveDataToFile` method saves the user's login UUID and username to a text file. The file is saved in the `Assets` folder. 255 | 256 | In the `EnemyController` script, add a reference to the `APIController` script and update the `WinGame` method to the following: 257 | 258 | ```csharp 259 | // Omitted for brevity 260 | 261 | public class EnemyController : MonoBehaviour 262 | { 263 | // Omitted for brevity 264 | [SerializeField] APIController apiController; 265 | 266 | // Omitted for brevity 267 | 268 | void Start() 269 | { 270 | apiController = FindObjectOfType(); 271 | } 272 | 273 | private void OnTriggerEnter2D(Collider2D collision) 274 | { 275 | if (collision.gameObject.CompareTag("Laser")) 276 | { 277 | if (transform.parent.childCount <= 1) 278 | { 279 | gameController.WinGame(apiController.uuid, apiController.username); 280 | } 281 | 282 | // Omitted for brevity 283 | } 284 | 285 | // Omitted for brevity 286 | } 287 | } 288 | ``` 289 | 290 | Click on the **Play** button to test the game. When the player wins the game, the user's login UUID and username should be saved to a text file. 291 | 292 | --- 293 | 294 | ## Next Class 295 | 296 | Link to the next class: [Week 07](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/07-custom-editor-window-scriptable-objects.md)) -------------------------------------------------------------------------------- /lecture-notes/07-assets.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/lecture-notes/07-assets.zip -------------------------------------------------------------------------------- /lecture-notes/07-spritesheet-sorting-layer.md: -------------------------------------------------------------------------------- 1 | ## Week 07 2 | 3 | ## Previous Class 4 | 5 | Link to the previous class: [Week 06](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/06-invoke-api-integration-saving-to-file.md) 6 | 7 | --- 8 | 9 | ## Rogue-Like Game 10 | 11 | In this module, you will develop **Rogue-Like** using **Unity**. Create a new **Unity** project using the **2D (Built-In Render Pipeline)** template. Name your project `rogue-like` and select a location to save your project. Click on the **Create project** button. 12 | 13 | --- 14 | 15 | ## Spritesheet 16 | 17 | **Spritesheet** is a collection of images combined into a single image. It is used to reduce the number of draw calls in a game, which can improve performance. In this module, you will use a **spritesheet** to create a character for your game. 18 | 19 | In the **lecture-notes** folder, you will find a zip folder called `07-assets`. Download and extract the folder. Copy the folders into your **Unity** project. The folder should be placed in the `Assets` folder of your project. 20 | 21 | ![](../resources/img/07-images/07-image-1.png) 22 | 23 | In the **Assets > Art Characters** folder, you will find a spritesheet called `Characters`. This spritesheet contains all different characters for your game. 24 | 25 | Click on the `Characters` spritesheet in the **Project** window. In the **Inspector** window, change the following settings: 26 | 27 | - **Sprite Mode**: `Multiple`. This allows you to slice the spritesheet into individual sprites. 28 | - **Pixels Per Unit**: `16`. This determines how many pixels in the spritesheet correspond to one unit in the game world. 29 | - **Filter Mode**: `Point (no filter)`. This setting is used to determine how the sprite is rendered. Point filtering is used for pixel art to avoid blurring. 30 | - **Max Size**: `64`. This setting determines the maximum size of the sprite. If the sprite is larger than this size, it will be scaled down to fit. 31 | 32 | ![](../resources/img/07-images/07-image-2.png) 33 | 34 | Click on the **Edit Sprite** button in the **Inspector** window. This will open the **Sprite Editor** window. 35 | 36 | ![](../resources/img/07-images/07-image-3.png) 37 | 38 | In the **Sprite Editor** window, click on the **Slice** button in the top left corner. This will open the **Slice** window. Set the following settings: 39 | 40 | - **Type**: `Grid By Cell Size`. This will slice the spritesheet into a grid based on the cell size. 41 | - **Pixel Size**: `16`. This will slice the spritesheet into 16x16 pixel sprites. 42 | 43 | Click on the **Slice** button in the **Slice** window. This will slice the spritesheet into individual sprites. You should see a grid of sprites in the **Sprite Editor** window. 44 | 45 | Click on the **Apply** button in the top right corner of the **Sprite Editor** window. This will apply the changes to the spritesheet. You should now see individual sprites in the **Project** window. 46 | 47 | ![](../resources/img/07-images/07-image-4.png) 48 | 49 | Drag and drop a character sprite into the **Scene** window. This will create a new **GameObject** in the **Hierarchy** window. 50 | 51 | ![](../resources/img/07-images/07-image-5.png) 52 | 53 | Similar to above, drag and drop a gun sprite into the **Scene** window. This will create a new **GameObject** in the **Hierarchy** window. Create a new `Empty GameObject` in the **Hierarchy** window and name it `Player`. Drag and drop the character and gun sprites into the `Player` GameObject. This will make the character and gun sprites children of the `Player` GameObject. 54 | 55 | > **Note:** You do not need to slice the gun spritesheet. The gun sprites are already sliced and ready to use. 56 | 57 | ![](../resources/img/07-images/07-image-6.png) 58 | 59 | --- 60 | 61 | ## Sorting Layer 62 | 63 | **Sorting Layer** is used to determine the order in which sprites are rendered. Sprites with a higher sorting layer will be rendered on top of sprites with a lower sorting layer. 64 | 65 | In the **Inspector** window, create a new sorting layer called `Player`. You should now have two sorting layers: `Default` and `Player`. 66 | 67 | ![](../resources/img/07-images/07-image-7.png) 68 | 69 | Click on the `Player` GameObject in the **Hierarchy** window. In the **Inspector** window, set the **Sprite Renderer > Additional Settings > Sorting Layer** to `Player` and **Sprite Renderer > Additional Settings > Sorting Layer Order** to `0`. This will set the sorting layer of the `Player` GameObject to `Player`. 70 | 71 | ![](../resources/img/07-images/07-image-8.png) 72 | 73 | Apply the same settings to the gun sprite. This will set the sorting layer of the gun sprite to `Player`. However, set the **Sorting Layer Order** to `1`. This will set the sorting layer of the gun sprite to be rendered on top of the character sprite. This will make the gun sprite appear on top of the character sprite. 74 | 75 | ![](../resources/img/07-images/07-image-9.png) 76 | 77 | In the **Assets** folder, create a new folder called `Scripts`. In the `Scripts` folder, create a new C# script called `PlayerController`. This script will be used to control the player character. 78 | 79 | > **Note:** In the formative assessment, you will write the code to control the player character. 80 | 81 | ![](../resources/img/07-images/07-image-10.png) 82 | 83 | Add a `Circle Collider 2D` component to the `Player` GameObject. 84 | 85 | ![](../resources/img/07-images/07-image-11.png) 86 | 87 | Add a `Rigidbody2D` component to the `Player` GameObject. 88 | 89 | ![](../resources/img/07-images/07-image-12.png) 90 | 91 | --- 92 | 93 | ## Formative Assessment 94 | 95 | Learning to use AI tools is an important skill. While AI tools are powerful, you **must** be aware of the following: 96 | 97 | - If you provide an AI tool with a prompt that is not refined enough, it may generate a not-so-useful response 98 | - Do not trust the AI tool's responses blindly. You **must** still use your judgement and may need to do additional research to determine if the response is correct 99 | - Acknowledge what AI tool you have used. In the assessment's repository **README.md** file, please include what prompt(s) you provided to the AI tool and how you used the response(s) to help you with your work 100 | 101 | --- 102 | 103 | ### Task 1 104 | 105 | In the `PlayerController` script, write the code to move the player character using both the **WASD** keys and the **Arrow** keys. The player character should move in the direction of the key pressed. 106 | 107 | --- 108 | 109 | ### Task 2 110 | 111 | In the `PlayerController` script, write the code to dash the player character using the **Space** key. The player character should dash in the direction it is currently moving. The dash should last for 0.5 seconds and should have a cooldown of 2 seconds. 112 | 113 | > **Note:** The player character should not be able to dash again until the cooldown is over. 114 | 115 | --- 116 | 117 | ### Task 3 118 | 119 | Write the code that allows the player character to swap between two weapons. The player character should be able to swap between the gun and a sword. The player character should be able to swap weapons using the **Q** key. 120 | 121 | --- 122 | 123 | ## Next Class 124 | 125 | Link to the next class: [Week 08]() -------------------------------------------------------------------------------- /lecture-notes/08-animation-tilemaps-tile-palettes.md: -------------------------------------------------------------------------------- 1 | ## Week 08 2 | 3 | ## Previous Class 4 | 5 | Link to the previous class: [Week 07](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/07-spritesheet-sorting-layer.md) 6 | 7 | --- 8 | 9 | ## Rogue-Like Game 10 | 11 | In this module, you will continue to develop **Rogue-Like** using Unity. 12 | 13 | > **Note:** The following content does not take into account last week's formative assessment. Please ensure you have completed the formative assessment before continuing with this week's content. 14 | --- 15 | 16 | ## Rotating The Gun 17 | 18 | In the `PlayerController` script, update to the following: 19 | 20 | ```cs 21 | using System.Collections; 22 | using System.Collections.Generic; 23 | using UnityEngine; 24 | 25 | public class PlayerController : MonoBehaviour 26 | { 27 | // Omitted for brevity 28 | 29 | [SerializeField] private Rigidbody2D rb; 30 | 31 | [SerializeField] private Transform gunTransform; 32 | 33 | private Camera mainCamera; 34 | 35 | void Start() 36 | { 37 | mainCamera = Camera.main; 38 | } 39 | 40 | void Update() 41 | { 42 | // Omitted for brevity 43 | 44 | Vector3 mousePosition = Input.mousePosition; 45 | Vector3 cursorPoint = mainCamera.WorldToScreenPoint(transform.localPosition); 46 | Vector2 offset = new Vector2(mousePosition.x - cursorPoint.x, mousePosition.y - cursorPoint.y); 47 | float angle = Mathf.Atan2(offset.y, offset.x) * Mathf.Rad2Deg; 48 | gunTransform.rotation = Quaternion.Euler(new Vector3(0, 0, angle)); 49 | } 50 | } 51 | ``` 52 | 53 | What is happening in the code above? 54 | 55 | - `Vector3 mousePosition` variable stores the current position of the mouse in screen space. 56 | - `Vector3 cursorPoint` variable converts the player's position from world space to screen space using the `WorldToScreenPoint` method of the camera. 57 | - `Vector2 offset` variable calculates the difference between the mouse position and the player position. 58 | - `float angle` variable calculates the angle between the player and the mouse position using the `Mathf.Atan2` method. 59 | - `gunTransform.rotation` variable sets the rotation of the gun to the angle calculated above using the `Quaternion.Euler` method. 60 | - `Quaternion.Euler` method converts the angle from degrees to radians. 61 | 62 | In the **Hierarchy** window, select the `Player` object. In the **Inspector** window, drag and drop the `Gun` object into the `Gun Transform` field of the `PlayerController` script. 63 | 64 | ![](../resources/img/08-images/08-image-1.png) 65 | 66 | Click on the **Play** button. Move the mouse around the screen. You should see the gun rotate to face the mouse position. 67 | 68 | ![](../resources/img/08-images/08-image-2.png) 69 | 70 | --- 71 | 72 | ## Direction 73 | 74 | When the player moves left, the player and gun should flip to face the left direction. When the player moves right, the player and gun should flip to face the right direction. To do this, we need to check the mouse position and flip the player and gun accordingly. 75 | 76 | In the `PlayerController` script, update to the following: 77 | 78 | ```cs 79 | // Omitted for brevity 80 | 81 | public class PlayerController : MonoBehaviour 82 | { 83 | // Omitted for brevity 84 | 85 | void Update() 86 | { 87 | // Omitted for brevity 88 | 89 | Vector3 mousePosition = Input.mousePosition; 90 | Vector3 cursorPoint = mainCamera.WorldToScreenPoint(transform.localPosition); 91 | 92 | if (mousePosition.x < cursorPoint.x) 93 | { 94 | transform.localScale = new Vector3(-1f, 1f, 1f); 95 | gunTransform.localScale = new Vector3(-1f, -1f, 1f); 96 | } 97 | else 98 | { 99 | transform.localScale = Vector3.one; 100 | gunTransform.localScale = Vector3.one; 101 | } 102 | 103 | Vector2 offset = new Vector2(mousePosition.x - cursorPoint.x, mousePosition.y - cursorPoint.y); 104 | float angle = Mathf.Atan2(offset.y, offset.x) * Mathf.Rad2Deg; 105 | gunTransform.rotation = Quaternion.Euler(new Vector3(0, 0, angle)); 106 | } 107 | } 108 | ``` 109 | 110 | Click on the **Play** button. Move the mouse around the screen. You should see the player and gun flip to face the mouse position. 111 | 112 | ![](../resources/img/08-images/08-image-3.png) 113 | 114 | --- 115 | 116 | ## Animation 117 | 118 | Currently, the player is not animated. To animate the player, we need to create an animation controller and animation clips. 119 | 120 | To open the **Animation** window, go to **Window > Animation > Animation**. This will open the **Animation** window. 121 | 122 | ![](../resources/img/08-images/08-image-4.png) 123 | 124 | --- 125 | 126 | ### Idle Animation 127 | 128 | In the **Hierarchy** window, select the `Player` object. In the **Animation** window, click on the **Create** button. In the **Assets** folder, create a new folder called `Animations`. Name the animation `PlayerIdle`. This will create a new animation clip called `PlayerIdle` in the `Animations` folder. 129 | 130 | ![](../resources/img/08-images/08-image-5.png) 131 | 132 | In this animation clip, the gun will move up and down while the player is idle. In the **Hierarchy** window, select the `Guns_0` **Game Object**. Drag the slider from `0` to `0.2`. 133 | 134 | ![](../resources/img/08-images/08-image-6.png) 135 | 136 | Click the **Record** button in the **Animation** window. This will start recording the animation. 137 | 138 | In the **Inspector** window, change the `Y` position of the `Guns_0` **Game Object** to `-0.1`. This will move the gun down. 139 | 140 | You should see a new **Property** in the **Animation** window called `Guns_0 : Position` and two keyframes. The first keyframe is at `0` and the second keyframe is at `0.2`. 141 | 142 | ![](../resources/img/08-images/08-image-9.png) 143 | 144 | Move the slider to `0.4` and create a new keyframe. Change the `Y` position of the `Guns_0` **Game Object** to `0`. 145 | 146 | ![](../resources/img/08-images/08-image-10.png) 147 | 148 | In the first keyframe, change the `Y` position of the `Guns_0` **Game Object** to `0`. 149 | 150 | ![](../resources/img/08-images/08-image-7.png) 151 | 152 | --- 153 | 154 | ### Walk Animation 155 | 156 | Create a new animation clip called `PlayerWalk` in the `Animations` folder. 157 | 158 | ![](../resources/img/08-images/08-image-11.png) 159 | 160 | Drag the slider from `0` to `0.2`. Click the **Record** button in the **Animation** window. In the **Hierarchy** window, select the `Characters_0` **Game Object**. In the **Inspector** window, change the `Z` rotation of the `Characters_0` **Game Object** to `7`. In the first keyframe, change the `Z` rotation of the `Characters_0` **Game Object** to `-7`. Add another keyframe at `0.1` and change the `Z` rotation of the `Characters_0` **Game Object** to `0`. 161 | 162 | ![](../resources/img/08-images/08-image-12.png) 163 | 164 | --- 165 | 166 | ### Animator 167 | 168 | To open the **Animator** window, go to **Window > Animation > Animator**. This will open the **Animator** window. 169 | 170 | You should see the following: 171 | 172 | ![](../resources/img/08-images/08-image-13.png) 173 | 174 | In the **Animator** window, click on the **Parameter** tab. 175 | 176 | ![](../resources/img/08-images/08-image-14.png) 177 | 178 | Click on the **+** button and create a new **Bool** parameter called `isMoving`. This will be used to determine if the player is moving or not. 179 | 180 | ![](../resources/img/08-images/08-image-15.png) 181 | 182 | Left-click on the `PlayerIdle` animation clip and select **Make Transition**. 183 | 184 | ![](../resources/img/08-images/08-image-16.png) 185 | 186 | 187 | Drag the arrow to the `PlayerWalk` animation clip. This will create a transition from the `PlayerIdle` animation clip to the `PlayerWalk` animation clip. 188 | 189 | ![](../resources/img/08-images/08-image-17.png) 190 | 191 | Click on the transition arrow. In the **Inspector** window, uncheck the **Has Exit Time** checkbox and set the **Condition** to `isMoving` is `true`. **Has Exit Time** is used to determine if the animation should exit or not. By unchecking this, we are telling Unity that the animation should exit immediately when the condition is met. 192 | 193 | ![](../resources/img/08-images/08-image-18.png) 194 | 195 | Left-click on the `PlayerWalk` animation clip and select **Make Transition**. Drag the arrow to the `PlayerIdle` animation clip. 196 | 197 | ![](../resources/img/08-images/08-image-19.png) 198 | 199 | Click on the transition arrow. In the **Inspector** window, uncheck the **Has Exit Time** checkbox and set the **Condition** to `isMoving` is `false`. 200 | 201 | ![](../resources/img/08-images/08-image-20.png) 202 | 203 | In the `PlayerController` script, update to the following: 204 | 205 | ```cs 206 | // Omitted for brevity 207 | 208 | public class PlayerController : MonoBehaviour 209 | { 210 | // Omitted for brevity 211 | 212 | [SerializeField] 213 | private Animator animator; 214 | 215 | // Omitted for brevity 216 | 217 | void Update() 218 | { 219 | // Omitted for brevity 220 | 221 | if (movement != Vector2.zero) 222 | { 223 | animator.SetBool("isMoving", true); 224 | } 225 | else 226 | { 227 | animator.SetBool("isMoving", false); 228 | } 229 | } 230 | } 231 | ``` 232 | 233 | > **Note:** You may have a different variable name for the `movement` variable. 234 | 235 | In the **Hierarchy** window, select the `Player` object. In the **Inspector** window, drag and drop the `Animator` component into the `Animator` field of the `PlayerController` script. 236 | 237 | ![](../resources/img/08-images/08-image-21.png) 238 | 239 | Click on the **Play** button. Move the player around the screen. You should see the player animate when moving and idle when not moving. 240 | 241 | --- 242 | 243 | ## Tilemaps 244 | 245 | **Tilemaps** are a way to create 2D environments using tiles. Tiles are small images that can be used to create larger images. Unity has a built-in tilemap system that allows you to create tilemaps easily. 246 | 247 | To create a tilemap, go to **GameObject > 2D Object > Tilemap > Rectangular**. 248 | 249 | ![](../resources/img/08-images/08-image-22.png) 250 | 251 | This will create a new `Grid` **Game Object** with a `Tilemap` **Game Object** inside it. The `Grid` **Game Object** is used to define the size of the tilemap and the `Tilemap` **Game Object** is used to store the tiles. 252 | 253 | ![](../resources/img/08-images/08-image-23.png) 254 | 255 | --- 256 | 257 | ### Tile Palette 258 | 259 | **Tile Palettes** are used to create and edit tiles. A tile palette is a collection of tiles that can be used to create a tilemap. You can create a tile palette by dragging and dropping images into the tile palette. 260 | 261 | To create a tile palette, go to **Window > 2D > Tile Palette**. This will open the **Tile Palette** window. 262 | 263 | ![](../resources/img/08-images/08-image-24.png) 264 | 265 | Create a new tile palette by clicking on the **Create New Palette** button. 266 | 267 | ![](../resources/img/08-images/08-image-25.png) 268 | 269 | In the **Create New Palette** window, name the tile palette `Dungeon 3` and click on the **Create** button. 270 | 271 | ![](../resources/img/08-images/08-image-26.png) 272 | 273 | Save the tile palette in the `Assets > Tilesets > Dungeon 3` folder. 274 | 275 | ![](../resources/img/08-images/08-image-27.png) 276 | 277 | Drag and drop the `Dungeon 3 Tiles` **Sprite Sheet** into the tile palette. This will create a new tile palette with the tiles from the sprite sheet. 278 | 279 | ![](../resources/img/08-images/08-image-28.png) 280 | 281 | You should see the `Dungeon 3` tile palette in the **Tile Palette** window. 282 | 283 | ![](../resources/img/08-images/08-image-29.png) 284 | 285 | Click on **Paint with basic brush** and select a tile from the tile palette. 286 | 287 | **Tasks:** 288 | 289 | 1. Create a room using the tiles from the tile palette. Here is an example of a room created using the tiles from the tile palette. 290 | 291 | ![](../resources/img/08-images/08-image-30.png) 292 | 293 | 2. Add a `Tilemap Collider 2D` component to the `Tilemap` **Game Object**. This will allow the player to collide with the tiles in the tilemap. Set the **Used By Composite** checkbox to `true`. This will allow the `Tilemap Collider 2D` to be used by the `Composite Collider 2D` component. 294 | 295 | 3. Add a `Composite Collider 2D` component to the `Tilemap` **Game Object**. This will allow the player to collide with the tiles in the tilemap as a single collider. 296 | 297 | > **Note:** When you add a `Composite Collider 2D` component, a `Rigidbody 2D` component will be added automatically. 298 | 299 | 4. In the `Rigidbody 2D` component, set the **Body Type** to `Kinematic`. This will allow the player to collide with the tiles in the tilemap without being affected by gravity. 300 | 301 | 5. Click on `Dungeon 3 Tiles_24` in the `Assets > Tilesets > Dungeon 3` folder. In the **Inspector** window, set the **Collider Type** to `None`. This will allow the player to walk on the tiles in the tilemap without colliding with them. 302 | 303 | ![](../resources/img/08-images/08-image-31.png) 304 | 305 | --- 306 | 307 | ## Formative Assessment 308 | 309 | Learning to use AI tools is an important skill. While AI tools are powerful, you **must** be aware of the following: 310 | 311 | - If you provide an AI tool with a prompt that is not refined enough, it may generate a not-so-useful response 312 | - Do not trust the AI tool's responses blindly. You **must** still use your judgement and may need to do additional research to determine if the response is correct 313 | - Acknowledge what AI tool you have used. In the assessment's repository **README.md** file, please include what prompt(s) you provided to the AI tool and how you used the response(s) to help you with your work 314 | 315 | --- 316 | 317 | ### Task 1 318 | 319 | You will notice that the player moves faster when moving diagonally. This is because the player is moving in both the `X` and `Y` directions at the same time. Write the code to normalise the movement vector so that the player moves at a constant speed in all directions. 320 | 321 | --- 322 | 323 | ## Next Class 324 | 325 | Link to the next class: [Week 09]() -------------------------------------------------------------------------------- /lecture-notes/09-collision-layers.md: -------------------------------------------------------------------------------- 1 | ## Week 09 2 | 3 | ## Previous Class 4 | 5 | Link to the previous class: [Week 08](https://github.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/blob/main-s1-25/lecture-notes/08-animation-tilemaps-tile-palettes.md) 6 | 7 | --- 8 | 9 | ## Rogue-Like Game 10 | 11 | In this module, you will continue to develop **Rogue-Like** using Unity. 12 | 13 | > **Note:** The following content does not take into account last week's formative assessment. Please ensure you have completed the formative assessment before continuing with this week's content. 14 | 15 | --- 16 | 17 | ## Player 18 | 19 | In the `PlayerController` **Script**, add the following code: 20 | 21 | ```csharp 22 | public static PlayerController Instance; 23 | 24 | void Awake() 25 | { 26 | if (Instance == null) 27 | { 28 | Instance = this; 29 | } 30 | else 31 | { 32 | Destroy(gameObject); 33 | } 34 | } 35 | ``` 36 | 37 | This will allow you to access the `PlayerController` class from other classes. For example, you can access the `PlayerController` class from the `EnemyController` class. 38 | 39 | --- 40 | 41 | ## Enemy 42 | 43 | Create a **Game Object** for an enemy. The setup should be similar to the player. 44 | 45 | ![](../resources/img/09-images/09-image-1.png) 46 | 47 | **Task:** Create an idling and walking animation for the enemy. 48 | 49 | Create a new **Script** called `EnemyController` and attach it to the enemy. Add the following code to the script: 50 | 51 | ```csharp 52 | using System.Collections; 53 | using System.Collections.Generic; 54 | using UnityEngine; 55 | 56 | public class EnemyController : MonoBehaviour 57 | { 58 | [SerializeField] private float speed = 2f; 59 | 60 | [SerializeField] private Rigidbody2D rb; 61 | 62 | [SerializeField] private float rangeToPlayer; 63 | 64 | private Vector3 direction; 65 | 66 | void Update() 67 | { 68 | if (Vector3.Distance(transform.position, PlayerController.Instance.transform.position) < rangeToPlayer) 69 | { 70 | direction = PlayerController.Instance.transform.position - transform.position; 71 | } 72 | else 73 | { 74 | direction = Vector3.zero; 75 | } 76 | 77 | direction.Normalize(); 78 | rb.velocity = direction * speed; 79 | } 80 | } 81 | ``` 82 | 83 | What is happening in the code above? 84 | 85 | In the `Update` method, we are checking if the player is within a certain range of the enemy. If the player is within that range, we set the direction of the enemy to move towards the player. If the player is outside that range, we set the direction to zero, which stops the enemy from moving. 86 | 87 | ![](../resources/img/09-images/09-image-2.png) 88 | 89 | **Task:** Write some code so that when the enemy is moving left or right, the enemy is facing the direction it is moving. 90 | 91 | --- 92 | 93 | ## Bullet 94 | 95 | Create a **Game Object** for a bullet. A bullet should have a **Box Collider 2D** and a **Rigidbody 2D** component. In the **Scripts** folder, create a new **Script** called `BulletController` and attach it to the bullet. 96 | 97 | ![](../resources/img/09-images/09-image-3.png) 98 | 99 | **Tasks:** 100 | 101 | 1. Write the code to make the bullet **Game Object** move in the direction it is facing. The bullet **Game Object** should be destroyed when it collides with an enemy. 102 | 2. Drag and drop the bullet **Game Object** into the **Prefabs** folder. Delete the bullet **Game Object** from the **Hierarchy**. 103 | 3. Write the code to make the `Player` **Game Object** shoot a bullet. The bullet should be instantiated at the `Player` **Game Object** position and move in the direction the `Player` is facing. 104 | 105 | --- 106 | 107 | ## Room 108 | 109 | Create a new **Game Object** called `BasicRoom`. Move the `Grid` and `Tilemap` **Game Objects** into the `BasicRoom` **Game Object**. Drag and drop the `BasicRoom` **Game Object** into the **Prefabs** folder. 110 | 111 | ![](../resources/img/09-images/09-image-4.png) 112 | --- 113 | 114 | ## Main Camera 115 | 116 | You are going to write the code to make the camera follow the `Player` **Game Object**. For example, if the `Player` **Game Object** moves from one room to another, the camera should follow the `Player` **Game Object**. 117 | 118 | Create a new **Script** called `CameraController` and attach it to the **Main Camera**. 119 | 120 | ```csharp 121 | using System.Collections; 122 | using System.Collections.Generic; 123 | using UnityEngine; 124 | 125 | public class CameraController : MonoBehaviour 126 | { 127 | public static CameraController Instance; 128 | 129 | [SerializeField] private float speed = 30f; 130 | 131 | [SerializeField] private Transform target; 132 | 133 | void Awake() 134 | { 135 | if (Instance == null) 136 | { 137 | Instance = this; 138 | } 139 | else 140 | { 141 | Destroy(gameObject); 142 | } 143 | } 144 | 145 | void Update() 146 | { 147 | if (target != null) 148 | { 149 | transform.position = Vector3.MoveTowards(transform.position, new Vector3(target.position.x, target.position.y, transform.position.z), speed * Time.deltaTime); 150 | } 151 | } 152 | 153 | public void ChangeTarget(Transform newTarget) 154 | { 155 | target = newTarget; 156 | } 157 | } 158 | ``` 159 | 160 | What is happening in the code above? 161 | 162 | - In the `Update` method, we are checking if the target is not null. If it is not null, we move the camera towards the target's position using `Vector3.MoveTowards`. The camera will move at a speed of `speed` units per second. 163 | - The `ChangeTarget` method allows us to change the target of the camera. This is useful when we want to change the target from the player to another object, such as an enemy. 164 | 165 | ![](../resources/img/09-images/09-image-5.png) 166 | 167 | **Task:** Add a `BasicRoom` **Prefab** to the scene. You should be able to move the `Player` **Game Object** between the rooms. However, the camera will not follow the `Player` **Game Object** when it moves between rooms. 168 | 169 | ![](../resources/img/09-images/09-image-6.png) 170 | 171 | --- 172 | 173 | ## Room Trigger 174 | 175 | You need a way to trigger the camera to change its target when the player enters a new room. 176 | 177 | In the **Scripts** folder, create a new **Script** called `Room` and attach it to the `BasicRoom` **Prefab**. In the `Room` **Script**, add the following code: 178 | 179 | ```csharp 180 | using System.Collections; 181 | using System.Collections.Generic; 182 | using UnityEngine; 183 | 184 | public class Room : MonoBehaviour 185 | { 186 | private void OnTriggerEnter2D(Collider2D collision) 187 | { 188 | if (collision.CompareTag("Player")) 189 | { 190 | CameraController.Instance.ChangeTarget(transform); 191 | } 192 | } 193 | } 194 | ``` 195 | 196 | > **Note:** Make sure you create a **Tag** called `Player` and assign it to the `Player` **Game Object**. 197 | 198 | What is happening in the code above? 199 | 200 | In the `OnTriggerEnter2D` method, we are checking if the player has entered the trigger collider of the room. If the player has entered the trigger collider, we call the `ChangeTarget` method of the `CameraController` class and pass in the transform of the room as the new target. 201 | 202 | Create a new **Game Object** called `RoomTrigger` and add a **Box Collider 2D** component to it. Set the `Is Trigger` property to true, and set the `Size - X` property to `16` and the `Size - Y` property to `8`. 203 | 204 | ![](../resources/img/09-images/09-image-7.png) 205 | 206 | --- 207 | 208 | ## Collision Layers 209 | 210 | **Collision layers** are used to determine which objects can collide with each other. 211 | 212 | In the **Hierarchy** window, click on any **Game Object**. In the **Inspector** window, click on the **Layer dropdown > Add Layer...**. Add the following layers: 213 | 214 | - Player 215 | - PlayerBullet 216 | - IgnoreBullet 217 | 218 | In the **Project Settings** window, click on **Physics 2D**. In the **Layer Collision Matrix**, uncheck the following boxes: 219 | 220 | - Player and PlayerBullet 221 | - PlayerBullet and PlayerBullet 222 | 223 | ![](../resources/img/09-images/09-image-8.png) 224 | 225 | > **Note:** Assign the following layers to the corresponding **Game Objects/Prefabs**: 226 | 227 | - `Player` **Game Object** should be assigned to the `Player` layer 228 | - `PlayerBullet` **Prefab** should be assigned to the `PlayerBullet` layer 229 | - `RoomTrigger` **Game Object** should be assigned to the `IgnoreBullet` layer 230 | 231 | --- 232 | 233 | ## Next Class 234 | 235 | Link to the next class: [Week 10]() -------------------------------------------------------------------------------- /resources/img/01-images/01-images-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-1.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-10.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-11.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-12.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-13.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-2.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-3.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-4.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-5.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-6.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-7.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-8.png -------------------------------------------------------------------------------- /resources/img/01-images/01-images-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/01-images/01-images-9.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-1.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-10.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-11.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-12.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-13.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-14.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-15.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-16.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-17.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-18.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-19.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-2.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-3.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-4.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-5.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-6.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-7.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-8.png -------------------------------------------------------------------------------- /resources/img/02-images/02-images-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/02-images-9.png -------------------------------------------------------------------------------- /resources/img/02-images/expected-outputs/02-expected-output-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/expected-outputs/02-expected-output-1.png -------------------------------------------------------------------------------- /resources/img/02-images/expected-outputs/02-expected-output-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/expected-outputs/02-expected-output-2.png -------------------------------------------------------------------------------- /resources/img/02-images/expected-outputs/02-expected-output-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/02-images/expected-outputs/02-expected-output-3.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-1.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-10.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-11.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-12.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-13.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-14.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-2.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-3.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-4.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-5.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-6.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-7.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-8.png -------------------------------------------------------------------------------- /resources/img/03-images/03-image-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/03-images/03-image-9.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-1.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-10.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-11.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-12.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-13.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-14.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-15.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-16.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-17.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-18.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-19.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-2.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-3.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-4.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-5.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-6.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-7.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-8.png -------------------------------------------------------------------------------- /resources/img/04-images/04-image-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/04-images/04-image-9.png -------------------------------------------------------------------------------- /resources/img/05-images/05-image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/05-images/05-image-1.png -------------------------------------------------------------------------------- /resources/img/05-images/05-image-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/05-images/05-image-2.png -------------------------------------------------------------------------------- /resources/img/05-images/05-image-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/05-images/05-image-3.png -------------------------------------------------------------------------------- /resources/img/05-images/05-image-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/05-images/05-image-4.png -------------------------------------------------------------------------------- /resources/img/05-images/05-image-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/05-images/05-image-5.png -------------------------------------------------------------------------------- /resources/img/05-images/05-image-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/05-images/05-image-6.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-1.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-10.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-11.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-12.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-2.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-3.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-4.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-5.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-6.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-7.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-8.png -------------------------------------------------------------------------------- /resources/img/07-images/07-image-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/07-images/07-image-9.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-1.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-10.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-11.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-12.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-13.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-14.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-15.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-16.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-17.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-18.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-19.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-2.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-20.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-21.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-22.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-23.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-24.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-25.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-26.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-27.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-28.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-29.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-3.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-30.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-31.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-4.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-5.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-6.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-7.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-8.png -------------------------------------------------------------------------------- /resources/img/08-images/08-image-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/08-images/08-image-9.png -------------------------------------------------------------------------------- /resources/img/09-images/09-image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/09-images/09-image-1.png -------------------------------------------------------------------------------- /resources/img/09-images/09-image-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/09-images/09-image-2.png -------------------------------------------------------------------------------- /resources/img/09-images/09-image-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/09-images/09-image-3.png -------------------------------------------------------------------------------- /resources/img/09-images/09-image-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/09-images/09-image-4.png -------------------------------------------------------------------------------- /resources/img/09-images/09-image-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/09-images/09-image-5.png -------------------------------------------------------------------------------- /resources/img/09-images/09-image-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/09-images/09-image-6.png -------------------------------------------------------------------------------- /resources/img/09-images/09-image-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/09-images/09-image-7.png -------------------------------------------------------------------------------- /resources/img/09-images/09-image-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/09-images/09-image-8.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-1.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-10.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-11.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-12.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-2.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-3.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-4.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-5.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-6.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-7.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-8.png -------------------------------------------------------------------------------- /resources/img/10-images/10-image-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/10-images/10-image-9.png -------------------------------------------------------------------------------- /resources/img/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/img/logo.jpg -------------------------------------------------------------------------------- /resources/rubrics/portfolio-marking-rubric.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/rubrics/portfolio-marking-rubric.docx -------------------------------------------------------------------------------- /resources/tex/course-directive.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otago-polytechnic-bit-courses/ID623001-introductory-game-development/f204059f24c0e47cd1825df9735d47e449dd8206/resources/tex/course-directive.pdf -------------------------------------------------------------------------------- /resources/tex/course-directive.tex: -------------------------------------------------------------------------------- 1 | % Author: Grayson Orr 2 | % Course: ID623001: Introduction to Algorithmic Problem Solving 3 | 4 | \documentclass{article} 5 | \author{} 6 | 7 | \usepackage{fontspec} 8 | \setmainfont{Arial} 9 | 10 | \usepackage{graphicx} 11 | \usepackage{wrapfig} 12 | \usepackage{enumerate} 13 | \usepackage{hyperref} 14 | \usepackage[margin = 2.25cm]{geometry} 15 | \usepackage[table]{xcolor} 16 | \hypersetup{ 17 | colorlinks = true, 18 | urlcolor = blue 19 | } 20 | \setlength\parindent{0pt} 21 | 22 | \begin{document} 23 | 24 | \begin{figure} 25 | \centering 26 | \includegraphics[width=50mm]{../img/logo.jpg} 27 | \end{figure} 28 | 29 | \title{Course Directive\\ID623001: Introductory Game Development\\Semester One, 2025} 30 | \date{} 31 | \maketitle 32 | 33 | \section*{Course Information} 34 | \begin{tabular}{ll} 35 | Level: & 6 \\ 36 | Credits: & 15 \\ 37 | Prerequisite: & ID511001: Programming 2 \\ 38 | Timetable: & Wednesday 10:00 AM D201 and Thursday 10:00 AM D313 39 | \end{tabular} 40 | 41 | \section*{Teaching Staff} 42 | \begin{tabular}{ll} 43 | Name: & Grayson Orr \\ 44 | Position: & Principal Lecturer and Second/Third-Year Coordinator\\ 45 | Office Location: & D309 \\ 46 | Email Address & grayson.orr@op.ac.nz \\ 47 | \end{tabular} 48 | 49 | \section*{Course Dates} 50 | \begin{tabular}{ll} 51 | Term 1 (8 weeks): & 17th February - 11th April \\ 52 | Term 2 (8 weeks): & 28th April - 19th June \\ 53 | \end{tabular} 54 | 55 | 56 | \section*{Public Holidays and Anniversary Days} 57 | A list of public holidays and anniversary days can be found here - \href{https://www.op.ac.nz/students/importantdates}{https://www.op.ac.nz/students/importantdates} 58 | 59 | \section*{Aims} 60 | To introduce the concepts of game development including algorithms and data structures that are required to use a simple, industry-relevant development framework. 61 | 62 | \section*{Learning Outcome} 63 | At the successful completion of this course, learners will be able to: 64 | \begin{enumerate} 65 | \item Design and build usable, attractive games using various introductory algorithms following an appropriate software development methodology. 66 | \end{enumerate} 67 | 68 | \section*{Assessments} 69 | \renewcommand{\arraystretch}{1.5} 70 | \begin{tabular}{|c|c|c|c|} 71 | \hline 72 | \textbf{Assessment} & \textbf{Weighting} & \textbf{Due Date} & \textbf{Learning Outcome} \\ \hline 73 | \small Portfolio & \small 100\% & \small Monday 9th June at 7.59 AM \small & \small 1 \\ \hline 74 | \end{tabular} 75 | 76 | \section*{Provisional Schedule} 77 | \renewcommand{\arraystretch}{1.5} 78 | \begin{tabular}{|c|c|c|} 79 | \hline 80 | \textbf{Week} & \multicolumn{2}{c|}{\textbf{Topics}} \\ \hline 81 | 1/Tahi & \multicolumn{2}{c|}{GitHub, Unity, Main Camera, Sprite, Rigidbody 2D, Collider 2D and Script} \\ \hline 82 | 2/Rua & \multicolumn{2}{c|}{Physic Material, Tag, Canvas and Text} \\ \hline 83 | 3/Toru & \multicolumn{2}{c|}{Multiple Inputs, Fixed Update, Prefabs, Grid Snap and Panel} \\ \hline 84 | 4/Whā & \multicolumn{2}{c|}{Instantiate, Design Patterns, Audio, Scene Management and Assets} \\ \hline 85 | 5/Rima & \multicolumn{2}{c|}{Input Manager, Clamping and Prefab Variants} \\ \hline 86 | 6/Ono & \multicolumn{2}{c|}{Invoke, API Integration and Saving to File} \\ \hline 87 | 7/Whitu & \multicolumn{2}{c|}{Spritesheet and Sorting Layers} \\ \hline 88 | 89 | 8/Waru & \multicolumn{2}{c|}{Animation, Tilemaps and Tile Palettes} \\ \hline 90 | \rowcolor{yellow} \multicolumn{3}{|c|}{Mid Semester Break} \\ \hline 91 | 9/Whitu & \multicolumn{2}{c|}{} \\ \hline 92 | 10/Tekau & \multicolumn{2}{c|}{} \\ \hline 93 | 11/Tekau mā tahi & \multicolumn{2}{c|}{Build Settings, Optimisation, and Publishing} \\ \hline 94 | 12/Tekau mā rua & \multicolumn{2}{c|}{Portfolio Work} \\ \hline 95 | 13/Tekau mā toru & \multicolumn{2}{c|}{Portfolio Work} \\ \hline 96 | 14/Tekau mā whā & \multicolumn{2}{c|}{Portfolio Work} \\ \hline 97 | 15/Tekau mā rima & \multicolumn{2}{c|}{Portfolio Work Due} \\ \hline 98 | 16/Tekau mā ono & \multicolumn{2}{c|}{Catch Up Week} \\ \hline 99 | \end{tabular} 100 | \section*{Resources} 101 | 102 | \subsection*{Software} 103 | This paper will be taught using \textbf{Unity} and \textbf{Visual Studio Code}. An installer for \textbf{Unity} and \textbf{Visual Studio Code} are available - \href{https://unity3d.com/get-unity/download}{https://unity3d.com/get-unity/download} and \href{https://code.visualstudio.com/download}{https://code.visualstudio.com/download}. Please refer any problems with downloads or installers to \textbf{Rob Broadley} in D205a. 104 | 105 | \subsection*{Readings} 106 | No textbook is required for this course. URLs to useful resources will be provided in the lecture notes. 107 | 108 | \section*{Course Requirements and Expectations} 109 | 110 | \subsection*{Learning Hours} 111 | This course requires \textbf{150 hours} of learning. This time includes \textbf{60 hours} directed learning hours and \textbf{90} self-directed learning hours. 112 | 113 | \subsection*{Criteria for Passing} 114 | To pass this paper, you must achieve a cumulative pass mark of \textbf{50\%} over all assessments. There are no reassessments or resits. 115 | 116 | \subsection*{Attendance} 117 | \begin{itemize} 118 | \item Learners are expected to attend all classes, including lectures and labs. 119 | \item If you cannot attend for a few days for any reason, contact the course. 120 | \end{itemize} 121 | 122 | \subsection*{Communication} 123 | \textbf{Microsoft Outlook/Teams} are the official communication channels for this course. It is your responsibility to regularly check \textbf{Microsoft Outlook/Teams} and \href{https://github.com/otago-polytechnic-bit-courses/ID623001-introduction-to-algorithmic-problem-solving}{GitHub} for important course material, including changes to class scheduling or assessment details. Not checking will not be accepted as an excuse. 124 | 125 | \subsection*{Snow Days/Polytechnic Closure} 126 | In the event \textbf{Otago Polytechnic} is closed or has a delayed opening because of snow or bad weather, you should not attempt to attend class if it is unsafe to do so. It is possible that the course lecturer will not be able to attend either, so classes will not physically be meeting. However, this does not become a holiday. Rather, the course material will be made available on \href{https://github.com/otago-polytechnic-bit-courses/ID623001-introduction-to-algorithmic-problem-solving}{GitHub} for classes affected by the closure. You are responsible for any course material presented in this manner. Information about closure will be posted on the \textbf{Otago Polytechnic Facebook} page \href{https://www.facebook.com/OtagoPoly}{https://www.facebook.com/OtagoPoly}. 127 | 128 | \subsection*{Group Work and Originality} 129 | Learners in the \textbf{Bachelor of Information Technology} programme are expected to hand in original work. Learners are encouraged to discuss assessments with their fellow learners, however, all assessments are to be completed as individual works unless group work is explicitly required (i.e. if it doesn't say it is group work then it is not group work - even if a group consultation was involved). Failure to submit your original work will be treated as plagiarism. 130 | 131 | \subsection*{AI Tools} 132 | Learning to use AI tool is an important skill. While AI tools are powerful, you \textbf{must} be aware of the following: 133 | 134 | \begin{itemize} 135 | \item If you provide an AI tool with a prompt that is not refined enough, it may generate a not-so-useful response 136 | \item Do not trust the AI tool's responses blindly. You \textbf{must} still use your judgement and may need to do additional research to determine if the response is correct 137 | \item Acknowledge what AI tool you have used. In the assessment's repository \textbf{README.md} file, please include what prompt(s) you provided to the AI tool and how you used the response(s) to help you with your work 138 | \end{itemize} 139 | 140 | \subsection*{Referencing} 141 | Appropriate referencing is required for all work. Referencing standards will be specified by the teaching staff. 142 | 143 | \subsection*{Plagiarism} 144 | Plagiarism is submitting someone elses work as your own. Plagiarism offences are taken seriously and an assessment that has been plagiarised may be awarded a zero mark. A definition of plagiarism is in the Student Handbook, available online or at the school office. 145 | 146 | \subsection*{Submission Requirements} 147 | All assessments are to be submitted by the time, date, and method given when the assessment is issued. Failure to meet all requirements will result in a penalty of up to \textbf{10\%} per day (including weekends). 148 | 149 | \subsection*{Extensions} 150 | Familiarise yourself with the assessment due dates. Extensions will \textbf{only} be granted if you are unable to complete the assessment by the due date because of \textbf{unforeseen circumstances outside your control}. The length of the extension granted will depend on the circumstances and \textbf{must} be negotiated with the course lecturer before the assessment due date. A medical certificate or support letter may be needed. Extensions will not be granted for poor time management or pressure of other assessments. 151 | 152 | \subsection*{Impairment} 153 | In case of sickness contact the course lecturer or \textbf{Head of Information Technology (Michael Holtz)} as soon as possible, preferably before the assessment is due. The policy regarding the granting of a mark that considers impaired performance requires a medical certificate and a medical practitioner’s signature on a form. You may refer to the guide on impaired performance on the student handbook. 154 | 155 | \subsection*{Appeals} 156 | If you are concerned about any aspect of your assessment, approach the course lecturer in the first instance. We support an open-door policy and aim to resolve issues promptly. Further support is available from the \textbf{Head of Information Technology (Michael Holtz)} and \textbf{Second/Third-Year Coordinator (Grayson Orr)}. \textbf{Otago Polytechnic} has a formal process for academic appeals if necessary. 157 | 158 | \subsection*{Other Documents} 159 | Regulatory documents relating to this course can be found on the \textbf{Otago Polytechnic} website. 160 | 161 | \end{document} 162 | --------------------------------------------------------------------------------