diff --git a/roc/models.py b/roc/models.py index c0426b7..5894aea 100755 --- a/roc/models.py +++ b/roc/models.py @@ -31,21 +31,10 @@ class Model_Manager(object): def create(self, mname): return self.models[mname].instance() - def create_sprite(self, name, path): - tf = self.get_texfile(path) - to = Texture() - to.load_from_texfile(tf) - mat = Material() - if noaa: - typeidx = enums.tt.noaa - else: - typeidx = enums.tt.diffuse - mat.textures[typeidx] = to + def create_sprite(self, name, path, centered=False, antialias=False): + if name in self.models: + return self.models[name] - rl = RenderLayer() - rl.mesh = SpriteMesh() - rl.material = mat - rl.scale = [float(tf.w), float(tf.h), 1.0] model = Model() model.layers = [rl] @@ -469,7 +458,38 @@ class Model(object): for layer in self.layers: return [layer.scale[i] for i in range(0, len(layer.scale))] - + + def add_sprite_layer(self, path, centered=False, antialiased=False, rot=0.0): + tf = self.get_texfile(path) + to = Texture() + to.load_from_texfile(tf) + mat = Material() + typeidx = enums.tt.noaa + if antialiased: + typeidx = enums.tt.diffuse + mat.textures[typeidx] = to + + rl = RenderLayer() + if centered: + rl.mesh = SpriteMeshCentered() + else: + rl.mesh = SpriteMesh() + rl.rotations = (0.0, 0.0, rot) + rl.material = mat + rl.scale = [float(tf.w), float(tf.h), 1.0] + + self.layers.append(rl) + + def rotate(self, rot): + for layer in self.layers: + if layer.rotations == None: + oldrot = [0.0, 0.0, 0.0] + else: + oldrot = list(layer.rotations) + for i in range(3): + oldrot[i] = (oldrot[i] + rot[i] + 360.0) % 360.0 + layer.rotations = oldrot + def load(self, data): tmplayers = [] for rend in data.render: