62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
"""
|
|
compass
|
|
"""
|
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
|
import logging
|
|
from OpenGL import GL
|
|
from drawable import Drawable
|
|
from glutils import gl
|
|
from mceutils import loadPNGTexture
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def makeQuad(minx, miny, width, height):
|
|
return [minx, miny, minx+width, miny, minx+width, miny+height, minx, miny + height]
|
|
|
|
class CompassOverlay(Drawable):
|
|
_tex = None
|
|
_yawPitch = (0., 0.)
|
|
|
|
def __init__(self, small=False):
|
|
super(CompassOverlay, self).__init__()
|
|
self.small = small
|
|
|
|
@property
|
|
def yawPitch(self):
|
|
return self._yawPitch
|
|
|
|
@yawPitch.setter
|
|
def yawPitch(self, value):
|
|
self._yawPitch = value
|
|
self.invalidate()
|
|
|
|
def drawSelf(self):
|
|
if self._tex is None:
|
|
if self.small:
|
|
filename = "compass_small.png"
|
|
else:
|
|
filename = "compass.png"
|
|
|
|
self._tex = loadPNGTexture("toolicons/" + filename)#, minFilter=GL.GL_LINEAR, magFilter=GL.GL_LINEAR)
|
|
|
|
self._tex.bind()
|
|
size = 0.075
|
|
|
|
with gl.glPushMatrix(GL.GL_MODELVIEW):
|
|
GL.glLoadIdentity()
|
|
|
|
yaw, pitch = self.yawPitch
|
|
GL.glTranslatef(1.-size, size, 0.0) # position on upper right corner
|
|
GL.glRotatef(180-yaw, 0., 0., 1.) # adjust to north
|
|
GL.glColor3f(1., 1., 1.)
|
|
|
|
with gl.glEnableClientState(GL.GL_TEXTURE_COORD_ARRAY):
|
|
GL.glVertexPointer(2, GL.GL_FLOAT, 0, makeQuad(-size, -size, 2*size, 2*size))
|
|
GL.glTexCoordPointer(2, GL.GL_FLOAT, 0, makeQuad(0, 0, 256, 256))
|
|
|
|
with gl.glEnable(GL.GL_BLEND, GL.GL_TEXTURE_2D):
|
|
GL.glDrawArrays(GL.GL_QUADS, 0, 4)
|
|
|
|
|