def set_button_state(self, button_state: Buttons.Logical): diff = self.prev ^ button_state # prev XOR new press = diff & button_state # Send press for: diff AND new release = diff & self.prev # Send release for: diff AND pref # keep = self.prev & button_state # Keep pressing: prev AND new self.prev = press # Release old buttons for i in bits(release): self.release_button(Buttons.Logical(i)) # Press new buttons for i in bits(press): self.press_button(Buttons.Logical(i)) return press, release
def as_slippi_bitmask(self) -> Buttons.Logical: """Return action(s) as Slippi bitmask.""" res = Buttons.Logical(Buttons.Logical.NONE) for i, mask in enumerate(STATE_TO_SLIPPI): if self.state[i]: res |= mask return res