Scripts Overview
This repository contains several C# scripts for a Unity-based game that involves cooking, food preparation, and quest completion. The game features a variety of mechanics, including food cutting, cooking, quest management, and player interaction. Below is a summary of the key scripts, their functionalities, and explanations of the main features.
1. FoodQuest.cs
- Purpose: Manages food quests, including dish requirements, ingredient tracking, and quest completion.
- Key Features:
- Quest Generation: Randomly generates dishes and required ingredients for each quest.
- Quest Completion: Tracks whether the player has provided the correct ingredients for a dish.
- Timer: Each quest has a timer, and if the player fails to complete it in time, the quest expires.
- Network Synchronization: Ensures that quests are synchronized across all clients in a multiplayer environment.
- Key Functions:
OnTriggerEnter(Collider other): Checks if the player has provided the correct ingredients for the quest.
AwardPoints(): Awards points to the player upon successful completion of a quest.
GetRandomDish(): Randomly selects a dish from a predefined list.
GetRandomIngredients(string dish): Generates a list of required ingredients based on the selected dish.
OnNetworkSetInitState(object[] args): Synchronizes the quest state across all clients.
2. FoodCut.cs
- Purpose: Handles the cutting and cooking of food items.
- Key Features:
- Food Cutting: Allows players to cut food into smaller pieces using knives.
- Cooking Mechanics: Tracks the cooking process, including overcooking and burning.
- Network Synchronization: Ensures that food cutting and cooking are synchronized across all clients.
- Key Functions:
OnCollisionEnter(Collision other): Detects collisions with knives and triggers the cutting process.
HandleCookingEvent_Oven(): Starts the cooking process when food is placed in an oven.
HandleCookingEvent_Grill(): Starts the cooking process when food is placed on a grill.
CookingProcess(GameObject cookedVersion, GameObject burntVersion, float cookingTime, float overcookTime): Manages the cooking timer and transitions between raw, cooked, and burnt states.
3. FruitSlicerGameManager.cs
- Purpose: Manages a fruit-slicing mini-game, including spawning fruits, tracking player progress, and handling game states.
- Key Features:
- Fruit Spawning: Spawns fruits at random positions and trajectories.
- Score Tracking: Tracks the player's score based on how many fruits they slice.
- Combo System: Rewards players with higher scores for slicing multiple fruits in quick succession.
- Lives System: Players lose lives if they fail to slice fruits, and the game ends if all lives are lost.
- Key Functions:
SpawnFruit(): Spawns a fruit at a random position and applies a force to make it move.
OnFruitHit(): Increases the player's score and combo when a fruit is sliced.
OnFruitDropped(): Decreases the player's lives when a fruit is missed.
EndGame(): Ends the game and resets all variables.
4. OverCookedGameManager.cs
- Purpose: Manages the overall game state, including spawning food quests, tracking player progress, and handling game difficulty.
- Key Features:
- Quest Spawning: Continuously spawns food quests for the player to complete.
- Score Tracking: Tracks the player's score based on completed quests.
- Difficulty Adjustment: Allows players to adjust the game difficulty, affecting the frequency and complexity of quests.
- Key Functions:
SpawnFoodCard(): Spawns a new food quest card with a random dish and required ingredients.
CheckActiveFoodCards(): Checks for completed or expired quests and updates the score accordingly.
AddScore(int x): Adds points to the player's score when a quest is completed.
5. InstantiateObject.cs
- Purpose: Handles the instantiation of food objects and manages their lifecycle.
- Key Features:
- Object Spawning: Spawns food objects when the player interacts with a spawner.
- Object Tracking: Keeps track of spawned objects and ensures they are properly destroyed when no longer needed.
- Network Synchronization: Ensures that object spawning is synchronized across all clients.
- Key Functions:
SpawnObject(): Instantiates a new food object and adds it to the list of spawned objects.
HandleObjectDestroyed(GameObject destroyedObject): Removes a destroyed object from the list of spawned objects.
6. DishText.cs
- Purpose: Manages the display of dish names and ingredients, ensuring they face the player.
- Key Features:
- Text Rotation: Ensures that the text always faces the player, making it easier to read.
- Player Tracking: Tracks the player's position and adjusts the text rotation accordingly.
- Key Functions:
Update(): Continuously updates the text rotation to face the player.
Key Features and Mechanics
- Food Preparation: Players can cut, cook, and prepare various food items using knives, ovens, and grills.
- Quest System: Players are given quests to prepare specific dishes, and they must gather the required ingredients to complete the quests.
- Multiplayer Support: The game supports multiplayer, with all actions (e.g., cutting, cooking, quest completion) synchronized across all clients.
- Score and Progress Tracking: Players earn points for completing quests and slicing fruits, and their progress is tracked throughout the game.
- Difficulty Adjustment: Players can adjust the game difficulty, affecting the complexity and frequency of quests.
Usage
- Game Setup: Attach the
OverCookedGameManager script to a GameObject in the scene to manage the overall game state.
- Quest Management: Use the
FoodQuest script to create and manage food quests.
- Food Preparation: Attach the
FoodCut script to food items to enable cutting and cooking mechanics.
- Fruit Slicing Mini-Game: Use the
FruitSlicerGameManager script to manage the fruit-slicing mini-game.
- Object Spawning: Use the
InstantiateObject script to spawn food objects in the game world.
- Text Display: Attach the
DishText script to text objects to ensure they always face the player.
Audio Visualizer Scripts Section
This repository also contains several C# scripts for Unity that handle audio visualization. These scripts allow you to create dynamic visual effects (e.g., bars, lights, or materials) that respond to audio input. Below is a summary of the key scripts, their functionalities, and explanations of the main features.
Scripts Overview
1. AudioVisualizer.cs
- Purpose: Visualizes audio spectrum data using bars that scale based on the audio input.
- Key Features:
- Single Audio Source: Focuses on the closest active audio source in the scene.
- Smoothing: Smooths the spectrum data to create a more fluid visual effect.
- Dynamic Scaling: Scales visualizer bars based on the intensity of the audio spectrum.
- Key Functions:
Update(): Continuously updates the visualizer bars based on the audio spectrum data.
FindClosestAudioSource(): Finds the closest active audio source in the scene.
2. JukeBox.cs
- Purpose: Manages a music player with visualizer bars that respond to the currently playing song.
- Key Features:
- Music Player: Allows users to play, pause, skip tracks, and adjust volume.
- Visualizer Bars: Displays visualizer bars that react to the music.
- Autoplay: Automatically plays the next song when the current one ends.
- Key Functions:
PlaySong(int index): Plays the song at the specified index and updates the UI.
Update(): Updates the visualizer bars and progress bar based on the current song.
OnPausePlayButtonClick(MLPlayer player): Toggles between play and pause states.
3. MultiSourceAudioVisualizer.cs
- Purpose: Visualizes audio spectrum data from multiple audio sources simultaneously.
- Key Features:
- Multiple Audio Sources: Accumulates spectrum data from all active audio sources in the scene.
- Smoothing: Smooths the spectrum data for a more fluid visual effect.
- Dynamic Scaling: Scales visualizer bars based on the combined audio spectrum.
- Key Functions:
Update(): Continuously updates the visualizer bars based on the combined audio spectrum data.
4. MultiSourceAudioVisualizerLight.cs
- Purpose: Visualizes audio spectrum data using a light that changes color and intensity.
- Key Features:
- Light Visualization: Changes the color and intensity of a light based on the audio spectrum.
- Gradient Support: Uses a gradient to define color transitions based on the spectrum.
- Multiple Audio Sources: Accumulates spectrum data from all active audio sources.
- Key Functions:
Update(): Updates the light's color and intensity based on the combined audio spectrum data.
5. MultiSourceAudioVisualizerMaterials.cs
- Purpose: Visualizes audio spectrum data by modifying material properties (e.g., color and emission) of visualizer bars.
- Key Features:
- Material-Based Visualization: Changes material properties (color and emission) based on the audio spectrum.
- Gradient Support: Uses a gradient to define color transitions for the materials.
- Multiple Audio Sources: Accumulates spectrum data from all active audio sources.
- Key Functions:
Update(): Updates the material properties of the visualizer bars based on the combined audio spectrum data.
6. MultiSourceAudioVisualizerMaterialsColorGradient.cs
- Purpose: Dynamically creates and manages visualizer bars that respond to audio spectrum data, with material properties controlled by a gradient.
- Key Features:
- Dynamic Visualizer Bars: Creates and positions visualizer bars dynamically based on the spectrum data.
- Gradient Support: Uses a gradient to define color transitions for the materials.
- Emission Control: Adjusts emission intensity based on the frequency range.
- Key Functions:
UpdateVisualizerCount(): Ensures the number of visualizer bars matches the spectrum data count.
UpdateVisualizers(): Updates the scale and material properties of the visualizer bars based on the audio spectrum.
Key Features and Mechanics
- Audio Spectrum Visualization: All scripts use Unity's
GetSpectrumData to analyze audio and create visual effects.
- Smoothing: Smoothing is applied to the spectrum data to create fluid and visually appealing animations.
- Dynamic Scaling: Visualizer bars or lights scale based on the intensity of the audio spectrum.
- Gradient Support: Several scripts use gradients to define color transitions, allowing for more visually interesting effects.
- Multiple Audio Sources: Some scripts can handle multiple audio sources, combining their spectrum data for a more complex visualization.
Usage
- AudioVisualizer.cs: Attach this script to a GameObject with visualizer bars to visualize the closest audio source.
- JukeBox.cs: Attach this script to a music player GameObject to manage song playback and display visualizer bars.
- MultiSourceAudioVisualizer.cs: Use this script to visualize audio from multiple sources simultaneously.
- MultiSourceAudioVisualizerLight.cs: Attach this script to a light GameObject to create a light-based audio visualizer.
- MultiSourceAudioVisualizerMaterials.cs: Use this script to modify material properties (e.g., color and emission) based on audio input.
- MultiSourceAudioVisualizerMaterialsColorGradient.cs: Use this script to dynamically create and manage visualizer bars with gradient-based material effects.