Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using MonsterLove.StateMachine;
- public class FuelGaugeHierarchical : MonoBehaviour {
- public enum States
- {
- Stopped,
- Running,
- Running_Full,
- Running_OK,
- Running_Warning,
- Running_Critical,
- Running_Empty
- }
- private StateMachine<States> Fsm;
- const int FULL_LEVEL = 100;
- const int OK_LEVEL = 95;
- const int WARNING_LEVEL = 50;
- const int CRITICAL_LEVEL = 20;
- const int EMPTY_LEVEL = 0;
- int FuelLevel = 0;
- [Range(0,100)]
- public int FuelLevelSetter;
- [SerializeField]
- private GameObject Indicator;
- [SerializeField]
- private Material StoppedMaterial;
- [SerializeField]
- private Material FullMaterial;
- [SerializeField]
- private Material OkMaterial;
- [SerializeField]
- private Material WarningMaterial;
- [SerializeField]
- private Material CriticalMaterial;
- [SerializeField]
- private Material EmptyMaterial;
- void Start ()
- {
- FuelLevelSetter = 100;
- Fsm = StateMachine<States>.Initialize(this, States.Stopped);
- }
- //This is our initial state
- void Stopped_Enter()
- {
- //Set gauge material to "Full Material (Bright Green)
- Indicator.GetComponent<MeshRenderer>().material = StoppedMaterial;
- }
- void Stopped_Update()
- {
- //Check If Started
- Fsm.ChangeState(States.Running_Full);
- }
- //Dp this stuff in all the Running States
- void Running_Update()
- {
- GetCurrentFuelLevel();
- AdjustVisualIndicator();
- }
- //This is our initial state
- void Running_Full_Enter()
- {
- //Set gauge material to "Full Material (Bright Green)
- Indicator.GetComponent<MeshRenderer>().material = FullMaterial;
- }
- void Running_Full_Update()
- {
- if (FuelLevel <= OK_LEVEL)
- Fsm.ChangeState(States.Running_OK);
- }
- void Running_OK_Enter()
- {
- //Set gauge material to "OK Material (Dark Green)
- Indicator.GetComponent<MeshRenderer>().material = OkMaterial;
- }
- void Running_OK_Update()
- {
- if (FuelLevel <= WARNING_LEVEL)
- Fsm.ChangeState(States.Running_Warning);
- else if (FuelLevel >= FULL_LEVEL)
- Fsm.ChangeState(States.Running_Full);
- }
- void Running_Warning_Enter()
- {
- //Set gauge material to "Warning Material (Orange)
- Indicator.GetComponent<MeshRenderer>().material = WarningMaterial;
- }
- void Running_Warning_Update()
- {
- if (FuelLevel <= CRITICAL_LEVEL)
- Fsm.ChangeState(States.Running_Critical);
- else if (FuelLevel > OK_LEVEL)
- Fsm.ChangeState(States.Running_OK);
- }
- void Running_Critical_Enter()
- {
- //Set gauge material to "Critical Material (Red)
- Indicator.GetComponent<MeshRenderer>().material = CriticalMaterial;
- }
- void Running_Critical_Update()
- {
- if (FuelLevel <= EMPTY_LEVEL)
- Fsm.ChangeState(States.Running_Empty);
- else if (FuelLevel > WARNING_LEVEL)
- Fsm.ChangeState(States.Running_Warning);
- }
- void Running_Empty_Enter()
- {
- //Set gauge material to "Empty Material : Overlay text : "EMPTY";
- Indicator.GetComponent<MeshRenderer>().material = EmptyMaterial;
- }
- void Running_Empty_Update()
- {
- if (FuelLevel >= CRITICAL_LEVEL)
- Fsm.ChangeState(States.Running_Critical);
- }
- void GetCurrentFuelLevel()
- {
- FuelLevel = Mathf.CeilToInt(FlightSceneManager.Instance.CurrentFuel);
- }
- void AdjustVisualIndicator()
- {
- Vector3 indicatorScale;
- indicatorScale.x = (float)(FuelLevel / 100.0f);
- indicatorScale.y = Indicator.transform.localScale.y;
- indicatorScale.z = Indicator.transform.localScale.z;
- Indicator.transform.localScale = indicatorScale;
- Vector3 indicatorPosition;
- indicatorPosition.x = (indicatorScale.x / 2) - 0.5f;
- indicatorPosition.y = Indicator.transform.localPosition.y;
- indicatorPosition.z = Indicator.transform.localPosition.z;
- Indicator.transform.localPosition = indicatorPosition;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement