diff -r 26726b7a89a7 -r 4d184a8706b1 src/sprite.c --- a/src/sprite.c Mon Jul 14 21:56:53 2025 +0200 +++ b/src/sprite.c Wed Jul 16 23:27:34 2025 +0200 @@ -124,21 +124,17 @@ sprite->texture_scale.v = ASC_NONZERO_OR(1.f, args.texture_scale_y); // basic node parameters - AscSceneNode *node = (AscSceneNode *) sprite; - asc_scene_node_name(node, args.name); - node->render_group = args.opaque + asc_ptr_cast(AscSceneNode, node, sprite); + asc_scene_node_init(node, + ASC_SCENE_NODE_FUNCS(asc_sprite), + .name = args.name, + .render_group = args.opaque ? ASC_RENDER_GROUP_2D_OPAQUE - : ASC_RENDER_GROUP_2D_BLEND; - node->update_func = asc_sprite_update; - node->destroy_func = asc_sprite_destroy; - node->draw_func = asc_sprite_draw; + : ASC_RENDER_GROUP_2D_BLEND, + .pos2d = ASC_VEC2I(args.x, args.y), + .origin2d = ASC_VEC2I(args.origin_x, args.origin_y) + ); - node->position = ASC_VEC3F(args.x, args.y, ASC_SCENE_2D_DEPTH_OFFSET); - node->origin = ASC_VEC3F(args.origin_x, args.origin_y, 0); - node->scale = ASC_VEC3F_1; - asc_mat4f_unit(node->rotation); - - asc_scene_node_update(node); return node; }