sprite.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "macs.hpp"
  2. #include "mdlread.hpp"
  3. #include "video.hpp"
  4. #include "image.hpp"
  5. #include "palette.hpp"
  6. #include "linked.hpp"
  7. #include <math.h>
  8. #include "glread.hpp"
  9. #include "gifread.hpp"
  10. #include "ppmread.hpp"
  11. #include "emm.hpp"
  12. #include "sprite.hpp"
  13. void sprite::restore_background()
  14. { if (x+save->width()>=0 && y+save->height()>=0 && x<=xres && y<=yres)
  15. save->put_image(screen,x,y); }
  16. void sprite::get_background()
  17. { if (x+visual->width()>=0 && y+visual->height()>=0 && x<=xres && y<=yres)
  18. screen->put_part(save,0,0,x,y,x+save->width()-1,y+save->height()-1); }
  19. void sprite::draw()
  20. { if (x+visual->width()>=0 && y+visual->height()>=0 && x<=xres && y<=yres)
  21. visual->put_image(screen,x,y,1); }
  22. sprite::sprite(image *Screen, image *Visual, int X, int Y)
  23. {
  24. CHECK(Visual && Screen);
  25. x=X; y=Y; visual=Visual; screen=Screen;
  26. save=new image(visual->width(),visual->height());
  27. get_background();
  28. } ;
  29. sprite::~sprite()
  30. {
  31. delete save;
  32. }
  33. void sprite_controller::add_sprite(sprite *sp)
  34. { sprites.add_end((linked_node *)sp); }
  35. void sprite_controller::remove_sprites()
  36. { sprite *sp; loopt(sprite,sp,sprites.first(),sp->restore_background();); }
  37. void sprite_controller::put_sprites()
  38. { sprite *sp; loopt(sprite,sp,sprites.first(),sp->draw();); }
  39. void sprite_controller::get_backgrounds()
  40. { sprite *sp; loopt(sprite,sp,sprites.first(),sp->get_background();); }
  41. void sprite::change_visual(image *Visual, int delete_old)
  42. { if (delete_old)
  43. delete visual;
  44. visual=Visual;
  45. if (save->width()!=Visual->width() || save->height()!=Visual->height())
  46. {
  47. delete save;
  48. save=new image(visual->width(),visual->height());
  49. }
  50. get_background();
  51. }
  52. void sprite_controller::bring_front(sprite *sp)
  53. {
  54. ERROR(sprites.unlink((linked_node *)sp),"unlink failure");
  55. sprites.add_end((linked_node *)sp);
  56. }
  57. void sprite_controller::delete_sprite(sprite *sp)
  58. {
  59. ERROR(sprites.unlink((linked_node *)sp),"unlink failure");
  60. delete sp;
  61. }