Skip to content

File: ShaderFlow/Modules/Keyboard.py

ShaderFlow.Modules.Keyboard

__camel__

__camel__(name: str) -> str
Source code in Projects/ShaderFlow/ShaderFlow/Modules/Keyboard.py
13
14
15
16
@functools.lru_cache(maxsize=None)
def __camel__(name: str) -> str:
    # Convert stuff like (NUMPAD_9 -> Numpad9) and (Home -> Home)
    return "".join([word.capitalize() for word in name.split("_")])

ShaderKeyboard

Bases: ShaderModule

Source code in Projects/ShaderFlow/ShaderFlow/Modules/Keyboard.py
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@define
class ShaderKeyboard(ShaderModule):
    Keys    = None
    DirKeys = None

    _pressed: dict[int, bool] = Factory(dict)

    @staticmethod
    def set_keymap(keymap: ModernglKeys) -> None:
        ShaderKeyboard.DirKeys = {key: getattr(keymap, key) for key in dir(keymap) if not key.startswith("_")}
        ShaderKeyboard.Keys = keymap

    def pressed(self, key: Union[int, ModernglKeys]=None) -> bool:
        return self._pressed.setdefault(key, False)

    def __call__(self, *a, **k) -> bool:
        return self.pressed(*a, **k)

    def pipeline(self) -> Iterable[ShaderVariable]:
        return
        for name, key in ShaderKeyboard.DirKeys.items():
            yield Uniform("bool", f"iKey{__camel__(name)}", self._pressed.setdefault(key, False))

    def handle(self, message: ShaderMessage):
        if isinstance(message, ShaderMessage.Keyboard.Press):
            self._pressed[message.key] = (message.action != ShaderKeyboard.Keys.ACTION_RELEASE)

Keys

Keys = None

DirKeys

DirKeys = None

set_keymap

set_keymap(keymap: ModernglKeys) -> None
Source code in Projects/ShaderFlow/ShaderFlow/Modules/Keyboard.py
25
26
27
28
@staticmethod
def set_keymap(keymap: ModernglKeys) -> None:
    ShaderKeyboard.DirKeys = {key: getattr(keymap, key) for key in dir(keymap) if not key.startswith("_")}
    ShaderKeyboard.Keys = keymap

pressed

pressed(key: Union[int, ModernglKeys] = None) -> bool
Source code in Projects/ShaderFlow/ShaderFlow/Modules/Keyboard.py
30
31
def pressed(self, key: Union[int, ModernglKeys]=None) -> bool:
    return self._pressed.setdefault(key, False)

__call__

__call__(*a, **k) -> bool
Source code in Projects/ShaderFlow/ShaderFlow/Modules/Keyboard.py
33
34
def __call__(self, *a, **k) -> bool:
    return self.pressed(*a, **k)

pipeline

pipeline() -> Iterable[ShaderVariable]
Source code in Projects/ShaderFlow/ShaderFlow/Modules/Keyboard.py
36
37
38
39
def pipeline(self) -> Iterable[ShaderVariable]:
    return
    for name, key in ShaderKeyboard.DirKeys.items():
        yield Uniform("bool", f"iKey{__camel__(name)}", self._pressed.setdefault(key, False))

handle

handle(message: ShaderMessage)
Source code in Projects/ShaderFlow/ShaderFlow/Modules/Keyboard.py
41
42
43
def handle(self, message: ShaderMessage):
    if isinstance(message, ShaderMessage.Keyboard.Press):
        self._pressed[message.key] = (message.action != ShaderKeyboard.Keys.ACTION_RELEASE)