Advertisement
Guest User

Untitled

a guest
Sep 30th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.27 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3. using MonsterLove.StateMachine;
  4.  
  5. public class FuelGaugeHierarchical : MonoBehaviour {
  6.  
  7.     public enum States
  8.     {
  9.         Stopped,
  10.         Running,
  11.         Running_Full,
  12.         Running_OK,
  13.         Running_Warning,
  14.         Running_Critical,
  15.         Running_Empty
  16.     }
  17.  
  18.     private StateMachine<States> Fsm;
  19.  
  20.     const int FULL_LEVEL = 100;
  21.     const int OK_LEVEL = 95;
  22.     const int WARNING_LEVEL = 50;
  23.     const int CRITICAL_LEVEL = 20;
  24.     const int EMPTY_LEVEL = 0;
  25.  
  26.     int FuelLevel = 0;
  27.  
  28.     [Range(0,100)]
  29.     public int FuelLevelSetter;
  30.     [SerializeField]
  31.     private GameObject Indicator;
  32.     [SerializeField]
  33.     private Material StoppedMaterial;
  34.     [SerializeField]
  35.     private Material FullMaterial;
  36.     [SerializeField]
  37.     private Material OkMaterial;
  38.     [SerializeField]
  39.     private Material WarningMaterial;
  40.     [SerializeField]
  41.     private Material CriticalMaterial;
  42.     [SerializeField]
  43.     private Material EmptyMaterial;
  44.  
  45.     void Start ()
  46.     {
  47.         FuelLevelSetter = 100;
  48.         Fsm = StateMachine<States>.Initialize(this, States.Stopped);
  49.     }
  50.    
  51.     //This is our initial state
  52.     void Stopped_Enter()
  53.     {
  54.         //Set gauge material to "Full Material (Bright Green)
  55.         Indicator.GetComponent<MeshRenderer>().material = StoppedMaterial;
  56.     }
  57.  
  58.     void Stopped_Update()
  59.     {
  60.        //Check If Started
  61.             Fsm.ChangeState(States.Running_Full);
  62.     }
  63.  
  64.     //Dp this stuff in all the Running States
  65.     void Running_Update()
  66.     {
  67.         GetCurrentFuelLevel();
  68.         AdjustVisualIndicator();
  69.     }
  70.  
  71.     //This is our initial state
  72.     void Running_Full_Enter()
  73.     {
  74.         //Set gauge material to "Full Material (Bright Green)
  75.         Indicator.GetComponent<MeshRenderer>().material = FullMaterial;
  76.     }
  77.  
  78.     void Running_Full_Update()
  79.     {
  80.         if (FuelLevel <= OK_LEVEL)
  81.             Fsm.ChangeState(States.Running_OK);
  82.     }
  83.  
  84.     void Running_OK_Enter()
  85.     {
  86.         //Set gauge material to "OK Material (Dark Green)
  87.         Indicator.GetComponent<MeshRenderer>().material = OkMaterial;
  88.     }
  89.  
  90.     void Running_OK_Update()
  91.     {
  92.         if (FuelLevel <= WARNING_LEVEL)
  93.             Fsm.ChangeState(States.Running_Warning);
  94.         else if (FuelLevel >= FULL_LEVEL)
  95.             Fsm.ChangeState(States.Running_Full);
  96.     }
  97.  
  98.     void Running_Warning_Enter()
  99.     {
  100.         //Set gauge material to "Warning Material (Orange)
  101.         Indicator.GetComponent<MeshRenderer>().material = WarningMaterial;
  102.     }
  103.  
  104.     void Running_Warning_Update()
  105.     {
  106.         if (FuelLevel <= CRITICAL_LEVEL)
  107.             Fsm.ChangeState(States.Running_Critical);
  108.         else if (FuelLevel > OK_LEVEL)
  109.             Fsm.ChangeState(States.Running_OK);
  110.     }
  111.  
  112.     void Running_Critical_Enter()
  113.     {
  114.         //Set gauge material to "Critical Material (Red)
  115.         Indicator.GetComponent<MeshRenderer>().material = CriticalMaterial;
  116.     }
  117.  
  118.     void Running_Critical_Update()
  119.     {
  120.         if (FuelLevel <= EMPTY_LEVEL)
  121.             Fsm.ChangeState(States.Running_Empty);
  122.         else if (FuelLevel > WARNING_LEVEL)
  123.             Fsm.ChangeState(States.Running_Warning);
  124.     }
  125.  
  126.     void Running_Empty_Enter()
  127.     {
  128.         //Set gauge material to "Empty Material : Overlay text : "EMPTY";
  129.         Indicator.GetComponent<MeshRenderer>().material = EmptyMaterial;
  130.     }
  131.  
  132.     void Running_Empty_Update()
  133.     {
  134.          if (FuelLevel >= CRITICAL_LEVEL)
  135.             Fsm.ChangeState(States.Running_Critical);
  136.     }
  137.  
  138.     void GetCurrentFuelLevel()
  139.     {
  140.         FuelLevel = Mathf.CeilToInt(FlightSceneManager.Instance.CurrentFuel);
  141.     }
  142.  
  143.     void AdjustVisualIndicator()
  144.     {
  145.         Vector3 indicatorScale;
  146.         indicatorScale.x = (float)(FuelLevel / 100.0f);
  147.         indicatorScale.y = Indicator.transform.localScale.y;
  148.         indicatorScale.z = Indicator.transform.localScale.z;
  149.  
  150.         Indicator.transform.localScale = indicatorScale;
  151.  
  152.         Vector3 indicatorPosition;
  153.         indicatorPosition.x = (indicatorScale.x / 2) - 0.5f;
  154.         indicatorPosition.y = Indicator.transform.localPosition.y;
  155.         indicatorPosition.z = Indicator.transform.localPosition.z;
  156.  
  157.         Indicator.transform.localPosition = indicatorPosition;
  158.     }
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement