#include "../../include/mgl/graphics/sprite.h" #include "../../include/mgl/graphics/texture.h" #include "../../include/mgl/mgl.h" void mgl_sprite_init(mgl_sprite *self, mgl_texture *texture) { self->texture = texture; self->color = (mgl_color){ 255, 255, 255, 255 }; self->position = (mgl_vec2f){ 0.0f, 0.0f }; self->scale = (mgl_vec2f){ 1.0f, 1.0f }; self->origin = (mgl_vec2f){ 0.0f, 0.0f }; self->rotation = 0.0f; } void mgl_sprite_set_texture(mgl_sprite *self, mgl_texture *texture) { self->texture = texture; } void mgl_sprite_set_position(mgl_sprite *self, mgl_vec2f position) { self->position = position; } void mgl_sprite_set_color(mgl_sprite *self, mgl_color color) { self->color = color; } void mgl_sprite_set_rotation(mgl_sprite *self, float degrees) { self->rotation = degrees; } void mgl_sprite_set_origin(mgl_sprite *self, mgl_vec2f origin) { self->origin = origin; } /* TODO: Cache texture bind to not bind texture if its already bound and do not bind texture 0 */ void mgl_sprite_draw(mgl_context *context, mgl_sprite *sprite) { if(!sprite->texture) return; float texture_right = 1.0f; float texture_bottom = 1.0f; if(sprite->texture->pixel_coordinates) { texture_right = sprite->texture->width; texture_bottom = sprite->texture->height; } context->gl.glColor4ub(sprite->color.r, sprite->color.g, sprite->color.b, sprite->color.a); mgl_texture_use(sprite->texture); context->gl.glTranslatef(sprite->position.x, sprite->position.y, 0.0f); context->gl.glRotatef(sprite->rotation, 0.0f, 0.0f, 1.0f); context->gl.glBegin(GL_QUADS); context->gl.glTexCoord2f(0.0f, 0.0f); context->gl.glVertex3f(-sprite->origin.x * sprite->scale.x, -sprite->origin.y * sprite->scale.y, 0.0f); context->gl.glTexCoord2f(texture_right, 0.0f); context->gl.glVertex3f((sprite->texture->width - sprite->origin.x) * sprite->scale.x, -sprite->origin.y * sprite->scale.y, 0.0f); context->gl.glTexCoord2f(texture_right, texture_bottom); context->gl.glVertex3f((sprite->texture->width - sprite->origin.x) * sprite->scale.x, (sprite->texture->height - sprite->origin.y) * sprite->scale.y, 0.0f); context->gl.glTexCoord2f(0.0f, texture_bottom); context->gl.glVertex3f(-sprite->origin.x * sprite->scale.x, (sprite->texture->height - sprite->origin.y) * sprite->scale.y, 0.0f); context->gl.glEnd(); mgl_texture_use(NULL); context->gl.glLoadIdentity(); /* TODO: Remove, but what about glRotatef above */ }