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]