122 sprite->texture_scale_mode = args.texture_scale_mode; |
122 sprite->texture_scale_mode = args.texture_scale_mode; |
123 sprite->texture_scale.u = ASC_NONZERO_OR(1.f, args.texture_scale_x); |
123 sprite->texture_scale.u = ASC_NONZERO_OR(1.f, args.texture_scale_x); |
124 sprite->texture_scale.v = ASC_NONZERO_OR(1.f, args.texture_scale_y); |
124 sprite->texture_scale.v = ASC_NONZERO_OR(1.f, args.texture_scale_y); |
125 |
125 |
126 // basic node parameters |
126 // basic node parameters |
127 AscSceneNode *node = (AscSceneNode *) sprite; |
127 asc_ptr_cast(AscSceneNode, node, sprite); |
128 asc_scene_node_name(node, args.name); |
128 asc_scene_node_init(node, |
129 node->render_group = args.opaque |
129 ASC_SCENE_NODE_FUNCS(asc_sprite), |
|
130 .name = args.name, |
|
131 .render_group = args.opaque |
130 ? ASC_RENDER_GROUP_2D_OPAQUE |
132 ? ASC_RENDER_GROUP_2D_OPAQUE |
131 : ASC_RENDER_GROUP_2D_BLEND; |
133 : ASC_RENDER_GROUP_2D_BLEND, |
132 node->update_func = asc_sprite_update; |
134 .pos2d = ASC_VEC2I(args.x, args.y), |
133 node->destroy_func = asc_sprite_destroy; |
135 .origin2d = ASC_VEC2I(args.origin_x, args.origin_y) |
134 node->draw_func = asc_sprite_draw; |
136 ); |
135 |
137 |
136 node->position = ASC_VEC3F(args.x, args.y, ASC_SCENE_2D_DEPTH_OFFSET); |
|
137 node->origin = ASC_VEC3F(args.origin_x, args.origin_y, 0); |
|
138 node->scale = ASC_VEC3F_1; |
|
139 asc_mat4f_unit(node->rotation); |
|
140 |
|
141 asc_scene_node_update(node); |
|
142 return node; |
138 return node; |
143 } |
139 } |
144 |
140 |
145 void asc_sprite_set_size(AscSprite *sprite, asc_vec2u size) { |
141 void asc_sprite_set_size(AscSprite *sprite, asc_vec2u size) { |
146 sprite->width = size.width; |
142 sprite->width = size.width; |