def load_level(old, num): game = Game(old.vw, old.vh) game.restart() game.level = num fp = data.loadblock("levels/%d" % num) for line in fp: layername, classname, remainder = line.split(None, 2) if layername == "orbs": layer = game.orbs hash = game.spatialhash elif layername == "deco": layer = game.deco hash = game.decohash if classname == "Allefant": o = Allefant.from_string(remainder) o.spawn(hash) layer.append(o) game.player = o elif classname == "InverseOrb": o = InverseOrb.from_string(remainder) o.spawn(hash) layer.append(o) else: o = globals()[classname].from_string(remainder) o.spawn(hash) layer.append(o) if classname == "Laser": game.lasers[o.id] = o if classname == "Coin": game.coins += 1 if classname == "Rider": game.rider = o if o.is_active(): game.active.append(o) return game
def __init__(self, path, area = None): glEnable(GL_TEXTURE_2D) image = pygame.image.load(data.loadblock(path)) self.w = image.get_width() self.h = image.get_height() if area: x, y, w, h = area sub = image.subsurface(area) rgbadata = pygame.image.tostring(sub, "RGBA", True) self.w = w self.h = h else: rgbadata = pygame.image.tostring(image, "RGBA", True) def pot(x): y = 1.0 while y < x: y *= 2 return y self.texw = pot(self.w) self.texh = pot(self.h) if self.texw != self.w or self.texh != self.h: olddata = rgbadata rgbadata = "" for row in range(int(self.texh - self.h)): rgbadata += olddata[-4 * self.w :] rgbadata += rgbadata[-4:] * int(self.texw - self.w) for row in range(self.h): rgbadata += olddata[4 * row * self.w : 4 * (row + 1) * self.w] rgbadata += rgbadata[-4:] * int(self.texw - self.w) self.texture = glGenTextures(1) glBindTexture(GL_TEXTURE_2D, self.texture) glTexImage2D(GL_TEXTURE_2D, 0, 4, self.texw, self.texh, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgbadata) glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) #NEAREST) glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) #NEAREST)
def __init__(self, filename): self.sound = pygame.mixer.Sound(data.loadblock(filename))