Advertisement
freswinn

GDScript: Bit/flag functions

Feb 27th, 2023
1,620
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ##########################
  2. ### Bit/flag functions ###
  3. ##########################
  4.  
  5. # You need to create a variable like this (in this example, there are four flags):
  6. #   var flags = 0b0000
  7. #
  8. # Then you need to create some constants or an enum for these flags.
  9. # As an enum:
  10. #   enum STATES { walking = 1 << 0, running = 1 << 1, rising = 1 << 2, falling = 1 << 3 }
  11. # Or as constants:
  12. #   const STATE_WALKING = 1 << 0
  13. #   const STATE_RUNNING = 1 << 1
  14. #   ...
  15.  
  16.  
  17.  
  18. # USE CASE: if check_flag(bitfield_variable, flag_constant): ...
  19. # e.g.
  20. # if check_flag(statebits, STATES.walking):
  21.  
  22. static func check_flag(bitfield : int, flag : int, verbose : bool = false):
  23.     var out = bool(bitfield & flag)
  24.     if verbose: print(out)
  25.     return out
  26.  
  27.  
  28. # USE CASE: bitfield_variable = toggle_flag(bitfield_variable, flag_constant)
  29. # e.g.
  30. # statebits = toggle_flag(statebits, STATES.walking)
  31.  
  32. static func toggle_flag(bitfield : int, flag : int):
  33.     if (bitfield & flag): bitfield = bitfield - flag
  34.     else: bitfield = bitfield | flag
  35.     print(bitfield)
  36.     return bitfield
  37.  
  38.  
  39. # USE CASE: bitfield_variable = set_flag(bitfield_variable, flag_constant, boolean)
  40. # e.g.
  41. # statebits = set_flag(statebits, STATE.walking, true)
  42.  
  43. static func set_flag(bitfield : int, flag : int, switch : bool):
  44.     if switch: # setting bit to 1
  45.         if !(bitfield & flag):  bitfield = bitfield | flag
  46.     else: # setting bit to 0
  47.         if (bitfield & flag):    bitfield = bitfield - flag
  48.     return bitfield
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement