Source code for BaseMod.effects.effectRenderTexture

import numpy as np
from PySide6.QtCore import QPoint, QRect, QSize
from PySide6.QtGui import QColor

from RWS.Core import CELLSIZE
from RWS.Renderable import RenderLevelImage
from RWS.Utils import color_lerp


[docs] class EffectRenderLevelImage(RenderLevelImage):
[docs] def __init__(self, editor, depth, effect_index, add_renderable: bool = True): super().__init__(editor, depth, add_renderable=False) self.index = effect_index self.editor = editor self.painter.setPen(QColor(0, 0, 0, 0)) # self.painter.setCompositionMode(self.painter.CompositionMode.CompositionMode_Source) if add_renderable: self.module.add_renderable(self)
[docs] def change_index(self, index): self.index = index self.draw_layer()
[docs] def draw_layer(self) -> None: self.image.fill(QColor(0, 0, 0, 0)) if self.manager.selected_viewport is None or self.index >= len(self.module.level.l_effects[self.index]): return with np.nditer(self.module.level.l_effects[self.index]["mtrx"], flags=['multi_index'], op_flags=['readonly']) as it: for _ in it: self.draw_pixel(QPoint(it.multi_index[0], it.multi_index[1])) # for xi, x in enumerate(self.manager.selected_viewport.level.l_effects_effect_data(self.index)["mtrx"]): # for yi, y in enumerate(x): # self.draw_pixel(QPoint(xi, yi)) self.redraw()
[docs] def level_resized(self, rect): super().level_resized(rect) self.draw_layer()
[docs] def draw_pixel(self, point: QPoint, clear=False): drawpoint = point * CELLSIZE val = self.manager.selected_viewport.level.l_effects[self.index, point.x(), point.y()] color = color_lerp(self.editor.coloroff.value, self.editor.coloron.value, val / 100) self.painter.setBrush(color) self.painter.setPen(QColor(0, 0, 0, 0)) rect = QRect(drawpoint, QSize(CELLSIZE, CELLSIZE)) if clear: self.painter.setCompositionMode(self.painter.CompositionMode.CompositionMode_Clear) self.painter.fillRect(rect, QColor(0, 0, 0, 0)) self.painter.setCompositionMode(self.painter.CompositionMode.CompositionMode_SourceOver) self.painter.drawRect(rect)