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)