State.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*enum states{
  2. Read = 1, //0001
  3. Write = 2, //0010
  4. Create = 4,//0100
  5. Delete = 8 //1000
  6. }/**状态类型不算合并的不超过32种
  7. export enum StateType {
  8. Unmatched = 1<<1,//无敌
  9. Swoon = 1<<2,//晕眩
  10. }*/
  11. /**状态对像*/
  12. class State {
  13. private _state: number = 0;//无状态
  14. public Init(): void {
  15. this._state = 0;
  16. }
  17. /**是否满足传入的状态*/
  18. public Meet(state: number): boolean {
  19. return State.Has(this._state, state);
  20. }
  21. /**传入的状态是组合型时只要满足其一 */
  22. public MeetAny(state: number): boolean {
  23. let a = this._state & state;
  24. if (a === state) return true;
  25. if (a == 0) return false;
  26. return State.Has(state, a);
  27. }
  28. /**是否满足所有传入的状态*/
  29. public MeetAll(...params: number[]): boolean {
  30. let result = 0;
  31. for (let i = 0; i < params.length; i++) {
  32. result |= params[i];
  33. }
  34. return this.Meet(State.CombieState(result))
  35. }
  36. /**是否满足其中传入的状态*/
  37. public MeetAnyOne(...params: number[]): boolean {
  38. for (let i = 0; i < params.length; i++) {
  39. if (this.Meet(params[i])) return true;
  40. }
  41. return false;
  42. }
  43. /**加入状态*/
  44. public Add(state: number): void {
  45. this._state |= state;
  46. }
  47. /**删除状态*/
  48. public Delete(state: number): void {
  49. if (!this.Meet(state)) return;
  50. this._state ^= state;
  51. }
  52. /**转成状态*/
  53. public static ToState(Id: number): number {
  54. return 1 << Id;
  55. }
  56. /**合并状态*/
  57. public static CombieState(...params: number[]): number {
  58. let result = 0;
  59. for (let i = 0; i < params.length; i++) {
  60. result |= params[i];
  61. }
  62. return result;
  63. }
  64. public static Has(statss: number, state: number): boolean {
  65. return (statss & state) === state;
  66. }
  67. }
  68. export default function get_new_state(): State { return new State(); }