From 6ba9955b90cbd643879943396fb163748a99218e Mon Sep 17 00:00:00 2001 From: David Vierra Date: Sun, 6 Oct 2013 16:34:07 -1000 Subject: [PATCH] Added a compass. --- compass.png | Bin 0 -> 20622 bytes compass.py | 61 +++++++++++++++++++++++++++++++++++++++++++++ compass_small.png | Bin 0 -> 7899 bytes drawable.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++ glutils.py | 12 +++++++++ leveleditor.py | 13 ++++++++++ mceutils.py | 6 ++--- 7 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 compass.png create mode 100644 compass.py create mode 100644 compass_small.png create mode 100644 drawable.py diff --git a/compass.png b/compass.png new file mode 100644 index 0000000000000000000000000000000000000000..c2033fe54983578a705a12940accf1987cdd94a9 GIT binary patch literal 20622 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 literal 0 HcmV?d00001 diff --git a/drawable.py b/drawable.py new file mode 100644 index 0000000..3025da6 --- /dev/null +++ b/drawable.py @@ -0,0 +1,62 @@ +""" + ${NAME} +""" +from __future__ import absolute_import, division, print_function, unicode_literals +import logging +log = logging.getLogger(__name__) + +from OpenGL import GL + +class Drawable(object): + + def __init__(self): + super(Drawable, self).__init__() + self._displayList = None + self.invalidList = True + self.children = [] + + def setUp(self): + """ + Set up rendering settings and view matrices + :return: + :rtype: + """ + + def tearDown(self): + """ + Return any settings changed in setUp to their previous states + :return: + :rtype: + """ + + def drawSelf(self): + """ + Draw this drawable, if it has its own graphics. + :return: + :rtype: + """ + + def _draw(self): + self.setUp() + self.drawSelf() + for child in self.children: + child.draw() + self.tearDown() + + def draw(self): + if self._displayList is None: + self._displayList = GL.glGenLists(1) + + if self.invalidList: + self.compileList() + + GL.glCallList(self._displayList) + + def compileList(self): + GL.glNewList(self._displayList, GL.GL_COMPILE) + self._draw() + GL.glEndList() + self.invalidList = False + + def invalidate(self): + self.invalidList = True diff --git a/glutils.py b/glutils.py index cca1b2f..c2d95c8 100644 --- a/glutils.py +++ b/glutils.py @@ -79,6 +79,18 @@ class gl(object): finally: GL.glPopAttrib() + @classmethod + @contextmanager + def glEnableClientState(cls, *enables): + try: + GL.glPushClientAttrib(GL.GL_CLIENT_ALL_ATTRIB_BITS) + for e in enables: + GL.glEnableClientState(e) + + yield + finally: + GL.glPopClientAttrib() + listCount = 0 @classmethod diff --git a/leveleditor.py b/leveleditor.py index 685fd4d..ebeb880 100644 --- a/leveleditor.py +++ b/leveleditor.py @@ -12,6 +12,7 @@ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.""" import sys +from compass import CompassOverlay from editortools.thumbview import ThumbView from pymclevel.infiniteworld import SessionLockLost @@ -1304,6 +1305,18 @@ class CameraViewport(GLViewport): if self.drawFog: self.disableFog() + if self._compass is None: + self._compass = CompassOverlay() + + self._compass.yawPitch = self.yaw, 0 + + with gl.glPushMatrix(GL.GL_PROJECTION): + GL.glLoadIdentity() + GL.glOrtho(0., 1., float(self.height) / self.width, 0, -200, 200) + + self._compass.draw() + + _compass = None class ChunkViewport(CameraViewport): defaultScale = 1.0 # pixels per block diff --git a/mceutils.py b/mceutils.py index 93cc490..f17ea74 100644 --- a/mceutils.py +++ b/mceutils.py @@ -306,8 +306,6 @@ def loadPNGFile(filename): powers = (16, 32, 64, 128, 256, 512, 1024, 2048, 4096) assert (w in powers) and (h in powers) # how crude - ndata = numpy.array(data, dtype='uint8') - return w, h, data @@ -316,12 +314,12 @@ def loadTextureFunc(w, h, ndata): return w, h -def loadPNGTexture(filename): +def loadPNGTexture(filename, *a, **kw): filename = os.path.join(directories.dataDir, filename) try: w, h, ndata = loadPNGFile(filename) - tex = glutils.Texture(functools.partial(loadTextureFunc, w, h, ndata)) + tex = glutils.Texture(functools.partial(loadTextureFunc, w, h, ndata), *a, **kw) tex.data = ndata return tex except Exception, e: