File: Ball.h

package info (click to toggle)
csmash 0.6.6-6
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 13,548 kB
  • ctags: 1,687
  • sloc: cpp: 19,531; sh: 3,515; makefile: 439; ansic: 120; sed: 16
file content (96 lines) | stat: -rw-r--r-- 2,903 bytes parent folder | download | duplicates (6)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/* $Id: Ball.h,v 1.15 2003/08/17 12:37:53 nan Exp $ */

// Copyright (C) 2000, 2003  神南 吉宏(Kanna Yoshihiro)
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

#ifndef _Ball_
#define _Ball_

#include "BallView.h"
#include "BallView2D.h"
#include "Player.h"

class Ball {
  friend class Opening;
public:
  Ball();
  Ball( double _x, double _y, double _z, double _vx, double _vy, double _vz,
	double _spin, long _status );
  virtual ~Ball();

  virtual bool Init();

  double GetX() { return m_x; }
  double GetY() { return m_y; }
  double GetZ() { return m_z; }
  double GetVX() { return m_vx; }
  double GetVY() { return m_vy; }
  double GetVZ() { return m_vz; }
  double GetSpin() { return m_spin; }

  long GetStatus() { return m_status; }

  bool Move();	// move to 1turn(0.01 sec) later

  bool Hit( double vx, double vy, double vz, double spin, Player *player );
  						// hit ball
  bool Toss( Player *player, long power );	// toss

  void Warp( double x, double y, double z, double vx, double vy, double vz, 
	     double spin, long status );
  void Warp( char *buf );

  // Calc vy, vz from bound location
  bool TargetToV( double targetX, double targetY, double height, double spin, 
		  double &vx, double &vy, double &vz, double vMin = 0.1,
		  double vMax = 30.0 );
  // For serve
  bool TargetToVS( double targetX, double targetY, double height, double spin, 
		   double &vx, double &vy, double &vz );

  char * Send( char *buf );

  BallView *GetView() { return m_View; };
protected:
  double m_x;		// ball location
  double m_y;
  double m_z;
  double m_vx;		// ball velocity
  double m_vy;
  double m_vz;

  double m_spin;	// spin. plus --- top spin   minus --- back spin

  long m_status;	// 0 --- From the time side=1 hit to bound
  			// 1 --- During side=-1 can hit
  			// 2 --- From the time side=-1 hit to bound
  			// 3 --- During side=1 can hit
  			// 4 --- From the time side=1 serve to bound
  			// 5 --- From the time side=-1 serve to bound
  			// 6 --- From the time side=1 toss to hit
  			// 7 --- From the time side=-1 toss to hit
  			// 8 --- Until player serve
  			//-1 --- Ball dead

  BallView* m_View;

  long m_lastSendCount;

private:
  void BallDead();
};

#endif // _Ball_