File: sprite.c

package info (click to toggle)
abuse 2.00-12
  • links: PTS
  • area: main
  • in suites: slink
  • size: 12,708 kB
  • ctags: 15,389
  • sloc: ansic: 115,852; cpp: 6,792; lisp: 2,066; sh: 1,734; makefile: 1,601; asm: 264
file content (74 lines) | stat: -rw-r--r-- 1,954 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "macs.hpp"
#include "mdlread.hpp"
#include "video.hpp"
#include "image.hpp"
#include "palette.hpp"
#include "linked.hpp"
#include <math.h>
#include "glread.hpp"
#include "gifread.hpp"
#include "ppmread.hpp"
#include "emm.hpp"
#include "sprite.hpp"


void sprite::restore_background()
{ if (x+save->width()>=0 && y+save->height()>=0 && x<=xres && y<=yres)
      save->put_image(screen,x,y); }

void sprite::get_background() 
{ if (x+visual->width()>=0 && y+visual->height()>=0 && x<=xres && y<=yres)
   screen->put_part(save,0,0,x,y,x+save->width()-1,y+save->height()-1); }

void sprite::draw()
{ if (x+visual->width()>=0 && y+visual->height()>=0 && x<=xres && y<=yres)
   visual->put_image(screen,x,y,1); }

sprite::sprite(image *Screen, image *Visual, int X, int Y)
{
  CHECK(Visual && Screen);
  x=X; y=Y; visual=Visual; screen=Screen;
  save=new image(visual->width(),visual->height());
  get_background();
} ;

sprite::~sprite()
{
  delete save;  
}

void sprite_controller::add_sprite(sprite *sp)
{ sprites.add_end((linked_node *)sp); }

void sprite_controller::remove_sprites()
{ sprite *sp; loopt(sprite,sp,sprites.first(),sp->restore_background();); }

void sprite_controller::put_sprites()
{ sprite *sp; loopt(sprite,sp,sprites.first(),sp->draw();); }

void sprite_controller::get_backgrounds()
{ sprite *sp; loopt(sprite,sp,sprites.first(),sp->get_background();); }

void sprite::change_visual(image *Visual, int delete_old)
{ if (delete_old)
    delete visual;
  visual=Visual;
  if (save->width()!=Visual->width() || save->height()!=Visual->height())
  {
    delete save;
    save=new image(visual->width(),visual->height());
  }
  get_background();
}

void sprite_controller::bring_front(sprite *sp)
{
  ERROR(sprites.unlink((linked_node *)sp),"unlink failure");
  sprites.add_end((linked_node *)sp);
}

void sprite_controller::delete_sprite(sprite *sp)
{
  ERROR(sprites.unlink((linked_node *)sp),"unlink failure");
  delete sp;
}