-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSnooker.cpp
More file actions
130 lines (120 loc) · 4.45 KB
/
Snooker.cpp
File metadata and controls
130 lines (120 loc) · 4.45 KB
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include "Snooker.hpp"
#include <boost/lexical_cast.hpp>
Snooker::Snooker(){
TIMESLICE_THRESHOLD=Ogre::Real(0.000001);
UPDATE_STEP=1;
STATS_MASS=154.5;
STATS_RESTITUTION_COEFFICIENT=Ogre::Real(0.9);
STATS_FRICTION_COEFFICIENT=Ogre::Real(0.1);
STATS_BALL_RADIUS=26.25;
STATS_BALL_NUMBER=22; //球数
STATS_TABLE_INNER_WIDTH=2035; //球桌内部宽度
STATS_TABLE_OUTTER_WIDTH=2235; //球桌外部宽度
STATS_TABLE_INNER_LENGTH=3820; //球桌内部长度
STATS_TABLE_OUTTER_LENGTH=4020; //球桌外部长度
STATS_STICK_LENGTH=1450; //球杆长度
previous_BallStates=new BallState[STATS_BALL_NUMBER];
current_BallStates =new BallState[STATS_BALL_NUMBER];
int i=STATS_BALL_NUMBER;
while (i--)
{
previous_BallStates[i]=BALLSTATE_ONTABLE;
current_BallStates[i]=BALLSTATE_ONTABLE;
}
//poolBalls.insert(new PoolBall(STATS_BALL_RADIUS, ))
}
void Snooker::beginGame(Ogre::SceneManager* m_pSceneMgr)
{
CueGameCore::beginGame(m_pSceneMgr);
poolBalls.push_back((new PoolBall(STATS_MASS,STATS_FRICTION_COEFFICIENT,STATS_BALL_RADIUS,
m_pSceneMgr->getEntity("Entity_White")))->setMaterialName("Snooker_Ball/white"));
std::string str;
for (int i=1;i<=15;i++)
{
str="Entity_Red"+boost::lexical_cast<std::string>(i);
poolBalls.push_back((new PoolBall(STATS_MASS,STATS_FRICTION_COEFFICIENT,STATS_BALL_RADIUS,
m_pSceneMgr->getEntity(str)))->setMaterialName("Snooker_Ball/red"));
}
poolBalls.push_back((new PoolBall(STATS_MASS,STATS_FRICTION_COEFFICIENT,STATS_BALL_RADIUS,
m_pSceneMgr->getEntity("Entity_Yellow")))->setMaterialName("Snooker_Ball/yellow"));
poolBalls.push_back((new PoolBall(STATS_MASS,STATS_FRICTION_COEFFICIENT,STATS_BALL_RADIUS,
m_pSceneMgr->getEntity("Entity_Brown")))->setMaterialName("Snooker_Ball/brown"));
poolBalls.push_back((new PoolBall(STATS_MASS,STATS_FRICTION_COEFFICIENT,STATS_BALL_RADIUS,
m_pSceneMgr->getEntity("Entity_Green")))->setMaterialName("Snooker_Ball/green"));
poolBalls.push_back((new PoolBall(STATS_MASS,STATS_FRICTION_COEFFICIENT,STATS_BALL_RADIUS,
m_pSceneMgr->getEntity("Entity_Blue")))->setMaterialName("Snooker_Ball/blue"));
poolBalls.push_back((new PoolBall(STATS_MASS,STATS_FRICTION_COEFFICIENT,STATS_BALL_RADIUS,
m_pSceneMgr->getEntity("Entity_Purple")))->setMaterialName("Snooker_Ball/purple"));
poolBalls.push_back((new PoolBall(STATS_MASS,STATS_FRICTION_COEFFICIENT,STATS_BALL_RADIUS,
m_pSceneMgr->getEntity("Entity_Black")))->setMaterialName("Snooker_Ball/black"));
initialiseAudio(m_pSceneMgr);
for (std::vector<PoolBall*>::iterator l_it=poolBalls.begin();l_it<poolBalls.end();l_it++)
{
for (std::vector<PoolBall*>::iterator r_it=poolBalls.begin();r_it<poolBalls.end();r_it++)
{
if((*l_it)==(*r_it)) continue;
if ((*l_it)->getPosition().squaredDistance((*r_it)->getPosition())<=Ogre::Math::Sqr((*l_it)->getRadius()+(*r_it)->getRadius()))
{
(*l_it)->getEntity()->getParentSceneNode()->showBoundingBox(true);
(*r_it)->getEntity()->getParentSceneNode()->showBoundingBox(true);
}
}
}
}
bool Snooker::compareAndJudge()
{
return true;
}
void Snooker::nextRound()
{
}
void Snooker::update(Ogre::Real interval)
{
CueGameCore::update(interval);
}
void Snooker::keyPress(const OIS::KeyEvent &keyEventRef,OIS::Keyboard* m_pKeyboard)
{
CueGameCore::keyPress(keyEventRef,m_pKeyboard);
//#ifdef _DEBUG||NDEBUG
if(m_pKeyboard->isKeyDown(OIS::KC_1)){
poolBalls[YELLOW]->setVelocity(Ogre::Vector3(500,-4000,0));
#ifdef _DEBUG||NDEBUG
gameLog->logMessage("YELLOW Ball Launch!");
#endif
}
if(m_pKeyboard->isKeyDown(OIS::KC_2)){
poolBalls[GREEN]->setVelocity(Ogre::Vector3(-500,-4000,0));
#ifdef _DEBUG||NDEBUG
gameLog->logMessage("Green Ball Launch!");
#endif
}
if(m_pKeyboard->isKeyDown(OIS::KC_3)){
poolBalls[BROWN]->setVelocity(Ogre::Vector3(0,-8000,0));
#ifdef _DEBUG||NDEBUG
gameLog->logMessage("BROWN Ball Launch!");
#endif
}
if(m_pKeyboard->isKeyDown(OIS::KC_4)){
poolBalls[BLUE]->setVelocity(Ogre::Vector3(0,-5000,0));
#ifdef _DEBUG||NDEBUG
gameLog->logMessage("Blue Ball Launch!");
#endif
}
if(m_pKeyboard->isKeyDown(OIS::KC_5)){
poolBalls[PURPLE]->setVelocity(Ogre::Vector3(3000,-4000,0));
#ifdef _DEBUG||NDEBUG
gameLog->logMessage("Purple Ball Launch!");
#endif
}
if(m_pKeyboard->isKeyDown(OIS::KC_6)){
poolBalls[BLACK]->setVelocity(Ogre::Vector3(-3000,4000,0));
#ifdef _DEBUG||NDEBUG
gameLog->logMessage("Black Ball Launch!");
#endif
}
//#endif // _DEBUG
};
void Snooker::initialiseAudio(Ogre::SceneManager* sceneManager)
{
CueGameCore::initialiseAudio(sceneManager);
}