added ordered texture groups
This commit is contained in:
parent
74ea5bd11f
commit
30343b5869
1 changed files with 33 additions and 4 deletions
|
@ -22,6 +22,37 @@ from ctypes import create_string_buffer, memmove
|
|||
from lib import h3m
|
||||
import os
|
||||
|
||||
class OrderedTextureGroup(pyglet.graphics.Group):
|
||||
def __init__(self, order, texture, parent=None):
|
||||
super(OrderedTextureGroup, self).__init__(parent)
|
||||
self.texture = texture
|
||||
self.order = order
|
||||
|
||||
def set_state(self):
|
||||
pyglet.gl.glEnable(self.texture.target)
|
||||
pyglet.gl.glBindTexture(self.texture.target, self.texture.id)
|
||||
|
||||
def unset_state(self):
|
||||
pyglet.gl.glDisable(self.texture.target)
|
||||
|
||||
def __hash__(self):
|
||||
return hash((self.order, self.texture.target, self.texture.id, self.parent))
|
||||
|
||||
def __eq__(self, other):
|
||||
return (self.__class__ is other.__class__ and
|
||||
self.order == other.order and
|
||||
self.texture.target == other.texture.target and
|
||||
self.texture.id == other.texture.id and
|
||||
self.parent == self.parent)
|
||||
|
||||
def __repr__(self):
|
||||
return '%s(order=%d, id=%d)' % (self.__class__.__name__, self.order, self.texture.id)
|
||||
|
||||
def __cmp__(self, other):
|
||||
if isinstance(other, OrderedTextureGroup):
|
||||
return cmp(self.order, other.order)
|
||||
return -1
|
||||
|
||||
class Animation(object):
|
||||
def __init__(self, tex_region, frames, objclass=None, overlay=False,
|
||||
flip_x=False, flip_y=False):
|
||||
|
@ -93,8 +124,7 @@ class MapSet(object):
|
|||
self.current_atlas = pyglet.image.atlas.TextureAtlas(1024, 1024)
|
||||
texture_region = self.current_atlas.add(image)
|
||||
self.atlases.append(self.current_atlas)
|
||||
group = pyglet.graphics.OrderedGroup(order)
|
||||
group = pyglet.graphics.TextureGroup(self.current_atlas.texture, parent=group)
|
||||
group = OrderedTextureGroup(order, self.current_atlas.texture)
|
||||
|
||||
if group not in self.groups:
|
||||
self.groups.append(group)
|
||||
|
@ -373,8 +403,7 @@ class MapSet(object):
|
|||
# put wood and mountains behind other objects on the same level
|
||||
if self.objects[obj["id"]].objclass in [119, 134, 135, 137, 155, 199]:
|
||||
order -= 1
|
||||
group = pyglet.graphics.OrderedGroup(order)
|
||||
group = pyglet.graphics.TextureGroup(self.atlases[self.objects[obj["id"]].tex.atlas].texture, parent=group)
|
||||
group = OrderedTextureGroup(order, self.atlases[self.objects[obj["id"]].tex.atlas].texture)
|
||||
if group not in self.groups:
|
||||
self.groups.append(group)
|
||||
group = self.groups.index(group)
|
||||
|
|
Loading…
Reference in a new issue