Instantly share code, notes, and snippets.

Embed
What would you like to do?
#silentkrakenblog Manager systems for unity3d, a new approach
[RequireComponent(typeof(GameManager))]
[RequireComponent(typeof(ScreenManager))]
[RequireComponent(typeof(AudioManager))]
[RequireComponent(typeof(MissionManager))]
public class Managers : MonoBehaviour
{
private static GameManager gameManager;
public static GameManager Game
{
get { return gameManager; }
}
private static ScreenManager screenManager;
public static ScreenManager Screen
{
get { return screenManager; }
}
private static AudioManager audioManager;
public static AudioManager Audio
{
get { return audioManager; }
}
private static MissionManager missionManager;
public static MissionManager Mission
{
get { return missionManager; }
}
// Use this for initialization
void Awake ()
{
//Find the references
gameManager = GetComponent<GameManager>();
screenManager = GetComponent<ScreenManager>();
audioManager = GetComponent<AudioManager>();
missionManager = GetComponent<MissionManager>();
//Make this game object persistant
DontDestroyOnLoad(gameObject);
}
}
Managers.Audio.Play(transform.position, clip);
public class GameManager : MonoBehaviour
{
private GameState currentState;
public GameState State
{
get { return currentState; }
}
//Changes the current game state
public void SetState(System.Type newStateType)
{
if (currentState != null)
{
currentState.OnDeactivate();
}
currentState = GetComponentInChildren(newStateType) as GameState;
if (currentState != null)
{
currentState.OnActivate();
}
}
void Update()
{
if (currentState != null)
{
currentState.OnUpdate();
}
}
void Start()
{
SetState(typeof(GameplayState));
}
}
public abstract class GameState : MonoBehaviour
{
public abstract void OnActivate();
public abstract void OnDeactivate();
public abstract void OnUpdate();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment