ch.flags = {}
ch.flags[:afk] = true
ch.flags[:likes_cake] = true
ch.flags[:npc] = false
BIT_ONE = (1 << 0)
BIT_TWO = (1 << 1 )
# …
class BitFlags
attr_accessor :bits
def initialize
@bits = 0
end
def set_bit( bit )
@bits |= bit
end
def remove_bit( bit )
@bits &= ~bit
end
end
module HasFlags
def method_missing(sym, *args)
type = sym.to_s[-1..-1]
if type == "?"
@_flags ||= {}
return @_flags[sym.to_s[0..-2].intern] ? true : false
end
if type == "!"
@_flags ||= {}
sym = sym.to_s[0..-2].intern
if @_flags[sym]
@_flags.delete(sym)
else
@_flags[sym] = true
end
return
end
raise
end
end
player = Object.new # Anything
player.extend(HasFlags)
# Query to see if something has flags.
if player.is_a?(HasFlags)
puts "Yeap."
end
# toggle flags
player.drunk!
player.mute!
player.anything_else_to_set!
puts player.drunk?
puts player.mute?
puts player.some_flag_never_mentioned?
# still fails on other method missings.
begin
puts player.fail()
rescue
puts "Failed."
end
Yeap.
true
true
false
Failed.
class Flags
include HasFlags
end
ch.flags = Flags.new
I have read up on bitwise operators, but I cant seem to figure out how to get it to work.