PacMan MiniGame
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PacManManager : MonoBehaviour
{
public int AiAlive = 4;
public static PacManManager instance { get; private set; }
public List<AI> Enemies;
[SerializeField] private float delayedStartTimer;
private bool enemiesStart;
public bool gameStart;
public GameObject winScreen;
private bool queued;
public GameObject cherryCollectable;
public GameObject bar;
public bool jumpscare;
private void Awake()
{
instance = this;
}
private void Start()
{
PlayerBehaviour.instance.enabled = false;
}
private void Update()
{
if (gameStart)
{
if (Enemies.Count == 0 && !queued)
{
winScreen.SetActive(true);
SceneLoader.instance.NextScene(5);
PlayerPrefs.SetInt("MiniGamesWon", PlayerPrefs.GetInt("MiniGamesWon", 0) + 1);
queued = true;
}
if (delayedStartTimer > 0)
{
delayedStartTimer -= Time.deltaTime;
}
else if (!enemiesStart)
{
enemiesStart = true;
bar.SetActive(false);
StartCoroutine("BarRise");
for (int i = 0; i < Enemies.Count; i++)
{
Enemies[i].movement = AI.movementState.chasing;
}
}
}
}
IEnumerator BarRise()
{
yield return new WaitForSeconds(5f);
bar.SetActive(true);
}
public void StartGame()
{
gameStart = true;
PlayerBehaviour.instance.enabled = true;
StartCoroutine(spawnCherry());
}
public void DisableAI()
{
for(int i =0; i < Enemies.Count;i++)
{
Enemies[i].agent.enabled = false;
}
}
IEnumerator spawnCherry()
{
yield return new WaitForSeconds(10f);
Instantiate(cherryCollectable, new Vector3(0f, 3.2f, 0f), Quaternion.identity);
}
}
-------------------------------------------------------------------------------------------------
=================================================================================================
//AI CODE BELOW//
//VERY BASIC DUE TO TIME//
=================================================================================================
-------------------------------------------------------------------------------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class AI : MonoBehaviour
{
public NavMeshAgent agent;
public Transform target;
[SerializeField] private Sprite deathSprite;
[SerializeField] private SpriteRenderer sr;
[SerializeField] private Animator anim;
private bool ded;
[SerializeField] private PlayerBehaviour player;
[SerializeField] private Rigidbody2D rb;
[SerializeField] private Collider2D circle;
[SerializeField] private AudioSource audio;
[SerializeField] private AudioClip clip;
public enum movementState
{
idle,
chasing,
scared
}
public movementState movement = movementState.idle;
private void Awake()
{
agent.updateRotation = false;
agent.updateUpAxis = false;
StartCoroutine(PathFinding());
}
private void Update()
{
if (!ded && movement != movementState.idle)
{
if (player.powerup || player.immune)
{
anim.SetBool("scared", true);
movement = movementState.scared;
}
else if (!player.powerup)
{
anim.SetBool("scared", false);
movement = movementState.chasing;
}
}
}
IEnumerator PathFinding()
{
while (true)
{
if(ded)
yield break;
if (!ded && movement != movementState.idle && agent.enabled)
{
if (movement == movementState.chasing)
{
agent.SetDestination(target.position);
}
else if (movement == movementState.scared)
{
agent.SetDestination(transform.position - player.gameObject.transform.position);
}
yield return null;
}
yield return new WaitForEndOfFrame();
}
}
IEnumerator deadSequence()
{
yield return new WaitForEndOfFrame();
agent.enabled = false;
yield return new WaitForEndOfFrame();
audio.Play();
rb.constraints = RigidbodyConstraints2D.None;
circle.enabled = false;
rb.AddForce(Vector3.up * 400);
Destroy(gameObject, 4);
PacManManager.instance.Enemies.Remove(this);
yield return null;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Player"))
{
if (PlayerBehaviour.instance.powerup)
{
sr.sprite = deathSprite;
ded = true;
StartCoroutine(deadSequence());
}
else
{
if (!PacManManager.instance.jumpscare)
{
PacManManager.instance.jumpscare = true;
StartCoroutine(JumpScare());
PlayerBehaviour.instance.inputEnabled = false;
PlayerBehaviour.instance.AddLivesToSelf(-1);
}
}
}
}
IEnumerator JumpScare()
{
audio.clip = clip;
sr.sortingOrder = 10;
agent.enabled = false;
transform.position = new Vector3(0,-2,0);
float time = 0;
audio.Play();
while (time < 1)
{
transform.localScale = Vector3.Lerp(transform.localScale, new Vector3(18, 18, 18), .5f);
time += Time.deltaTime;
yield return new WaitForSeconds(.05f);
}
yield return null;
yield return new WaitForSeconds(5);
SceneLoader.instance.ReturnToMainMenu();
}
}