CS2335
Master_v2
Master_v2
  • Introduction
  • Introduction
    • Introduction
      • Design
      • Game Design
    • Unity - Download
    • Visual Studio - IDE
    • Hero's Journey
  • Unity Basics
    • Unity Editor Windows
    • MonoBehavior - Base-Class
    • Unity Engine - Event Functions
  • Getting Started
    • UI-Elements
    • Animator Controller
      • Animation Steps
    • PlayerController Flow Chart
    • PlayerController Code
      • PlayerController - V1 - S20
      • PlayerController V2 S20
      • PlayerController V3 S20
  • Project 1 - Simple Game
    • Overview
    • Project 1 - Get Started
      • UML Class Diagram
    • Player GameObject
      • PlayerController.cs V2
      • PlayerController.cs V3
    • Create 2D Sprite Prefab: Rock
    • Sorting Layers
  • Project1 Code
    • PickUp PreFabs
    • Player GameObject
    • PlayerController - jump
    • GameData Version1
    • PlayerStats Version1
    • MiniGameManager
      • Logic Diagram
    • Simple Spawner
    • Utility Class
  • Project1 Enhancements
    • PickUp - SelfDestruct
    • Spawn from List of Prefabs
  • Project 2 - StateManager
    • Project 2 - Learning Objectives
    • Project 2 - Starter Assets
    • Project 2
      • State Machine Framework
        • Singleton Pattern
      • StateManager - Singleton Design Pattern
      • IStateBase, BeginState
      • Project 2 -Steps: Create new Scene and State
      • Project 2 - List of Steps
        • Project 2 - Starter Code
  • Project 2 -Dialog
    • Hide_Show_Panel Script
    • Configure TitlePanel, DecisionPanel
    • Simple Dialog Prefab
    • Conversation Scriptable Objects
    • DialogManager_ConvList
    • Image Transitions for Buttons
  • UI Components
    • Finding Game Objects
    • Game Objects: UI vs. 2D Sprite
    • UI Elements
      • Canvas: Screen-Space Render-Mode
      • UI-Buttons To Change Scene
      • Text Input
  • Project2 Resources
    • Visual Novel in Unity-Links
    • Scriptable Object Factory
      • ScriptableObjects
    • Dialog Prefab Packages
  • Project 3 - Overview
    • Branching Story Structures
    • Dictionary Data-Structure
      • Unity PlayerPrefs Dictionary
    • Dictionary: User-Choice Data
      • User-Choices - Example
        • Dictionary Value to Disable Options
    • Simplified Mini-Game
      • PlayerController_v2 Mods
        • PlayerController_v2_final
      • MiniGameManager_v2
  • Proj3: Inventory System
    • Inventory-System
      • Install and Configure
      • Diagrams, Resources
        • Item, Gem, Potion Classes
        • Inventory Class
      • InventoryDisplay, Slot UI
        • InventoryDisplay Class
        • Slot Class
        • Hazard Class
        • Layout Groups
      • Customization Steps
        • Configure Animation
        • AddItem Button
        • Concrete Class: Food
        • MiniGame Mods
          • PlayerController Mods
      • Code: InventorySystem
        • GameData, PickUp Mods
      • Resources: Data Structures
  • Proj3: Custom UnityEvents
    • Event Publishing Patterns
    • Custom Event Messaging
  • Proj3: Mini-Game
    • MiniGame-Overview-Proj3
    • LevelManager
      • LevelManager Logic Diagram
      • LevelManager FSM
      • LoadLevel, StartLevel Logic
      • Code Framework
    • Timer
  • Project 3 - Code Mods
    • Project 3 - Steps
    • Project 3 - Code
      • Code: Final Versions
        • PlayerController Mods
          • PlayerController_v2 Mods
        • GameData - Final
        • LevelManager
        • PlayerStats - Final
        • PickUp, Hazard, ScorePickUp
        • Spawner - Final
        • CameraFollow
        • ScreenFader
        • MiniGameState
        • Example: EndState
      • MiniGameWin Logic
  • Optional, Supplemental Content
    • Optional Content
      • Adding Audio
      • Screen Fading and Reloading
      • ScriptableObjects
      • Disable Debug Logging
      • Events and Actions
      • Saving Data - Serialization
      • Parallax Scrolling
      • Change Sprites
  • C# Language
    • C# Language
      • Variables
      • Enum
      • Encapsulation
        • C# Properties
        • Access Modifiers
      • Inheritance
      • Polymorphism
      • Interface
      • Switch-Case
      • List< T >
      • Queue< T >
      • Dictionary
      • Foreach
      • Static
      • Ternary Operator: ?
      • this
      • Delegates
    • Diagrams
      • State Machine Framework
      • UML Class Diagrams
      • Level Manager Logic Diagram
      • Flow-Chart: NumberGame
      • FSM: NumberGame
    • Glossary
    • References and Resources
    • Random Thoughts
