1 #ifndef _global_h
2 # include "global.h"
3 #endif
4
5 #ifndef _mover_h
6 # include "mover.h"
7 #endif
8 #ifndef _vec2_h
9 # include "vec2.h"
10 #endif
11 #ifndef _graph_h
12 # include "graph.h"
13 #endif
14
15 /*----------------------------------------------------------------------------*/
16
17 #ifndef __TURBOC__
18 # include "xmover.C"
19 #else
20 # include "dosmover.C"
21 #endif
22
23 /*----------------------------------------------------------------------------*/
24
BallStateTop()25 BallStateTop::BallStateTop() {}
~BallStateTop()26 BallStateTop::~BallStateTop() {}
Redraw()27 void BallStateTop::Redraw() {}
Show()28 void BallStateTop::Show() {}
MoveTo(const Vec2 &)29 void BallStateTop::MoveTo( const Vec2& /*new_pos*/ ) {}
Hide()30 void BallStateTop::Hide() {}
31
32 /*----------------------------------------------------------------------------*/
33
34
BallState(BallMover * m_in,ColorId col_in,const Vec2 & pos)35 BallState::BallState( BallMover *m_in, ColorId col_in, const Vec2 &pos ) {
36 vis = 0;
37 m = m_in;
38 if (!m) {
39 printf( "BallState: Error: BallMover not initialized\n" );
40 }
41 col = col_in;
42 for (col_x=0;col_x<nball_ids;col_x++) {
43 if (col==ball_ids[col_x]) break;
44 }
45 x = (int)(pos.X()*w2n);
46 y = (int)(pos.Y()*w2n);
47 DBG3( BState, "BallState(%ld,<%d,%d>)", col_in, x,y );
48 }
49
~BallState()50 BallState::~BallState() {
51 }
52
53
Redraw()54 void BallState::Redraw() {
55 vis=1;
56 m->DrawBallAt(x,y,col_x);
57 }
58
Show()59 void BallState::Show() {
60 if (!vis) {
61 vis=1;
62 m->DrawBallAt(x,y,col_x);
63 }
64 }
65
66
MoveTo(const Vec2 & pos)67 void BallState::MoveTo( const Vec2 &pos ) {
68 int newx;
69 int newy;
70
71 newx = (int)(pos.X()*w2n);
72 newy = (int)(pos.Y()*w2n);
73 if (newx!=x||newy!=y) {
74 m->MoveBallOnScreen(x,y,newx,newy,col_x);
75 x = newx;
76 y = newy;
77 }
78 }
79
80
Hide()81 void BallState::Hide() {
82 if (vis) {
83 vis=0;
84 m->DrawBallAt(x,y,col_x);
85 }
86 }
87
88 /*----------------------------------------------------------------------------*/
89
90
HalfBallState(BallMover * m_in,ColorId col_in,const Vec2 & pos)91 HalfBallState::HalfBallState( BallMover *m_in, ColorId col_in, const Vec2 &pos ) :
92 BallState( m_in, col_in, pos )
93 {
94 mh = (HalfBallMover *)m_in;
95 #ifndef __TURBOC__
96 st=mh->AngVec2St(rand()%mh->vecs_l,rand()%mh->vecs_b);
97 #endif
98 }
99
~HalfBallState()100 HalfBallState::~HalfBallState() {
101 }
102
Redraw()103 void HalfBallState::Redraw() {
104 vis=1;
105 mh->RollBallAt(x,y,st,col_x);
106 }
107
Show()108 void HalfBallState::Show() {
109 if (!vis) {
110 vis=1;
111 mh->RollBallAt(x,y,st,col_x);
112 }
113 }
114
115
MoveTo(const Vec2 & pos)116 void HalfBallState::MoveTo( const Vec2 &pos ) {
117 int newx;
118 int newy;
119 RingState nst;
120
121 newx = (int)(pos.X()*w2n);
122 newy = (int)(pos.Y()*w2n);
123 if (newx!=x||newy!=y) {
124 mh->RollBallOnScreen(x,y,st,newx,newy,&nst,col_x);
125 x = newx;
126 y = newy;
127 st = nst;
128 }
129 }
130
131
Hide()132 void HalfBallState::Hide() {
133 if (vis) {
134 vis=0;
135 mh->RollBallAt(x,y,st,col_x);
136 }
137 }
138