-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathweapon.h
278 lines (220 loc) · 4.75 KB
/
weapon.h
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
#pragma once
class Player;
#define d_r(_d) _d * (M_PI / 180)
#define r_d(_r) _r * (180 / M_PI)
#define INIT_COOLTIME_SWORD 60
#define INIT_COOLTIME_DAGGER 30
#define INIT_COOLTIME_GREATSWORD 90
#define INIT_ROTATION_SWORD 60.0f
#define INIT_ROTATION_DAGGER 60.0f
#define INIT_ROTATION_GREATSWORD 90.0f
#define INIT_DAMAGE_SWORD 10
#define INIT_DAMAGE_DAGGER 6
#define INIT_DAMAGE_GREATSWORD 20
#define AVOIDANCE_DAMAGE_RADIUS 100
#define MAX_THROW_DAGGER 64
#define MAX_DUST 64
#define ATTACKBUF 2.0f
struct Vector
{
float x;
float y;
float length;
};
enum weapontype
{
sword,
dagger,
greatSword,
none = 99
};
struct Location
{
float x;
float y;
};
struct SwordSlash
{
Location l;
Vector v;
bool flg;
Location collsion1;
Location collsion2;
};
struct ThrowDagger
{
Location l;
Vector v;
bool flg;
float relativeRot;
float rot;
Vector unit;
};
struct Dust
{
Location l;
Vector v;
bool flg;
float radius;
int endcnt;
int startcnt;
};
class weapon {
private:
int weaponType;
int weaponLevel;
bool levelUpFlg;
Location location;
Vector playerVector;
Vector weaponVec;
Vector baseVec;
Vector unitVec;
float collisionX, collisionY; //回転後の座標、当たり判定に使う
Vector collisionVec;
float rot; //回転
float relativeRot; //プレイヤーのベクトルを中心とした回転
float maxRot; //最大どれくらい回転するか
float weaponAngle;
float rotSpeed;
int fps;
int coolTime; //クールタイムを計算する変数
int maxCoolTime; //クールタイムの値
int maxCoolTimeTmp; //クールタイムの値
bool isAttacking; //攻撃中かどうか
bool oldIsAttacking; //攻撃中かどうか
int damage;
int sword_img;
int dagger_img;
int greatsword_img;
int attackbuf_img;
int tornado_img;
int arrow_img;
int daggerslash_img;
int sword_level7_img;
int sword_level8_img;
int dagger_level7_img;
int dagger_level8_img;
int greatsword_level7_img;
int greatsword_level8_img;
//int sword_sound;
//int dagger_sound;
//int greatSword_sound;
bool soundFlg;
float attackbuf;
//仮 プレイヤーのステータス
float P_speed;
float P_cooltime;
float P_limit;
//飛ぶ斬撃
SwordSlash swordSlash[10];
int slash_img;
int slashFlg;
float slashRot;
Location sl[100];
//魔剣
int hitCnt;
int fpsCnt;
float heelAmount;
//投げナイフ
ThrowDagger throwDagger[MAX_THROW_DAGGER];
//回避中のダメージ
bool avoidanceDamageFlg;
//dust
Dust dust[MAX_DUST];
int dustcnt;
float dustDamage;
//総合ダメージ
int totalDamage;
float tmp, tmp1;
public:
weapon();
weapon(int type);
~weapon();
void Update(float cursorX, float cursorY, Location playerLocation, Player* player);
void Draw() const;
void SetWeaponType(int type);
void LevelState();
bool WeaponCollision(Location enemyLocation, float radius);
bool SpawnSwordSlash();
void SwordSlashAnim(); //最終強化1の斬撃を飛ばす
void SwordLevel8(Player* player);
void SwordLevel8Heel(Player* player);
bool SpawnThrowDagger(int num);
void ThrowDaggerAnim();
bool SpawnDust();
void DustAnim();
bool DustCollision(Location enemyLocation, float radius);
//武器レベルをセット
void SetWeaponLevel(int num) {
weaponLevel = num;
LevelState();
}
void SetCoolTime(float num, bool flg) {
if (flg) {
maxCoolTimeTmp = maxCoolTime;
maxCoolTime = (int)maxCoolTime * num;
coolTime = maxCoolTime;
}
else
{
maxCoolTime = maxCoolTimeTmp;
LevelState();
}
}
void SetHitCnt(bool flg) {
if (flg) {
hitCnt++;
}
else {
if (hitCnt > 0) {
hitCnt--;
}
}
}
void SetAttackBuf(bool f) {
if (f) {
if (attackbuf == ATTACKBUF || attackbuf == 1.0f) {
if (attackbuf == 1.0f) {
attackbuf = 1.5f;
}
else {
attackbuf = attackbuf * 1.5f;
}
}
}
else {
if (attackbuf >= ATTACKBUF) {
attackbuf = ATTACKBUF;
}
else {
attackbuf = 1.0f;
}
}
}
void SetAvoidanceDamageFlg(bool f) {
avoidanceDamageFlg = f;
}
//武器レベルを取得
int GetWeaponLevel() { return weaponLevel; }
bool GetLevelUpFlg() { return levelUpFlg; }
int GetCoolTime() { return coolTime; }
int GetMaxCoolTime() { return maxCoolTime; }
int GetDamage() { return damage; }
int GetWeaponType() { return weaponType; }
bool GetIsAttacking() { return isAttacking; }
bool GetOldIsAttacking() { return oldIsAttacking; }
float GetDustDamage() { return dustDamage; }
float GetAttackBuf() { return attackbuf; }
int GetAttackBufImg() { return attackbuf_img; }
int GetArrowImg() { return arrow_img; }
void InitWeapon();
//武器のレベルが上がる際、プレイヤーのステータスも上がるため
//その数値を返す関数
float GetP_Speed() { return P_speed; }
float GetP_AvoidanceCooltime() { return P_cooltime; }
float GetP_Upperlimitlimit() { return P_limit;}
float GetMaxRot() { return maxRot; }
int GetTotalDamage() { return totalDamage; }
void AddTotalDamage();
void AddTotalDamageDust();
};