Powered by GitBook
On this page
  • MiniGame Manager
  • Overview - MiniGameManager.cs:
  • Code MiniGameState, MiniGameManager
  • Version 2 - With Spawner Code Added

Was this helpful?

  1. Project1 Code

MiniGameManager

Code updated 2/17/2020

PreviousPlayerStats Version1NextLogic Diagram

Last updated 5 years ago

Was this helpful?

MiniGame Manager

This script will be on emptyGameObject: MiniGameManager You'll need to populate public fields in the inspector. See Images below:

Create The following GameObjects:

ResultsPanel: UI-Panel with CanvasGroup Component ResultsText: UI-Text - child of ResultsPanel StartButton: UI-Button MiniGameManager: Empty GameObject

Put Script on an empty gameObject in the Scene.

Overview - MiniGameManager.cs:

This class manages logic for:

  • Start Button to Start Gameplay

    • Function ReStartGame( ) is executed when the StartButton is clicked

      • Resets GameData

      • Hides the Results Panel:

      • Sets the GameState to MiniGameState.active

      • Sets the StartButton so it's inactive (hidden)

      • Starts the Spawner

      • Set the Spawner's activeSpawning = true

      • Calls Spawner's StartSpawning( ) method.

  • Polling - Code Executed in Update: - Checked Every Frame

    • Checks to determine what the current MiniGameState is

    • if MiniGameState.active

      • Check that Health is still greater than 0

      • If Health is Greater than 0

        • Check Score, if Score > WinScore

          • Set MiniGameState.Win

          • Call GameOver( )

      • Else if Health is Less than 0

        • Set MiniGameState.Lose

          • Call GameOver( )

  • GameOver( ) Method

    • Set Result Text to Win or Lose message

    • Make ResultsPanel visible ( Use Utility to set CanvasGroup values)

    • StartButton - setActive is true, makes visible

    • Stop Spawner by activeSpawning = false

    • Destroy any remaining spawned objects

  • DisplayResult - This method is called when the Game

Code MiniGameState, MiniGameManager

See Version2 below for Included Spawner Code

//Feb 2020
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;   //Required for modifying any UI element

public class MiniGameManager : MonoBehaviour
{

    public enum MiniGameState {  idle, active, win, lose }

    public MiniGameState curGameState;

    //TODO Add Spawner

    public Button startButton; //Button component on the StartButton gameObject
    public Text resultsText;   //Text component on the ResultsText gameObject
    public CanvasGroup resultsPanelCG; //canvas group component on the ResultsPanel
    public int winScore = 30;

    // Start is called before the first frame update
    void Start()
    {
        curGameState = MiniGameState.idle;  
        Utility.ShowCG(resultsPanelCG); //make sure panel is visible
        resultsText.text = "Score " + winScore + " To Win";
        startButton.onClick.AddListener(ReStartGame);
    }

