PillowFight/Assets/Scripts/GameManager.cs

140 lines
3.4 KiB
C#

using UnityEngine;
using System.Collections;
using InputHandler;
using MenusHandler;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
public int PlayerCount = 4;
private static GameManager _instance;
public MomBehavior mom;
public Image Icon1;
public Image Icon2;
public Image Icon3;
public Image IconGo;
public static GameManager Instance
{
get { return _instance; }
}
void Awake()
{
_instance = this;
/*
if (_instance != null)
{
Destroy(gameObject);
}
else
{
_instance = this;
DontDestroyOnLoad(gameObject);
}*/
}
void Start()
{
for (int i = 0; i < PlayerCount; i++)
{
InputManager.Instance.AddCallback(i, HandleMenuInput);
}
// play gameplay music
MusicManager.Instance.PlayGameplayMusic();
Icon1.gameObject.SetActive(false);
Icon2.gameObject.SetActive(false);
Icon3.gameObject.SetActive(false);
IconGo.gameObject.SetActive(false);
StartCoroutine(CountDown());
}
private IEnumerator CountDown()
{
yield return new WaitForSeconds(0.5f);
yield return StartCoroutine(FadeOutNumber(Icon3));
yield return StartCoroutine(FadeOutNumber(Icon2));
yield return StartCoroutine(FadeOutNumber(Icon1));
mom.StartGame = true;
yield return StartCoroutine(FadeOutNumber(IconGo));
}
private IEnumerator FadeOutNumber(Image number)
{
number.gameObject.SetActive(true);
number.rectTransform.offsetMax = Vector2.zero;
number.rectTransform.offsetMin = Vector2.zero;
Vector2 initialAnchorMin = new Vector2(0.4f, 0.3f);
Vector2 initialAnchorMax = new Vector2(0.6f, 0.7f);
Vector2 finalAnchor = new Vector2(0.5f, 0.5f);
float ratio = 0f;
Color initialColor = number.color;
Color finalColor = new Color(initialColor.r, initialColor.g, initialColor.b, 0f);
while (ratio < 1f)
{
ratio += Time.deltaTime / 1f;
number.rectTransform.anchorMin = Vector2.Lerp(initialAnchorMin, finalAnchor, ratio);
number.rectTransform.anchorMax = Vector2.Lerp(initialAnchorMax, finalAnchor, ratio);
number.color = Color.Lerp(initialColor, finalColor, ratio);
yield return null;
}
number.gameObject.SetActive(false);
}
public void PushMenuContext()
{
for (int i = 0; i < PlayerCount; i++)
{
InputManager.Instance.PushActiveContext("Menu", i);
}
}
public void PopMenuContext()
{
for (int i = 0; i < PlayerCount; i++)
{
InputManager.Instance.PopActiveContext(i);
}
}
private void HandleMenuInput(MappedInput input)
{
float yAxis = 0f;
if (input.Ranges.ContainsKey("SelectOptionUp"))
{
yAxis = input.Ranges["SelectOptionUp"];
}
else if (input.Ranges.ContainsKey("SelectOptionDown"))
{
yAxis = -input.Ranges["SelectOptionDown"];
}
bool accept = input.Actions.Contains("Accept");
MenusManager.Instance.SetInputValues(accept, false, 0f, yAxis);
}
public MomBehavior.State GetMomState() {
return mom.GetState();
}
}