Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5.  
  6. /// <summary>
  7. /// Permet de créer une machine à états.
  8. /// </summary>
  9. public abstract class AFiniteMachineState<TMachineStateChildType, TStateEnumeration> : MonoBehaviour
  10. where TStateEnumeration : struct, IConvertible
  11. where TMachineStateChildType : AFiniteMachineState<TMachineStateChildType, TStateEnumeration>
  12. {
  13. #region Fields
  14. /// <summary>
  15. /// Ce sont tous les états de notre machine à états.
  16. /// </summary>
  17. protected AState<TMachineStateChildType, TStateEnumeration>[] states;
  18. /// <summary>
  19. /// C'est l'état courant de notre machine à état.
  20. /// </summary>
  21. private AState<TMachineStateChildType, TStateEnumeration> currentState;
  22. #endregion
  23.  
  24. #region Unity Behaviours
  25. protected void Awake()
  26. {
  27. this.CreateStates();
  28.  
  29. this.currentState = this.GetState(this.GetDefaultStateID());
  30.  
  31. if (null == this.currentState)
  32. {
  33. Debug.LogFormat("Votre machine à état de type [<b><color=red>{0}</color></b>] ne possède pas l'état par défault que vous lui avez défini.",
  34. this.GetType().BaseType.Name);
  35. }
  36. }
  37.  
  38. /// <summary>
  39. /// Appel la mise à jour de la machine à état et appelle les méthodes de l'état courant et précédent : Enter, Stay, Quit.
  40. /// </summary>
  41. protected void Update()
  42. {
  43. TStateEnumeration oldState = this.currentState.StateID;
  44. int oldStateIndex = EnumerationHelper.GetIndex(this.currentState.StateID);
  45.  
  46. this.UpdateState();
  47.  
  48. if (oldStateIndex != EnumerationHelper.GetIndex(this.currentState.StateID))
  49. {
  50. this.GetState(oldState).QuitState();
  51. this.currentState.EnterInState();
  52. }
  53.  
  54. this.currentState.StayInState();
  55. }
  56. #endregion
  57.  
  58. #region Abstract Behaviour
  59. /// <summary>
  60. /// Cette méthode permet de créer les différents états de la machine à états.
  61. /// </summary>
  62. protected abstract void CreateStates();
  63.  
  64. /// <summary>
  65. /// Permet de récupérer l'identifiant de l'état par défault.
  66. /// </summary>
  67. protected abstract TStateEnumeration GetDefaultStateID();
  68.  
  69. /// <summary>
  70. /// C'est la méthode qui met à jour l'état courant.
  71. /// </summary>
  72. protected abstract void UpdateState();
  73. #endregion
  74.  
  75. #region Intern Behaviours
  76. /// <summary>
  77. /// Permet de récupérer l'état correspondant à un identifiant passé en paramètre.
  78. /// </summary>
  79. protected AState<TMachineStateChildType, TStateEnumeration> GetState(TStateEnumeration stateID)
  80. {
  81. return Array.Find(this.states, state => state.StateID.Equals(stateID));
  82. }
  83. #endregion
  84. //Appeler les différents états de ma machine à états.
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement