-
Notifications
You must be signed in to change notification settings - Fork 0
/
Player.cpp
113 lines (95 loc) · 1.92 KB
/
Player.cpp
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
#include "Player.h"
Player::Player()
{
speed=7;
}
void Player::updatePos()
{
oldPos =pos;
Uint8* state=SDL_GetKeyState(NULL);
if(state[SDLK_w])
{
if(state[SDLK_a] || state[SDLK_d])
pos.y-=speed/1.5;
else
pos.y-=speed;
}
else if(state[SDLK_s])
{
if(state[SDLK_a] || state[SDLK_d])
pos.y+=speed/1.5;
else
pos.y+=speed;
}
if(state[SDLK_a])
{
if(state[SDLK_w] || state[SDLK_s])
pos.x-=speed/2;
else
pos.x-=speed;
}
else if(state[SDLK_d])
{
if(state[SDLK_w] || state[SDLK_s])
pos.x+=speed/2;
else
pos.x+=speed;
}
}
void Player::render()
{
renderAmmo();
glPushMatrix();
glTranslatef(pos.x,pos.y,0);///move player
glRotatef((pitch*radToDeg-90),0,0,1);
glCallList(getModelID());
glPopMatrix();
}
void Player::setPitch(int xm,int ym)
{
float a = pos.x-xm;
float b = pos.y-ym;
if(a>0 && b> 0)
{
pitch = atan(b/a);
}else if(a<0 && b>0)
{
pitch =PI + atan(b/a);
}else if(a<0 && b<0)
{
pitch =PI + atan(b/a);
}else if(a>0 && b<0)
{
pitch =2*PI + atan(b/a);
}
}
void Player::setAmmoType(Ammo *am)
{
ammoType = am;
}
void Player::shootAmmo()
{
/// Ammo(float sp,int bumR,int dmgR,int dam, int model);
Ammo shotAmmo(10,10,20,10,pitch,ammoType->getModelID(),ammoType->getExplodeModel());
shotAmmo.update(pos.x-17*cos(pitch)+17*sin(pitch),pos.y-17*sin(pitch)-17*cos(pitch));
ammo.push_back(shotAmmo);
}
void Player::renderAmmo()
{
for (std::vector<Ammo>::iterator it = ammo.begin() ; it != ammo.end();)
{
if(it->frameCD < 0)
{
it = ammo.erase(it);
}
else
{
it->render();
++it;
}
}
}
Ammo* Player::getAmmoType()
{
return ammoType;
}