from PySide6.QtCore import QRect, QPoint, QSize
from PySide6.QtGui import QColor, QMoveEvent
from BaseMod.effects.effectExplorer import EffectExplorer
from BaseMod.effects.effectHistory import EffectBrush
from BaseMod.effects.effectRenderTexture import EffectRenderLevelImage
from RWS.Configurable import ColorConfigurable, IntConfigurable
from RWS.Core import CELLSIZE
from RWS.Modify import Editor
from RWS.Renderable import RenderEllipse
[docs]
class EffectEditor(Editor):
[docs]
def __init__(self, mod):
super().__init__(mod)
self.effectui = None
self.coloroff = ColorConfigurable(mod, "EDIT_effect.color_off", QColor(210, 37, 219, 100), "No value color")
self.coloron = ColorConfigurable(mod, "EDIT_effect.color_on", QColor(37, 204, 18, 130), "Full value color")
self.elayer = EffectRenderLevelImage(self, 100, 0)
self.effectindex = IntConfigurable(None, "EDIT_effect.effectindex", 0, "Current effect")
self.brushsize = IntConfigurable(mod, "EDIT_effect.brushsize", 4, "Current effect")
self.brush = RenderEllipse(self, 0, QRect(0, 0, 1, 1))
self.effectindex.valueChanged.connect(self.select_effect)
self.lastpos = QPoint()
self.effect_explorer = EffectExplorer(self, self.manager.window)
[docs]
def select_effect(self, index):
self.effectindex.update_value(index)
self.elayer.change_index(self.effectindex.value)
[docs]
def mouse_move_event(self, event: QMoveEvent):
super().mouse_move_event(event)
pos = self.viewport.viewport_to_editor(self.mouse_pos)
self.update_brush()
if len(self.level.l_effects) == 0:
return
if self.mouse_left or self.mouse_right:
if self.lastpos != pos:
self.level.last_history_element.add_move(pos)
if self.level.inside(pos):
self.manager.set_status(f"{self.level.l_effects[self.effectindex.value, pos.x(), pos.y()]}")
self.lastpos = pos
[docs]
def update_brush(self):
pos = self.viewport.viewport_to_editor(self.mouse_pos)
brushpos = (pos - QPoint(self.brushsize.value, self.brushsize.value)) * CELLSIZE
rect = QRect(brushpos, QSize(self.brushsize.value * 2, self.brushsize.value * 2) * CELLSIZE)
if self.brushsize.value % 2 == 0:
rect.moveTo(brushpos + QPoint(CELLSIZE // 2, CELLSIZE // 2))
self.brush.setRect(rect)
[docs]
def mouse_left_press(self):
pos = self.viewport.viewport_to_editor(self.mouse_pos)
if len(self.level.l_effects) == 0:
return
self.level.add_history(EffectBrush, self.effectindex.value, pos, self.brushsize.value, False, self.shift)
[docs]
def mouse_right_press(self):
if self.mouse_left or len(self.level.l_effects) == 0:
return
pos = self.viewport.viewport_to_editor(self.mouse_pos)
self.level.add_history(EffectBrush, self.effectindex.value, pos, self.brushsize.value, True, self.shift)
[docs]
def init_scene_items(self, viewport):
super().init_scene_items(viewport)
self.effectui.add_effects()
self.effectui.effect_settings()