60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
from numpy.core.umath import absolute
|
|
from pygame import key
|
|
from albow import Label
|
|
from pymclevel.box import Vector
|
|
import config
|
|
from glbackground import GLBackground
|
|
|
|
class NudgeButton(GLBackground):
|
|
""" A button that captures movement keys while pressed and sends them to a listener as nudge events.
|
|
Poorly planned. """
|
|
|
|
is_gl_container = True
|
|
|
|
def __init__(self):
|
|
GLBackground.__init__(self)
|
|
nudgeLabel = Label("Nudge", margin=8)
|
|
|
|
self.add(nudgeLabel)
|
|
self.shrink_wrap()
|
|
|
|
# tooltipBacking = Panel()
|
|
# tooltipBacking.bg_color = (0, 0, 0, 0.6)
|
|
keys = [config.config.get("Keys", k).upper() for k in ("Forward", "Back", "Left", "Right", "Up", "Down")]
|
|
|
|
nudgeLabel.tooltipText = "Click and hold. While holding, use the movement keys ({0}{1}{2}{3}{4}{5}) to nudge. Hold SHIFT to nudge faster.".format(*keys)
|
|
# tooltipBacking.shrink_wrap()
|
|
|
|
def mouse_down(self, event):
|
|
self.focus()
|
|
|
|
def mouse_up(self, event):
|
|
self.get_root().mcedit.editor.focus_switch = None # xxxx restore focus to editor better
|
|
|
|
def key_down(self, evt):
|
|
keyname = key.name(evt.key)
|
|
if keyname == config.config.get("Keys", "Up"):
|
|
self.nudge(Vector(0, 1, 0))
|
|
if keyname == config.config.get("Keys", "Down"):
|
|
self.nudge(Vector(0, -1, 0))
|
|
|
|
Z = self.get_root().mcedit.editor.mainViewport.cameraVector # xxx mouthful
|
|
absZ = map(abs, Z)
|
|
if absZ[0] < absZ[2]:
|
|
forward = (0, 0, (-1 if Z[2] < 0 else 1))
|
|
else:
|
|
forward = ((-1 if Z[0] < 0 else 1), 0, 0)
|
|
|
|
back = map(int.__neg__, forward)
|
|
left = forward[2], forward[1], -forward[0]
|
|
right = map(int.__neg__, left)
|
|
|
|
if keyname == config.config.get("Keys", "Forward"):
|
|
self.nudge(Vector(*forward))
|
|
if keyname == config.config.get("Keys", "Back"):
|
|
self.nudge(Vector(*back))
|
|
if keyname == config.config.get("Keys", "Left"):
|
|
self.nudge(Vector(*left))
|
|
if keyname == config.config.get("Keys", "Right"):
|
|
self.nudge(Vector(*right))
|