    // Update is called once per frame
    void Update()
    {
        if( curGameState == MiniGameState.active)
        {
            if( GameData.instanceRef.Health > 0)
            {
                if( GameData.instanceRef.TotalScore >= winScore)
                {
                    //won the game
                    curGameState = MiniGameState.win;
                    resultsText.text = "You are a winner";
                    GameOver();
                }
            }
            else  //lost due to health
            {
                curGameState = MiniGameState.lose;
                resultsText.text = "You lost, so sorry, try again";
                GameOver();
            }

        } //end if
    } //end Update

    /// <summary>
    /// Restart the game
    /// </summary>
    /// Syntax for a method to be executed by a Unity Event
    /// MUST BE PUBLIC to be executed by Unity EVENT
    public void ReStartGame()  //important syntax
    {
        GameData.instanceRef.ResetGameData();  //use singleton variable to call public method
        Utility.HideCG(resultsPanelCG); //toggle to hide panel
        curGameState = MiniGameState.active;
        //TODO 
        //start spawner
    }

    /// <summary>
    /// Games the over.
    /// Private since only executed from within this class
    /// </summary>
    private void GameOver()
    {
        Utility.ShowCG(resultsPanelCG); //toggle to make visible
        ///TODO stop spawner, destroy all spawned objects
        /// Get Text that is the child of the StartButton 
        Text btnText = startButton.GetComponentInChildren<Text>();
        btnText.text = "Play Again";
    }

}//end class

Version 2 - With Spawner Code Added

The code below is a simplified version, either version should work, select the one you prefer

//Feb 22, 2020
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;   //Required for modifying any UI element

public class MiniGameManager : MonoBehaviour
{

    public enum MiniGameState {  idle, active, win, lose }

    public MiniGameState curGameState;

    public Spawner spawner;//populate in inspector

    public Button startButton; //Button component on the StartButton gameObject
    public Text resultsText;   //Text component on the ResultsText gameObject
    public CanvasGroup resultsPanelCG; //canvas group component on the ResultsPanel
    public int winScore = 30;

    // Start is called before the first frame update
    void Start()
    {
        curGameState = MiniGameState.idle;  
        Utility.ShowCG(resultsPanelCG); //make sure panel is visible
        resultsText.text = "Score " + winScore + " To Win";
        startButton.onClick.AddListener(ReStartGame);
    }

    // Update is called once per frame
    void Update()
    {
        if( curGameState == MiniGameState.active)
        {
            if( GameData.instanceRef.Health > 0)
            {
                if( GameData.instanceRef.TotalScore >= winScore)
                {
                    //won the game
                    curGameState = MiniGameState.win;
                    resultsText.text = "You are a winner";
                    GameOver();
                }
            }
            else  //lost due to health
            {
                curGameState = MiniGameState.lose;
                resultsText.text = "You lost, so sorry, try again";
                GameOver();
            }

        } //end if
    } //end Update

    /// <summary>
    /// Restart the game
    /// </summary>
    /// Syntax for a method to be executed by a Unity Event
    /// MUST BE PUBLIC to be executed by Unity EVENT
    public void ReStartGame()  //important syntax
    {
        GameData.instanceRef.ResetGameData();  //use singleton variable to call public method
        Utility.HideCG(resultsPanelCG); //toggle to hide panel
        curGameState = MiniGameState.active;

        //start spawner
        spawner.activeSpawning = true;
        spawner.StartSpawning();
    }

    /// <summary>
    /// Games the over.
    /// Private since only executed from within this class
    /// </summary>
    private void GameOver()
    {
        Utility.ShowCG(resultsPanelCG); //toggle to make visible
        ///TODO stop spawner, destroy all spawned objects
        spawner.activeSpawning = false;
        spawner.DestroyAllPickups();

        /// Get Text that is the child of the StartButton 
        Text btnText = startButton.GetComponentInChildren<Text>();
        btnText.text = "Play Again";
    }

}//end class