remove optional by pointer texture_region parameters
This commit is contained in:
		@@ -179,7 +179,7 @@ static void draw_terrain(SceneIngame *scn) {
 | 
			
		||||
            draw_billboard("/assets/grasses/10.png",
 | 
			
		||||
                          (Vec3){ (float)x, d0 + 0.15f, (float)y },
 | 
			
		||||
                          (Vec2){0.3f, 0.3f},
 | 
			
		||||
                          NULL,
 | 
			
		||||
                          (Rect){0},
 | 
			
		||||
                          (Color){255, 255, 255, 255}, true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
/* TODO: combine flip_x and flip_y into a flip_mask with enum */
 | 
			
		||||
TWN_API void draw_sprite(char const *texture,
 | 
			
		||||
                         Rect        rect,
 | 
			
		||||
                         Rect const *texture_region,    /* optional, default: NULL */
 | 
			
		||||
                         Rect        texture_region,    /* optional, default: all 0 */
 | 
			
		||||
                         Color       color,             /* optional, default: all 255 */
 | 
			
		||||
                         float       rotation,          /* optional, default: 0 */
 | 
			
		||||
                         bool        flip_x,            /* optional, default: false */
 | 
			
		||||
@@ -76,8 +76,8 @@ TWN_API void draw_quad(char const *texture,
 | 
			
		||||
TWN_API void draw_billboard(char const *texture,
 | 
			
		||||
                            Vec3        position,
 | 
			
		||||
                            Vec2        size,
 | 
			
		||||
                            Rect const *texture_region, /* optional, default: NULL */
 | 
			
		||||
                            Color       color,          /* optional, default: all 255 */
 | 
			
		||||
                            Rect        texture_region, /* optional, default: NULL */
 | 
			
		||||
                            Color       color,          /* optional, default: all 0 */
 | 
			
		||||
                            bool        cylindrical);   /* optional, default: false */
 | 
			
		||||
 | 
			
		||||
TWN_API void draw_camera_2d(Vec2 position,      /* optional, default: (0, 0) */
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@
 | 
			
		||||
            "params": [
 | 
			
		||||
                { "name": "texture", "type": "char *" },
 | 
			
		||||
                { "name": "rect", "type": "Rect" },
 | 
			
		||||
                { "name": "texture_region", "type": "Rect *", "default": {} },
 | 
			
		||||
                { "name": "texture_region", "type": "Rect", "default": { "x": 0, "y": 0, "w": 0, "h": 0 } },
 | 
			
		||||
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } },
 | 
			
		||||
                { "name": "rotation", "type": "float", "default": 0.0 },
 | 
			
		||||
                { "name": "flip_x", "type": "bool", "default": false },
 | 
			
		||||
@@ -180,7 +180,7 @@
 | 
			
		||||
                { "name": "texture", "type": "char *" },
 | 
			
		||||
                { "name": "position", "type": "Vec3" },
 | 
			
		||||
                { "name": "size", "type": "Vec2" },
 | 
			
		||||
                { "name": "texture_region", "type": "Rect *", "default": {} },
 | 
			
		||||
                { "name": "texture_region", "type": "Rect", "default": { "x": 0, "y": 0, "w": 0, "h": 0 } },
 | 
			
		||||
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } },
 | 
			
		||||
                { "name": "cylindrical", "type": "bool", "default": false }
 | 
			
		||||
            ]
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
void draw_billboard(char const *texture,
 | 
			
		||||
                    Vec3 position,
 | 
			
		||||
                    Vec2 size,
 | 
			
		||||
                    Rect const *texture_region,
 | 
			
		||||
                    Rect texture_region,
 | 
			
		||||
                    Color color,
 | 
			
		||||
                    bool cylindrical)
 | 
			
		||||
{
 | 
			
		||||
@@ -26,16 +26,19 @@ void draw_billboard(char const *texture,
 | 
			
		||||
        batch_p = &ctx.billboard_batches[hmlenu(ctx.billboard_batches) - 1]; /* TODO: can last index be used? */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool const texture_region_valid = fabsf(texture_region.w - texture_region.h) > 0.00001f
 | 
			
		||||
                                   && fabsf(0.0f - texture_region.w) > 0.00001f;
 | 
			
		||||
 | 
			
		||||
    struct SpaceBillboard billboard = {
 | 
			
		||||
        .color = color,
 | 
			
		||||
        .cylindrical = cylindrical,
 | 
			
		||||
        .position = position,
 | 
			
		||||
        .size = size,
 | 
			
		||||
        .texture_region_opt_set = texture_region != NULL,
 | 
			
		||||
        .texture_region_opt_set = texture_region_valid,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if (texture_region)
 | 
			
		||||
        billboard.texture_region_opt = *texture_region;
 | 
			
		||||
    if (texture_region_valid)
 | 
			
		||||
        billboard.texture_region_opt = texture_region;
 | 
			
		||||
 | 
			
		||||
    struct SpaceBillboard *billboards = (struct SpaceBillboard *)(void *)batch_p->value.primitives;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,13 +19,18 @@
 | 
			
		||||
 */
 | 
			
		||||
void draw_sprite(char const *path,
 | 
			
		||||
                 Rect        rect,
 | 
			
		||||
                 Rect const *texture_region,    /* optional, default: NULL */
 | 
			
		||||
                 Rect        texture_region,    /* optional, default: 0 */
 | 
			
		||||
                 Color       color,             /* optional, default: all 255 */
 | 
			
		||||
                 float       rotation,          /* optional, default: 0 */
 | 
			
		||||
                 bool        flip_x,            /* optional, default: false */
 | 
			
		||||
                 bool        flip_y,            /* optional, default: false */
 | 
			
		||||
                 bool        stretch)
 | 
			
		||||
{
 | 
			
		||||
    /* if .w and .h are zeroed then assume whole region */
 | 
			
		||||
    /* TODO: don't check here, just move to redner code ? */
 | 
			
		||||
    bool const texture_region_valid = fabsf(texture_region.w - texture_region.h) > 0.00001f
 | 
			
		||||
                                   && fabsf(0.0f - texture_region.w) > 0.00001f;
 | 
			
		||||
 | 
			
		||||
    SpritePrimitive sprite = {
 | 
			
		||||
        .rect = rect,
 | 
			
		||||
        .color = color,
 | 
			
		||||
@@ -34,11 +39,11 @@ void draw_sprite(char const *path,
 | 
			
		||||
        .flip_x = flip_x,
 | 
			
		||||
        .flip_y = flip_y,
 | 
			
		||||
        .repeat = !stretch,
 | 
			
		||||
        .texture_region_opt_set = texture_region != NULL,
 | 
			
		||||
        .texture_region_opt_set = texture_region_valid,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if (texture_region)
 | 
			
		||||
        sprite.texture_region_opt = *texture_region;
 | 
			
		||||
    if (texture_region_valid)
 | 
			
		||||
        sprite.texture_region_opt = texture_region;
 | 
			
		||||
 | 
			
		||||
    Primitive2D primitive = {
 | 
			
		||||
        .type = PRIMITIVE_2D_SPRITE,
 | 
			
		||||
@@ -54,7 +59,7 @@ void draw_sprite_args(const DrawSpriteArgs args) {
 | 
			
		||||
    bool const flip_x = m_or(args, flip_x, false);
 | 
			
		||||
    bool const flip_y = m_or(args, flip_y, false);
 | 
			
		||||
    bool const stretch = m_or(args, stretch, false);
 | 
			
		||||
    Rect const *texture_region = m_is_set(args, texture_region) ? &args.texture_region_opt : NULL;
 | 
			
		||||
    Rect const texture_region = m_or(args, texture_region, ((Rect){0}));
 | 
			
		||||
 | 
			
		||||
    draw_sprite(args.texture, args.rect, texture_region, color, rotation, flip_x, flip_y, stretch);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user