1use core::ffi::c_float;
2use core::ffi::c_int;
3use core::ffi::c_void;
4
5use sys::ffi::LCDBitmap;
6use sys::ffi::LCDBitmapDrawMode;
7use sys::ffi::LCDBitmapFlip;
8use sys::ffi::LCDRect;
9use sys::ffi::LCDSprite;
10use sys::ffi::LCDSpriteCollisionFilterProc;
11use sys::ffi::LCDSpriteDrawFunction;
12use sys::ffi::LCDSpriteUpdateFunction;
13use sys::ffi::PDRect;
14use sys::ffi::SpriteCollisionInfo;
15use sys::ffi::SpriteQueryInfo;
16
17
18#[derive(Debug, Clone, Copy, core::default::Default)]
19pub struct Default;
20
21impl Api for Default {}
22
23
24pub trait Api {
25 #[doc(alias = "sys::ffi::playdate_sprite::setAlwaysRedraw")]
27 #[inline(always)]
28 fn set_always_redraw(&self) -> unsafe extern "C" fn(flag: c_int) { *sys::api!(sprite.setAlwaysRedraw) }
29
30
31 #[doc(alias = "sys::ffi::playdate_sprite::addDirtyRect")]
33 #[inline(always)]
34 fn add_dirty_rect(&self) -> unsafe extern "C" fn(dirtyRect: LCDRect) { *sys::api!(sprite.addDirtyRect) }
35
36
37 #[doc(alias = "sys::ffi::playdate_sprite::drawSprites")]
39 #[inline(always)]
40 fn draw_sprites(&self) -> unsafe extern "C" fn() { *sys::api!(sprite.drawSprites) }
41
42
43 #[doc(alias = "sys::ffi::playdate_sprite::updateAndDrawSprites")]
45 #[inline(always)]
46 fn update_and_draw_sprites(&self) -> unsafe extern "C" fn() { *sys::api!(sprite.updateAndDrawSprites) }
47
48
49 #[doc(alias = "sys::ffi::playdate_sprite::newSprite")]
51 #[inline(always)]
52 fn new_sprite(&self) -> unsafe extern "C" fn() -> *mut LCDSprite { *sys::api!(sprite.newSprite) }
53
54
55 #[doc(alias = "sys::ffi::playdate_sprite::freeSprite")]
57 #[inline(always)]
58 fn free_sprite(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) { *sys::api!(sprite.freeSprite) }
59
60
61 #[doc(alias = "sys::ffi::playdate_sprite::copy")]
63 #[inline(always)]
64 fn copy(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> *mut LCDSprite { *sys::api!(sprite.copy) }
65
66
67 #[doc(alias = "sys::ffi::playdate_sprite::addSprite")]
69 #[inline(always)]
70 fn add_sprite(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) { *sys::api!(sprite.addSprite) }
71
72
73 #[doc(alias = "sys::ffi::playdate_sprite::removeSprite")]
75 #[inline(always)]
76 fn remove_sprite(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) { *sys::api!(sprite.removeSprite) }
77
78
79 #[doc(alias = "sys::ffi::playdate_sprite::removeSprites")]
81 #[inline(always)]
82 fn remove_sprites(&self) -> unsafe extern "C" fn(sprites: *mut *mut LCDSprite, count: c_int) {
83 *sys::api!(sprite.removeSprites)
84 }
85
86
87 #[doc(alias = "sys::ffi::playdate_sprite::removeAllSprites")]
89 #[inline(always)]
90 fn remove_all_sprites(&self) -> unsafe extern "C" fn() { *sys::api!(sprite.removeAllSprites) }
91
92
93 #[doc(alias = "sys::ffi::playdate_sprite::getSpriteCount")]
95 #[inline(always)]
96 fn get_sprite_count(&self) -> unsafe extern "C" fn() -> c_int { *sys::api!(sprite.getSpriteCount) }
97
98
99 #[doc(alias = "sys::ffi::playdate_sprite::setBounds")]
101 #[inline(always)]
102 fn set_bounds(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, bounds: PDRect) {
103 *sys::api!(sprite.setBounds)
104 }
105
106
107 #[doc(alias = "sys::ffi::playdate_sprite::getBounds")]
109 #[inline(always)]
110 fn get_bounds(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> PDRect { *sys::api!(sprite.getBounds) }
111
112
113 #[doc(alias = "sys::ffi::playdate_sprite::moveTo")]
115 #[inline(always)]
116 fn move_to(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, x: c_float, y: c_float) {
117 *sys::api!(sprite.moveTo)
118 }
119
120
121 #[doc(alias = "sys::ffi::playdate_sprite::moveBy")]
123 #[inline(always)]
124 fn move_by(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, dx: c_float, dy: c_float) {
125 *sys::api!(sprite.moveBy)
126 }
127
128
129 #[doc(alias = "sys::ffi::playdate_sprite::setImage")]
131 #[inline(always)]
132 fn set_image(&self)
133 -> unsafe extern "C" fn(sprite: *mut LCDSprite, image: *mut LCDBitmap, flip: LCDBitmapFlip) {
134 *sys::api!(sprite.setImage)
135 }
136
137
138 #[doc(alias = "sys::ffi::playdate_sprite::getImage")]
140 #[inline(always)]
141 fn get_image(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> *mut LCDBitmap {
142 *sys::api!(sprite.getImage)
143 }
144
145
146 #[doc(alias = "sys::ffi::playdate_sprite::setSize")]
148 #[inline(always)]
149 fn set_size(&self) -> unsafe extern "C" fn(s: *mut LCDSprite, width: c_float, height: c_float) {
150 *sys::api!(sprite.setSize)
151 }
152
153
154 #[doc(alias = "sys::ffi::playdate_sprite::setZIndex")]
156 #[inline(always)]
157 fn set_z_index(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, zIndex: i16) {
158 *sys::api!(sprite.setZIndex)
159 }
160
161
162 #[doc(alias = "sys::ffi::playdate_sprite::getZIndex")]
164 #[inline(always)]
165 fn get_z_index(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> i16 { *sys::api!(sprite.getZIndex) }
166
167
168 #[doc(alias = "sys::ffi::playdate_sprite::setDrawMode")]
170 #[inline(always)]
171 fn set_draw_mode(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, mode: LCDBitmapDrawMode) {
172 *sys::api!(sprite.setDrawMode)
173 }
174
175
176 #[doc(alias = "sys::ffi::playdate_sprite::setImageFlip")]
178 #[inline(always)]
179 fn set_image_flip(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, flip: LCDBitmapFlip) {
180 *sys::api!(sprite.setImageFlip)
181 }
182
183
184 #[doc(alias = "sys::ffi::playdate_sprite::getImageFlip")]
186 #[inline(always)]
187 fn get_image_flip(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> LCDBitmapFlip {
188 *sys::api!(sprite.getImageFlip)
189 }
190
191
192 #[doc(alias = "sys::ffi::playdate_sprite::setStencil")]
194 #[inline(always)]
195 fn set_stencil(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, stencil: *mut LCDBitmap) {
196 *sys::api!(sprite.setStencil)
197 }
198
199
200 #[doc(alias = "sys::ffi::playdate_sprite::setClipRect")]
202 #[inline(always)]
203 fn set_clip_rect(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, clipRect: LCDRect) {
204 *sys::api!(sprite.setClipRect)
205 }
206
207
208 #[doc(alias = "sys::ffi::playdate_sprite::clearClipRect")]
210 #[inline(always)]
211 fn clear_clip_rect(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) { *sys::api!(sprite.clearClipRect) }
212
213
214 #[doc(alias = "sys::ffi::playdate_sprite::setClipRectsInRange")]
216 #[inline(always)]
217 fn set_clip_rects_in_range(&self) -> unsafe extern "C" fn(clipRect: LCDRect, startZ: c_int, endZ: c_int) {
218 *sys::api!(sprite.setClipRectsInRange)
219 }
220
221
222 #[doc(alias = "sys::ffi::playdate_sprite::clearClipRectsInRange")]
224 #[inline(always)]
225 fn clear_clip_rects_in_range(&self) -> unsafe extern "C" fn(startZ: c_int, endZ: c_int) {
226 *sys::api!(sprite.clearClipRectsInRange)
227 }
228
229
230 #[doc(alias = "sys::ffi::playdate_sprite::setUpdatesEnabled")]
232 #[inline(always)]
233 fn set_updates_enabled(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, flag: c_int) {
234 *sys::api!(sprite.setUpdatesEnabled)
235 }
236
237
238 #[doc(alias = "sys::ffi::playdate_sprite::updatesEnabled")]
240 #[inline(always)]
241 fn updates_enabled(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> c_int {
242 *sys::api!(sprite.updatesEnabled)
243 }
244
245
246 #[doc(alias = "sys::ffi::playdate_sprite::setCollisionsEnabled")]
248 #[inline(always)]
249 fn set_collisions_enabled(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, flag: c_int) {
250 *sys::api!(sprite.setCollisionsEnabled)
251 }
252
253
254 #[doc(alias = "sys::ffi::playdate_sprite::collisionsEnabled")]
256 #[inline(always)]
257 fn collisions_enabled(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> c_int {
258 *sys::api!(sprite.collisionsEnabled)
259 }
260
261
262 #[doc(alias = "sys::ffi::playdate_sprite::setVisible")]
264 #[inline(always)]
265 fn set_visible(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, flag: c_int) {
266 *sys::api!(sprite.setVisible)
267 }
268
269
270 #[doc(alias = "sys::ffi::playdate_sprite::isVisible")]
272 #[inline(always)]
273 fn is_visible(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> c_int { *sys::api!(sprite.isVisible) }
274
275
276 #[doc(alias = "sys::ffi::playdate_sprite::setOpaque")]
278 #[inline(always)]
279 fn set_opaque(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, flag: c_int) {
280 *sys::api!(sprite.setOpaque)
281 }
282
283
284 #[doc(alias = "sys::ffi::playdate_sprite::markDirty")]
286 #[inline(always)]
287 fn mark_dirty(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) { *sys::api!(sprite.markDirty) }
288
289
290 #[doc(alias = "sys::ffi::playdate_sprite::setTag")]
292 #[inline(always)]
293 fn set_tag(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, tag: u8) { *sys::api!(sprite.setTag) }
294
295
296 #[doc(alias = "sys::ffi::playdate_sprite::getTag")]
298 #[inline(always)]
299 fn get_tag(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> u8 { *sys::api!(sprite.getTag) }
300
301
302 #[doc(alias = "sys::ffi::playdate_sprite::setIgnoresDrawOffset")]
304 #[inline(always)]
305 fn set_ignores_draw_offset(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, flag: c_int) {
306 *sys::api!(sprite.setIgnoresDrawOffset)
307 }
308
309
310 #[doc(alias = "sys::ffi::playdate_sprite::setUpdateFunction")]
312 #[inline(always)]
313 fn set_update_function(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, func: LCDSpriteUpdateFunction) {
314 *sys::api!(sprite.setUpdateFunction)
315 }
316
317
318 #[doc(alias = "sys::ffi::playdate_sprite::setDrawFunction")]
320 #[inline(always)]
321 fn set_draw_function(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, func: LCDSpriteDrawFunction) {
322 *sys::api!(sprite.setDrawFunction)
323 }
324
325
326 #[doc(alias = "sys::ffi::playdate_sprite::getPosition")]
328 #[inline(always)]
329 fn get_position(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, x: *mut c_float, y: *mut c_float) {
330 *sys::api!(sprite.getPosition)
331 }
332
333
334 #[doc(alias = "sys::ffi::playdate_sprite::resetCollisionWorld")]
336 #[inline(always)]
337 fn reset_collision_world(&self) -> unsafe extern "C" fn() { *sys::api!(sprite.resetCollisionWorld) }
338
339
340 #[doc(alias = "sys::ffi::playdate_sprite::setCollideRect")]
342 #[inline(always)]
343 fn set_collide_rect(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, collideRect: PDRect) {
344 *sys::api!(sprite.setCollideRect)
345 }
346
347
348 #[doc(alias = "sys::ffi::playdate_sprite::getCollideRect")]
350 #[inline(always)]
351 fn get_collide_rect(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> PDRect {
352 *sys::api!(sprite.getCollideRect)
353 }
354
355
356 #[doc(alias = "sys::ffi::playdate_sprite::clearCollideRect")]
358 #[inline(always)]
359 fn clear_collide_rect(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) {
360 *sys::api!(sprite.clearCollideRect)
361 }
362
363
364 #[doc(alias = "sys::ffi::playdate_sprite::setCollisionResponseFunction")]
366 #[inline(always)]
367 fn set_collision_response_function(
368 &self)
369 -> unsafe extern "C" fn(sprite: *mut LCDSprite, func: LCDSpriteCollisionFilterProc) {
370 *sys::api!(sprite.setCollisionResponseFunction)
371 }
372
373
374 #[doc(alias = "sys::ffi::playdate_sprite::checkCollisions")]
376 #[inline(always)]
377 fn check_collisions(
378 &self)
379 -> unsafe extern "C" fn(sprite: *mut LCDSprite,
380 goalX: c_float,
381 goalY: c_float,
382 actualX: *mut c_float,
383 actualY: *mut c_float,
384 len: *mut c_int) -> *mut SpriteCollisionInfo {
385 *sys::api!(sprite.checkCollisions)
386 }
387
388
389 #[doc(alias = "sys::ffi::playdate_sprite::moveWithCollisions")]
391 #[inline(always)]
392 fn move_with_collisions(
393 &self)
394 -> unsafe extern "C" fn(sprite: *mut LCDSprite,
395 goalX: c_float,
396 goalY: c_float,
397 actualX: *mut c_float,
398 actualY: *mut c_float,
399 len: *mut c_int) -> *mut SpriteCollisionInfo {
400 *sys::api!(sprite.moveWithCollisions)
401 }
402
403
404 #[doc(alias = "sys::ffi::playdate_sprite::querySpritesAtPoint")]
406 #[inline(always)]
407 fn query_sprites_at_point(
408 &self)
409 -> unsafe extern "C" fn(x: c_float, y: c_float, len: *mut c_int) -> *mut *mut LCDSprite {
410 *sys::api!(sprite.querySpritesAtPoint)
411 }
412
413
414 #[doc(alias = "sys::ffi::playdate_sprite::querySpritesInRect")]
416 #[inline(always)]
417 fn query_sprites_in_rect(
418 &self)
419 -> unsafe extern "C" fn(x: c_float,
420 y: c_float,
421 width: c_float,
422 height: c_float,
423 len: *mut c_int) -> *mut *mut LCDSprite {
424 *sys::api!(sprite.querySpritesInRect)
425 }
426
427
428 #[doc(alias = "sys::ffi::playdate_sprite::querySpritesAlongLine")]
430 #[inline(always)]
431 fn query_sprites_along_line(
432 &self)
433 -> unsafe extern "C" fn(x1: c_float,
434 y1: c_float,
435 x2: c_float,
436 y2: c_float,
437 len: *mut c_int) -> *mut *mut LCDSprite {
438 *sys::api!(sprite.querySpritesAlongLine)
439 }
440
441
442 #[doc(alias = "sys::ffi::playdate_sprite::querySpriteInfoAlongLine")]
444 #[inline(always)]
445 fn query_sprite_info_along_line(
446 &self)
447 -> unsafe extern "C" fn(x1: c_float,
448 y1: c_float,
449 x2: c_float,
450 y2: c_float,
451 len: *mut c_int) -> *mut SpriteQueryInfo {
452 *sys::api!(sprite.querySpriteInfoAlongLine)
453 }
454
455
456 #[doc(alias = "sys::ffi::playdate_sprite::overlappingSprites")]
458 #[inline(always)]
459 fn overlapping_sprites(
460 &self)
461 -> unsafe extern "C" fn(sprite: *mut LCDSprite, len: *mut c_int) -> *mut *mut LCDSprite {
462 *sys::api!(sprite.overlappingSprites)
463 }
464
465
466 #[doc(alias = "sys::ffi::playdate_sprite::allOverlappingSprites")]
468 #[inline(always)]
469 fn all_overlapping_sprites(&self) -> unsafe extern "C" fn(len: *mut c_int) -> *mut *mut LCDSprite {
470 *sys::api!(sprite.allOverlappingSprites)
471 }
472
473
474 #[doc(alias = "sys::ffi::playdate_sprite::setStencilPattern")]
476 #[inline(always)]
477 fn set_stencil_pattern(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, pattern: *mut [u8; 8]) {
478 *sys::api!(sprite.setStencilPattern)
479 }
480
481
482 #[doc(alias = "sys::ffi::playdate_sprite::clearStencil")]
484 #[inline(always)]
485 fn clear_stencil(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) { *sys::api!(sprite.clearStencil) }
486
487
488 #[doc(alias = "sys::ffi::playdate_sprite::setUserdata")]
490 #[inline(always)]
491 fn set_userdata(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite, userdata: *mut c_void) {
492 *sys::api!(sprite.setUserdata)
493 }
494
495
496 #[doc(alias = "sys::ffi::playdate_sprite::getUserdata")]
498 #[inline(always)]
499 fn get_userdata(&self) -> unsafe extern "C" fn(sprite: *mut LCDSprite) -> *mut c_void {
500 *sys::api!(sprite.getUserdata)
501 }
502
503
504 #[doc(alias = "sys::ffi::playdate_sprite::setStencilImage")]
506 #[inline(always)]
507 fn set_stencil_image(&self)
508 -> unsafe extern "C" fn(sprite: *mut LCDSprite, stencil: *mut LCDBitmap, tile: c_int) {
509 *sys::api!(sprite.setStencilImage)
510 }
511
512 #[doc(alias = "sys::ffi::playdate_sprite::setCenter")]
514 #[inline(always)]
515 fn set_center(&self) -> unsafe extern "C" fn(s: *mut LCDSprite, x: c_float, y: c_float) {
516 *sys::api!(sprite.setCenter)
517 }
518
519 #[doc(alias = "sys::ffi::playdate_sprite::getCenter")]
521 #[inline(always)]
522 fn get_center(&self) -> unsafe extern "C" fn(s: *mut LCDSprite, x: *mut c_float, y: *mut c_float) {
523 *sys::api!(sprite.getCenter)
524 }
525}