Source code for RWESharp.Loaders.Effect

from __future__ import annotations
from dataclasses import dataclass, field
from PySide6.QtGui import QColor, QPixmap
from PySide6.QtCore import QSize
from random import randint
import numpy as np


[docs] @dataclass class EffectOption: name: str options: list[str] selectedOption: str
[docs] def tolist(self): return [self.name, self.options.copy(), self.selectedOption]
[docs] class SeedOption(EffectOption):
[docs] def __init__(self): super().__init__("Seed", [], str(randint(0, 100)))
[docs] def tolist(self): return [self.name, self.options.copy(), int(self.selectedOption)]
[docs] class MoveDeleteOption(EffectOption):
[docs] def __init__(self): super().__init__("Move/Delete", ["Delete", "Move Back", "Move Forth"], "")
[docs] @dataclass(frozen=True) class Effect: name: str description: str tp: str crossscreen: int color: QColor options: list[EffectOption] repeats: int affect_open_areas: float preview: QPixmap category: EffectCategory ultrablack: bool # goo
[docs] def todict(self, size: QSize): newoptions = [i.tolist() for i in self.options] matrix = np.zeros(size.toTuple(), np.float16) return {"nm": self.name, "tp": self.tp, "options": newoptions, "repeats": self.repeats, "affectOpenAreas": self.affect_open_areas, "crossScreen": self.crossscreen, "mtrx": matrix}
[docs] @dataclass class EffectCategory: name: str color: QColor effects: list[Effect]
[docs] def find_effect(self, name) -> Effect | None: for i in self.effects: if i.name == name: return i return None
def __getitem__(self, item): return self.effects[item]
[docs] @dataclass class Effects: categories: list[EffectCategory]
[docs] def find_effect(self, name) -> Effect | None: for i in self.categories: effect = i.find_effect(name) if effect is not None: return effect return None
[docs] def find_category(self, name) -> EffectCategory | None: for i in self.categories: if i.name == name: return i return None
def __getitem__(self, item): return self.categories[item]