Merge pull request 'Combine Linux Compatibility with main branch' (#1) from master into linux_template
Reviewed-on: #1
This commit is contained in:
commit
2dd5c990f8
@ -295,7 +295,8 @@ void Editor::OnTextEntryComplete(const std::string& sText) {
|
|||||||
MAP_SIZE = { (int)map[0].size(),(int)map.size() };
|
MAP_SIZE = { (int)map[0].size(),(int)map.size() };
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
reEnableTextEntry = true;
|
game->TextEntryEnable(false);
|
||||||
|
promptState = PromptState::NONE;
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case PromptState::ENTER_WIDTH: {
|
case PromptState::ENTER_WIDTH: {
|
||||||
|
@ -28,6 +28,7 @@ enum EnemyID {
|
|||||||
ISHOOT2,
|
ISHOOT2,
|
||||||
SHOOTME_ARMOR,
|
SHOOTME_ARMOR,
|
||||||
ISHOOT_MAP,
|
ISHOOT_MAP,
|
||||||
|
ISHOOT2_SPEED,
|
||||||
SONAR,
|
SONAR,
|
||||||
POWERUP_ARMOR = 56,
|
POWERUP_ARMOR = 56,
|
||||||
POWERUP_SPEED = 57,
|
POWERUP_SPEED = 57,
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.6 KiB |
11
Faceball2030/assets/enemies/IShoot2.mtl
Normal file
11
Faceball2030/assets/enemies/IShoot2.mtl
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Exported from Wings 3D 2.2.9
|
||||||
|
newmtl sphere1_auv
|
||||||
|
Ns 19.999999999999996
|
||||||
|
d 1.0
|
||||||
|
illum 2
|
||||||
|
Kd 1.0 1.0 1.0
|
||||||
|
Ka 0.0 0.0 0.0
|
||||||
|
Ks 0.19 0.19 0.19
|
||||||
|
Ke 0.0 0.0 0.0
|
||||||
|
map_Kd sphere1_auv.png
|
||||||
|
|
1016
Faceball2030/assets/enemies/IShoot2.obj
Normal file
1016
Faceball2030/assets/enemies/IShoot2.obj
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Faceball2030/assets/enemies/IShoot2.png
Normal file
BIN
Faceball2030/assets/enemies/IShoot2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.5 KiB |
BIN
Faceball2030/assets/enemies/IShoot2.wings
Normal file
BIN
Faceball2030/assets/enemies/IShoot2.wings
Normal file
Binary file not shown.
BIN
Faceball2030/assets/enemies/IShoot2.xcf
Normal file
BIN
Faceball2030/assets/enemies/IShoot2.xcf
Normal file
Binary file not shown.
BIN
Faceball2030/assets/enemies/sphere1_auv.png
Normal file
BIN
Faceball2030/assets/enemies/sphere1_auv.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
@ -32,7 +32,7 @@
|
|||||||
8351
|
8351
|
||||||
8197
|
8197
|
||||||
8595
|
8595
|
||||||
8198
|
7958
|
||||||
273
|
273
|
||||||
8196
|
8196
|
||||||
8195
|
8195
|
||||||
|
@ -1,27 +1,51 @@
|
|||||||
5
|
7
|
||||||
5
|
7
|
||||||
8192
|
17193
|
||||||
8192
|
8202
|
||||||
8192
|
24586
|
||||||
8192
|
424
|
||||||
8192
|
8202
|
||||||
8192
|
25370
|
||||||
8192
|
16924
|
||||||
8192
|
1221
|
||||||
8192
|
8201
|
||||||
8192
|
8204
|
||||||
8192
|
8597
|
||||||
8192
|
8201
|
||||||
8192
|
8204
|
||||||
8192
|
17221
|
||||||
8192
|
8197
|
||||||
8192
|
8195
|
||||||
8192
|
8198
|
||||||
8192
|
837
|
||||||
8192
|
24579
|
||||||
8192
|
8198
|
||||||
8192
|
837
|
||||||
8192
|
8721
|
||||||
8192
|
8202
|
||||||
8192
|
8202
|
||||||
8192
|
8192
|
||||||
|
8202
|
||||||
|
8202
|
||||||
|
25444
|
||||||
|
8197
|
||||||
|
11
|
||||||
|
8204
|
||||||
|
24581
|
||||||
|
9
|
||||||
|
8204
|
||||||
|
8197
|
||||||
|
8197
|
||||||
|
8351
|
||||||
|
8199
|
||||||
|
25381
|
||||||
|
8195
|
||||||
|
8198
|
||||||
|
8197
|
||||||
|
9027
|
||||||
|
24986
|
||||||
|
8202
|
||||||
|
8194
|
||||||
|
8746
|
||||||
|
24586
|
||||||
|
278
|
||||||
|
20
Faceball2030/assets/worldSkyBox.mtl
Normal file
20
Faceball2030/assets/worldSkyBox.mtl
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Exported from Wings 3D 2.2.9
|
||||||
|
newmtl Cylinder1_auv
|
||||||
|
Ns 19.999999999999996
|
||||||
|
d 1.0
|
||||||
|
illum 2
|
||||||
|
Kd 1.0 1.0 1.0
|
||||||
|
Ka 0.0 0.0 0.0
|
||||||
|
Ks 0.19 0.19 0.19
|
||||||
|
Ke 0.0 0.0 0.0
|
||||||
|
map_Kd Cylinder1_auv.png
|
||||||
|
|
||||||
|
newmtl default
|
||||||
|
Ns 19.999999999999996
|
||||||
|
d 1.0
|
||||||
|
illum 2
|
||||||
|
Kd 0.7898538076923077 0.8133333333333334 0.6940444444444445
|
||||||
|
Ka 0.0 0.0 0.0
|
||||||
|
Ks 0.1689853807692308 0.17133333333333334 0.15940444444444446
|
||||||
|
Ke 0.0 0.0 0.0
|
||||||
|
|
207
Faceball2030/assets/worldSkyBox.obj
Normal file
207
Faceball2030/assets/worldSkyBox.obj
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
# Exported from Wings 3D 2.2.9
|
||||||
|
mtllib worldSkyBox.mtl
|
||||||
|
o Cylinder1
|
||||||
|
#64 vertices, 64 faces
|
||||||
|
v 1.00000000 20.00000000 0.0000000e+0
|
||||||
|
v 0.98078528 20.00000000 0.19509032
|
||||||
|
v 0.92387953 20.00000000 0.38268343
|
||||||
|
v 0.83146961 20.00000000 0.55557023
|
||||||
|
v 0.70710678 20.00000000 0.70710678
|
||||||
|
v 0.55557023 20.00000000 0.83146961
|
||||||
|
v 0.38268343 20.00000000 0.92387953
|
||||||
|
v 0.19509032 20.00000000 0.98078528
|
||||||
|
v 6.1232340e-17 20.00000000 1.00000000
|
||||||
|
v -0.19509032 20.00000000 0.98078528
|
||||||
|
v -0.38268343 20.00000000 0.92387953
|
||||||
|
v -0.55557023 20.00000000 0.83146961
|
||||||
|
v -0.70710678 20.00000000 0.70710678
|
||||||
|
v -0.83146961 20.00000000 0.55557023
|
||||||
|
v -0.92387953 20.00000000 0.38268343
|
||||||
|
v -0.98078528 20.00000000 0.19509032
|
||||||
|
v -1.00000000 20.00000000 1.2246468e-16
|
||||||
|
v -0.98078528 20.00000000 -0.19509032
|
||||||
|
v -0.92387953 20.00000000 -0.38268343
|
||||||
|
v -0.83146961 20.00000000 -0.55557023
|
||||||
|
v -0.70710678 20.00000000 -0.70710678
|
||||||
|
v -0.55557023 20.00000000 -0.83146961
|
||||||
|
v -0.38268343 20.00000000 -0.92387953
|
||||||
|
v -0.19509032 20.00000000 -0.98078528
|
||||||
|
v -1.8369702e-16 20.00000000 -1.00000000
|
||||||
|
v 0.19509032 20.00000000 -0.98078528
|
||||||
|
v 0.38268343 20.00000000 -0.92387953
|
||||||
|
v 0.55557023 20.00000000 -0.83146961
|
||||||
|
v 0.70710678 20.00000000 -0.70710678
|
||||||
|
v 0.83146961 20.00000000 -0.55557023
|
||||||
|
v 0.92387953 20.00000000 -0.38268343
|
||||||
|
v 0.98078528 20.00000000 -0.19509032
|
||||||
|
v 1.00000000 0.0000000e+0 0.0000000e+0
|
||||||
|
v 0.98078528 0.0000000e+0 0.19509032
|
||||||
|
v 0.92387953 0.0000000e+0 0.38268343
|
||||||
|
v 0.83146961 0.0000000e+0 0.55557023
|
||||||
|
v 0.70710678 0.0000000e+0 0.70710678
|
||||||
|
v 0.55557023 0.0000000e+0 0.83146961
|
||||||
|
v 0.38268343 0.0000000e+0 0.92387953
|
||||||
|
v 0.19509032 0.0000000e+0 0.98078528
|
||||||
|
v 6.1232340e-17 0.0000000e+0 1.00000000
|
||||||
|
v -0.19509032 0.0000000e+0 0.98078528
|
||||||
|
v -0.38268343 0.0000000e+0 0.92387953
|
||||||
|
v -0.55557023 0.0000000e+0 0.83146961
|
||||||
|
v -0.70710678 0.0000000e+0 0.70710678
|
||||||
|
v -0.83146961 0.0000000e+0 0.55557023
|
||||||
|
v -0.92387953 0.0000000e+0 0.38268343
|
||||||
|
v -0.98078528 0.0000000e+0 0.19509032
|
||||||
|
v -1.00000000 0.0000000e+0 1.2246468e-16
|
||||||
|
v -0.98078528 0.0000000e+0 -0.19509032
|
||||||
|
v -0.92387953 0.0000000e+0 -0.38268343
|
||||||
|
v -0.83146961 0.0000000e+0 -0.55557023
|
||||||
|
v -0.70710678 0.0000000e+0 -0.70710678
|
||||||
|
v -0.55557023 0.0000000e+0 -0.83146961
|
||||||
|
v -0.38268343 0.0000000e+0 -0.92387953
|
||||||
|
v -0.19509032 0.0000000e+0 -0.98078528
|
||||||
|
v -1.8369702e-16 0.0000000e+0 -1.00000000
|
||||||
|
v 0.19509032 0.0000000e+0 -0.98078528
|
||||||
|
v 0.38268343 0.0000000e+0 -0.92387953
|
||||||
|
v 0.55557023 0.0000000e+0 -0.83146961
|
||||||
|
v 0.70710678 0.0000000e+0 -0.70710678
|
||||||
|
v 0.83146961 0.0000000e+0 -0.55557023
|
||||||
|
v 0.92387953 0.0000000e+0 -0.38268343
|
||||||
|
v 0.98078528 0.0000000e+0 -0.19509032
|
||||||
|
vt 0.0000000e+0 1.00000000
|
||||||
|
vt 2.2648550e-14 1.1657342e-15
|
||||||
|
vt 9.8017140e-3 1.00000000
|
||||||
|
vt 9.8017140e-3 7.2164497e-16
|
||||||
|
vt 1.9603428e-2 1.00000000
|
||||||
|
vt 1.9603428e-2 4.4408921e-16
|
||||||
|
vt 2.9405142e-2 1.00000000
|
||||||
|
vt 2.9405142e-2 2.2204460e-16
|
||||||
|
vt 3.9206856e-2 1.00000000
|
||||||
|
vt 3.9206856e-2 0.0000000e+0
|
||||||
|
vt 4.9008570e-2 1.00000000
|
||||||
|
vt 4.9008570e-2 0.0000000e+0
|
||||||
|
vt 5.8810284e-2 1.00000000
|
||||||
|
vt 5.8810284e-2 0.0000000e+0
|
||||||
|
vt 6.8611998e-2 1.00000000
|
||||||
|
vt 6.8611998e-2 2.2204460e-16
|
||||||
|
vt 7.8413712e-2 1.00000000
|
||||||
|
vt 7.8413712e-2 1.00000000
|
||||||
|
vt 7.8413712e-2 3.8857806e-16
|
||||||
|
vt 7.8413712e-2 2.6645353e-15
|
||||||
|
vt 8.8215426e-2 1.00000000
|
||||||
|
vt 8.8215426e-2 2.0539126e-15
|
||||||
|
vt 9.8017140e-2 1.00000000
|
||||||
|
vt 9.8017140e-2 1.5543122e-15
|
||||||
|
vt 0.10781885 1.00000000
|
||||||
|
vt 0.10781885 9.9920072e-16
|
||||||
|
vt 0.11762057 1.00000000
|
||||||
|
vt 0.11762057 5.5511151e-16
|
||||||
|
vt 0.12742228 1.00000000
|
||||||
|
vt 0.12742228 3.8857806e-16
|
||||||
|
vt 0.13722400 1.00000000
|
||||||
|
vt 0.13722400 2.2204460e-16
|
||||||
|
vt 0.14702571 1.00000000
|
||||||
|
vt 0.14702571 0.0000000e+0
|
||||||
|
vt 0.15682742 1.00000000
|
||||||
|
vt 0.15682742 0.0000000e+0
|
||||||
|
vt 0.15682742 1.00000000
|
||||||
|
vt 0.15682742 1.6653345e-16
|
||||||
|
vt 0.16662914 1.00000000
|
||||||
|
vt 0.16662914 0.0000000e+0
|
||||||
|
vt 0.17643085 1.00000000
|
||||||
|
vt 0.17643085 0.0000000e+0
|
||||||
|
vt 0.18623257 1.00000000
|
||||||
|
vt 0.18623257 0.0000000e+0
|
||||||
|
vt 0.19603428 1.00000000
|
||||||
|
vt 0.19603428 0.0000000e+0
|
||||||
|
vt 0.20583599 1.00000000
|
||||||
|
vt 0.20583599 2.7755576e-16
|
||||||
|
vt 0.21563771 1.00000000
|
||||||
|
vt 0.21563771 5.5511151e-16
|
||||||
|
vt 0.22543942 1.00000000
|
||||||
|
vt 0.22543942 8.8817842e-16
|
||||||
|
vt 0.23524114 1.00000000
|
||||||
|
vt 0.23524114 1.4432899e-15
|
||||||
|
vt 0.23524114 3.8857806e-16
|
||||||
|
vt 0.23524114 1.00000000
|
||||||
|
vt 0.24504285 2.2204460e-16
|
||||||
|
vt 0.24504285 1.00000000
|
||||||
|
vt 0.25484456 0.0000000e+0
|
||||||
|
vt 0.25484456 1.00000000
|
||||||
|
vt 0.26464628 0.0000000e+0
|
||||||
|
vt 0.26464628 1.00000000
|
||||||
|
vt 0.27444799 0.0000000e+0
|
||||||
|
vt 0.27444799 1.00000000
|
||||||
|
vt 0.28424971 2.2204460e-16
|
||||||
|
vt 0.28424971 1.00000000
|
||||||
|
vt 0.29405142 3.8857806e-16
|
||||||
|
vt 0.29405142 1.00000000
|
||||||
|
vt 0.30385314 7.2164497e-16
|
||||||
|
vt 0.30385314 1.00000000
|
||||||
|
vt 0.31365485 3.8857806e-16
|
||||||
|
vt 0.31365485 1.00000000
|
||||||
|
g Cylinder1_Cylinder1_auv
|
||||||
|
usemtl Cylinder1_auv
|
||||||
|
s 1
|
||||||
|
f 1/64/ 33/63/ 32/66/
|
||||||
|
f 2/62/ 33/63/ 1/64/
|
||||||
|
f 2/62/ 35/59/ 34/61/
|
||||||
|
f 3/60/ 35/59/ 2/62/
|
||||||
|
f 4/58/ 35/59/ 3/60/
|
||||||
|
f 4/58/ 37/55/ 36/57/
|
||||||
|
f 5/56/ 37/55/ 4/58/
|
||||||
|
f 6/33/ 37/36/ 5/35/
|
||||||
|
f 6/33/ 39/32/ 38/34/
|
||||||
|
f 7/31/ 39/32/ 6/33/
|
||||||
|
f 8/29/ 39/32/ 7/31/
|
||||||
|
f 8/29/ 41/28/ 40/30/
|
||||||
|
f 9/27/ 41/28/ 8/29/
|
||||||
|
f 10/25/ 41/28/ 9/27/
|
||||||
|
f 10/25/ 43/24/ 42/26/
|
||||||
|
f 11/23/ 43/24/ 10/25/
|
||||||
|
f 12/21/ 43/24/ 11/23/
|
||||||
|
f 12/21/ 45/20/ 44/22/
|
||||||
|
f 13/18/ 45/20/ 12/21/
|
||||||
|
f 14/51/ 45/54/ 13/53/
|
||||||
|
f 14/51/ 47/50/ 46/52/
|
||||||
|
f 15/49/ 47/50/ 14/51/
|
||||||
|
f 16/47/ 47/50/ 15/49/
|
||||||
|
f 16/47/ 49/46/ 48/48/
|
||||||
|
f 17/45/ 49/46/ 16/47/
|
||||||
|
f 18/43/ 49/46/ 17/45/
|
||||||
|
f 18/43/ 51/42/ 50/44/
|
||||||
|
f 19/41/ 51/42/ 18/43/
|
||||||
|
f 20/39/ 51/42/ 19/41/
|
||||||
|
f 20/39/ 53/38/ 52/40/
|
||||||
|
f 21/37/ 53/38/ 20/39/
|
||||||
|
f 22/15/ 53/19/ 21/17/
|
||||||
|
f 22/15/ 55/14/ 54/16/
|
||||||
|
f 23/13/ 55/14/ 22/15/
|
||||||
|
f 24/11/ 55/14/ 23/13/
|
||||||
|
f 24/11/ 57/10/ 56/12/
|
||||||
|
f 25/9/ 57/10/ 24/11/
|
||||||
|
f 26/7/ 57/10/ 25/9/
|
||||||
|
f 26/7/ 59/6/ 58/8/
|
||||||
|
f 27/5/ 59/6/ 26/7/
|
||||||
|
f 28/3/ 59/6/ 27/5/
|
||||||
|
f 28/3/ 61/2/ 60/4/
|
||||||
|
f 29/1/ 61/2/ 28/3/
|
||||||
|
f 30/70/ 61/71/ 29/72/
|
||||||
|
f 30/70/ 63/67/ 62/69/
|
||||||
|
f 31/68/ 63/67/ 30/70/
|
||||||
|
f 32/66/ 33/63/ 64/65/
|
||||||
|
f 32/66/ 63/67/ 31/68/
|
||||||
|
f 34/61/ 33/63/ 2/62/
|
||||||
|
f 36/57/ 35/59/ 4/58/
|
||||||
|
f 38/34/ 37/36/ 6/33/
|
||||||
|
f 40/30/ 39/32/ 8/29/
|
||||||
|
f 42/26/ 41/28/ 10/25/
|
||||||
|
f 44/22/ 43/24/ 12/21/
|
||||||
|
f 46/52/ 45/54/ 14/51/
|
||||||
|
f 48/48/ 47/50/ 16/47/
|
||||||
|
f 50/44/ 49/46/ 18/43/
|
||||||
|
f 52/40/ 51/42/ 20/39/
|
||||||
|
f 54/16/ 53/19/ 22/15/
|
||||||
|
f 56/12/ 55/14/ 24/11/
|
||||||
|
f 58/8/ 57/10/ 26/7/
|
||||||
|
f 60/4/ 59/6/ 28/3/
|
||||||
|
f 62/69/ 61/71/ 30/70/
|
||||||
|
f 64/65/ 63/67/ 32/66/
|
BIN
Faceball2030/assets/worldSkyBox.png
Normal file
BIN
Faceball2030/assets/worldSkyBox.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.0 KiB |
@ -66,7 +66,7 @@ bool Enemy::CanShoot() {
|
|||||||
|
|
||||||
void Enemy::ShootBullet(int myIndex) {
|
void Enemy::ShootBullet(int myIndex) {
|
||||||
fireDelay = game->enemyData[GetID()].fireDelay;
|
fireDelay = game->enemyData[GetID()].fireDelay;
|
||||||
game->bullets.push_back({ game->bullet, {pos.x,pos.y+0.15f,pos.z},rot,0.2f,{std::cosf(rot) * game->shotSpd,std::sinf(rot) * game->shotSpd }, YELLOW,false,GetID(),myIndex,blinking});
|
game->bullets.push_back({ game->bullet, {pos.x,pos.y+0.15f,pos.z},rot,0.2f,1,true,{std::cosf(rot) * game->shotSpd,std::sinf(rot) * game->shotSpd }, YELLOW,false,GetID(),myIndex,blinking});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Enemy::ReloadBullet(float fElapsedTime) {
|
void Enemy::ReloadBullet(float fElapsedTime) {
|
||||||
@ -94,6 +94,7 @@ bool Enemy::isExplosive() {
|
|||||||
|
|
||||||
void Enemy::setExploded(bool exploded) {
|
void Enemy::setExploded(bool exploded) {
|
||||||
this->exploded = exploded;
|
this->exploded = exploded;
|
||||||
|
game->RegenerateMinimap();
|
||||||
}
|
}
|
||||||
|
|
||||||
Enemy Enemy::freshCopy(bool randomizeLoc){
|
Enemy Enemy::freshCopy(bool randomizeLoc){
|
||||||
@ -216,6 +217,11 @@ bool Enemy::Update(float fElapsedTime) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
if (fElapsedTime > 3/120.f) {
|
||||||
|
mesh.tris.clear();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -237,6 +243,9 @@ void Enemy::OnDeathEvent() {
|
|||||||
if (game->enemyData[id].powerupDrop != PowerupType::NONE) {
|
if (game->enemyData[id].powerupDrop != PowerupType::NONE) {
|
||||||
game->SpawnPowerup(game->enemyData[id].powerupDrop, pos);
|
game->SpawnPowerup(game->enemyData[id].powerupDrop, pos);
|
||||||
}
|
}
|
||||||
|
if (game->PlayerHasMapUpgrade()){
|
||||||
|
game->RegenerateMinimap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vf2d FaceBall::GetPlayerPos() {
|
vf2d FaceBall::GetPlayerPos() {
|
||||||
@ -254,8 +263,10 @@ void FaceBall::InitializeEnemyData() {
|
|||||||
enemyData[SHOOTME] = { "SHOOTME",enemy_ShootMe,YELLOW,1,1,0.5,2,1,0.2f,true };
|
enemyData[SHOOTME] = { "SHOOTME",enemy_ShootMe,YELLOW,1,1,0.5,2,1,0.2f,true };
|
||||||
enemyData[SHOOTME2] = { "SHOOTME2",enemy_ShootMe2,YELLOW,1,1,PI / 6,2,1,0.35f,true };
|
enemyData[SHOOTME2] = { "SHOOTME2",enemy_ShootMe2,YELLOW,1,1,PI / 6,2,1,0.35f,true };
|
||||||
enemyData[ISHOOT] = { "ISHOOT",enemy_IShoot,YELLOW,1,1,0.5,2,3,0.4f,true };
|
enemyData[ISHOOT] = { "ISHOOT",enemy_IShoot,YELLOW,1,1,0.5,2,3,0.4f,true };
|
||||||
|
enemyData[ISHOOT2] = { "ISHOOT2",enemy_IShoot2,YELLOW,1,1,PI / 6,2,1,0.35f,true };
|
||||||
enemyData[SHOOTME_ARMOR] = { "SHOOTME",enemy_ShootMe,YELLOW,6,1,0.5,2,1,0.3f,true,PowerupType::ARMOR,true };
|
enemyData[SHOOTME_ARMOR] = { "SHOOTME",enemy_ShootMe,YELLOW,6,1,0.5,2,1,0.3f,true,PowerupType::ARMOR,true };
|
||||||
enemyData[ISHOOT_MAP] = { "ISHOOT",enemy_IShoot,YELLOW,7,1,0.5,2,2,0.3f,true,PowerupType::MAP,true };
|
enemyData[ISHOOT_MAP] = { "ISHOOT",enemy_IShoot,YELLOW,7,1,0.5,2,2,0.3f,true,PowerupType::MAP,true };
|
||||||
|
enemyData[ISHOOT2_SPEED] = { "ISHOOT2",enemy_IShoot2,YELLOW,6,1,PI / 6,2,1,0.35f,true,PowerupType::SPEED,true };
|
||||||
enemyData[SONAR] = { "Sonar",enemy_Sonar,RED,5,1,PI / 8,2,1 };
|
enemyData[SONAR] = { "Sonar",enemy_Sonar,RED,5,1,PI / 8,2,1 };
|
||||||
enemyData[COIN] = { "Coin",undefined,BLUE };
|
enemyData[COIN] = { "Coin",undefined,BLUE };
|
||||||
enemyData[POWERUP_ARMOR] = { "Armor",undefined,{96,0,96} };
|
enemyData[POWERUP_ARMOR] = { "Armor",undefined,{96,0,96} };
|
||||||
@ -424,8 +435,65 @@ void FaceBall::LoadLevel(int level)
|
|||||||
walls = { mapWalls };
|
walls = { mapWalls };
|
||||||
MapWallsObjectIndex = objects.size()-1;
|
MapWallsObjectIndex = objects.size()-1;
|
||||||
objects.push_back({ mapFloor,{0,0,0},0,0 });
|
objects.push_back({ mapFloor,{0,0,0},0,0 });
|
||||||
|
objects.push_back({ worldSkyBox,{MAP_SIZE.x/2.f,0,MAP_SIZE.y/2.f},0,0,std::max(float(MAP_SIZE.x),float(MAP_SIZE.y))*2,false });
|
||||||
//objects.push_back({ game->mapExit,{(float)exitCoords.x+0.5f,0,(float)exitCoords.y+0.5f},0,0.4f });
|
//objects.push_back({ game->mapExit,{(float)exitCoords.x+0.5f,0,(float)exitCoords.y+0.5f},0,0.4f });
|
||||||
exit = { game->mapExit,{(float)exitCoords.x + 0.5f,0.02f,(float)exitCoords.y + 0.5f},0,0.4f };
|
exit = { game->mapExit,{(float)exitCoords.x + 0.5f,0.02f,(float)exitCoords.y + 0.5f},0,0.4f };
|
||||||
|
RegenerateMinimap();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FaceBall::RegenerateMinimap(){
|
||||||
|
vf2d mapCenter = {float(ScreenWidth()-364),float(164)};
|
||||||
|
vf2d mapSprSize = {float(mapSpr->width),float(mapSpr->height)};
|
||||||
|
SetDrawTarget(mapSpr);
|
||||||
|
Clear(BLACK);
|
||||||
|
const int MAP_VISIBILITY=6;
|
||||||
|
for (int x=0;x<MAP_SIZE.x;x++){
|
||||||
|
for (int y=0;y<MAP_SIZE.y;y++){
|
||||||
|
float dist = std::sqrtf(std::pow(player.GetPos().x-x,2)+std::pow(player.GetPos().z-y,2));
|
||||||
|
if (dist<MAP_VISIBILITY){
|
||||||
|
try{
|
||||||
|
MapSquare&square=map.at(y).at(x);
|
||||||
|
vf2d squareLoc = vf2d{x*minimapGridSize.x,y*minimapGridSize.y};
|
||||||
|
uint8_t transparency=uint8_t((1-(float(dist)/MAP_VISIBILITY))*255);
|
||||||
|
if (square.wallN){
|
||||||
|
DrawLine(squareLoc,squareLoc+vf2d{1.f,0.f}*minimapGridSize,Pixel{255,255,255,transparency});
|
||||||
|
}
|
||||||
|
if (square.wallS){
|
||||||
|
DrawLine(squareLoc+vf2d{0,1.f}*minimapGridSize,squareLoc+vf2d{1,1}*minimapGridSize,Pixel{255,255,255,transparency});
|
||||||
|
}
|
||||||
|
if (square.wallE){
|
||||||
|
DrawLine(squareLoc+vf2d{1,0}*minimapGridSize,squareLoc+vf2d{1,1}*minimapGridSize,Pixel{255,255,255,transparency});
|
||||||
|
}
|
||||||
|
if (square.wallW){
|
||||||
|
DrawLine(squareLoc,squareLoc+vf2d{0,1}*minimapGridSize,Pixel{255,255,255,transparency});
|
||||||
|
}
|
||||||
|
if (hasMapUpgrade){
|
||||||
|
for (Enemy&e:enemies){
|
||||||
|
if (!e.isDead()){
|
||||||
|
if (vi2d{int(e.pos.x),int(e.pos.z)}==vi2d{x,y}){
|
||||||
|
FillCircle(vi2d{int(squareLoc.x+0.5*minimapGridSize.x),int(squareLoc.y+0.5*minimapGridSize.y)},3,enemyData[e.GetID()].col*(1-(float(dist)/MAP_VISIBILITY)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (std::out_of_range const& exc) {
|
||||||
|
std::cout << exc.what() << '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
float dist = std::sqrtf(std::pow(player.GetPos().x-exitCoords.x,2)+std::pow(player.GetPos().z-exitCoords.y,2));
|
||||||
|
if (tagsRemaining>0){
|
||||||
|
vf2d squareLoc = vf2d{exitCoords.x*minimapGridSize.x,exitCoords.y*minimapGridSize.y};
|
||||||
|
uint8_t transparency=uint8_t((1-(float(dist)/MAP_VISIBILITY))*255);
|
||||||
|
DrawLine(squareLoc,squareLoc+vf2d{1.f,0.f}*minimapGridSize,Pixel{DARK_RED.r,DARK_RED.g,DARK_RED.b,transparency});
|
||||||
|
DrawLine(squareLoc+vf2d{0,1.f}*minimapGridSize,squareLoc+vf2d{1,1}*minimapGridSize,Pixel{DARK_RED.r,DARK_RED.g,DARK_RED.b,transparency});
|
||||||
|
DrawLine(squareLoc+vf2d{1,0}*minimapGridSize,squareLoc+vf2d{1,1}*minimapGridSize,Pixel{DARK_RED.r,DARK_RED.g,DARK_RED.b,transparency});
|
||||||
|
DrawLine(squareLoc,squareLoc+vf2d{0,1}*minimapGridSize,Pixel{DARK_RED.r,DARK_RED.g,DARK_RED.b,transparency});
|
||||||
|
}
|
||||||
|
FillCircle(vi2d{int(exitCoords.x*minimapGridSize.x+0.5*minimapGridSize.x),int(exitCoords.y*minimapGridSize.x+0.5*minimapGridSize.y)},3,MAGENTA*(1-(float(dist)/MAP_VISIBILITY)));
|
||||||
|
SetDrawTarget(nullptr);
|
||||||
|
mapDecal->Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FaceBall::CheckCollision(vec3d movementVector,vf2d pos,float radius){
|
bool FaceBall::CheckCollision(vec3d movementVector,vf2d pos,float radius){
|
||||||
@ -850,23 +918,32 @@ void FaceBall::RenderBulletMesh(mat4x4& matView, std::vector<Triangle>& vecTrian
|
|||||||
void FaceBall::RenderMesh(mat4x4&matView,std::vector<Triangle>&vecTrianglesToRaster, Object&o,bool translucent) {
|
void FaceBall::RenderMesh(mat4x4&matView,std::vector<Triangle>&vecTrianglesToRaster, Object&o,bool translucent) {
|
||||||
for (auto& tri : o.mesh.tris) {
|
for (auto& tri : o.mesh.tris) {
|
||||||
if (translucent&&tri.tex != exit_wall_tex && tri.tex != bullet_tex ||!translucent&&(tri.tex==exit_wall_tex || tri.tex == bullet_tex)) { continue; }
|
if (translucent&&tri.tex != exit_wall_tex && tri.tex != bullet_tex ||!translucent&&(tri.tex==exit_wall_tex || tri.tex == bullet_tex)) { continue; }
|
||||||
Triangle triProjected, triTransformed, triViewed;
|
Triangle triScaled,triProjected, triTransformed, triViewed;
|
||||||
mat4x4 localMat = Matrix_MakeIdentity();
|
mat4x4 localMat = Matrix_MakeIdentity();
|
||||||
mat4x4 rotMat = Matrix_MakeRotationY(o.rot);
|
mat4x4 rotMat = Matrix_MakeRotationY(o.rot);
|
||||||
localMat = Matrix_MultiplyMatrix(localMat, rotMat);
|
localMat = Matrix_MultiplyMatrix(localMat, rotMat);
|
||||||
mat4x4 matTrans = Matrix_MakeTranslation(o.pos.x, o.pos.y, o.pos.z);
|
mat4x4 matTrans = Matrix_MakeTranslation(o.pos.x, o.pos.y, o.pos.z);
|
||||||
localMat = Matrix_MultiplyMatrix(localMat, matTrans);
|
localMat = Matrix_MultiplyMatrix(localMat, matTrans);
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
triScaled.p[i].x = tri.p[i].x*o.scale;
|
||||||
|
triScaled.p[i].y = tri.p[i].y * o.scale;
|
||||||
|
triScaled.p[i].z = tri.p[i].z * o.scale;
|
||||||
|
triScaled.uv[i] = tri.uv[i];
|
||||||
|
triScaled.col[i] = tri.col[i];
|
||||||
|
}
|
||||||
|
triScaled.tex = tri.tex;
|
||||||
|
|
||||||
triTransformed.p[0] = Matrix_MultiplyVector(localMat, tri.p[0]);
|
triTransformed.p[0] = Matrix_MultiplyVector(localMat, triScaled.p[0]);
|
||||||
triTransformed.p[1] = Matrix_MultiplyVector(localMat, tri.p[1]);
|
triTransformed.p[1] = Matrix_MultiplyVector(localMat, triScaled.p[1]);
|
||||||
triTransformed.p[2] = Matrix_MultiplyVector(localMat, tri.p[2]);
|
triTransformed.p[2] = Matrix_MultiplyVector(localMat, triScaled.p[2]);
|
||||||
triTransformed.uv[0] = tri.uv[0];
|
triTransformed.uv[0] = triScaled.uv[0];
|
||||||
triTransformed.uv[1] = tri.uv[1];
|
triTransformed.uv[1] = triScaled.uv[1];
|
||||||
triTransformed.uv[2] = tri.uv[2];
|
triTransformed.uv[2] = triScaled.uv[2];
|
||||||
triTransformed.col[0] = tri.col[0];
|
triTransformed.col[0] = triScaled.col[0];
|
||||||
triTransformed.col[1] = tri.col[1];
|
triTransformed.col[1] = triScaled.col[1];
|
||||||
triTransformed.col[2] = tri.col[2];
|
triTransformed.col[2] = triScaled.col[2];
|
||||||
triTransformed.tex = tri.tex;
|
triTransformed.tex = triScaled.tex;
|
||||||
|
|
||||||
vec3d normal, line1, line2;
|
vec3d normal, line1, line2;
|
||||||
line1 = Vector_Sub(triTransformed.p[1], triTransformed.p[0]);
|
line1 = Vector_Sub(triTransformed.p[1], triTransformed.p[0]);
|
||||||
@ -877,7 +954,7 @@ void FaceBall::RenderMesh(mat4x4&matView,std::vector<Triangle>&vecTrianglesToRas
|
|||||||
|
|
||||||
vec3d vCameraRay = Vector_Sub(triTransformed.p[0], freeRoam ? freeRoamCamera : player.GetPos());
|
vec3d vCameraRay = Vector_Sub(triTransformed.p[0], freeRoam ? freeRoamCamera : player.GetPos());
|
||||||
|
|
||||||
if (Vector_DotProduct(normal, vCameraRay) < 0) {
|
if (Vector_DotProduct(normal, vCameraRay) < 0||!o.affectedByLighting) {
|
||||||
vec3d light_dir = Vector_Mul(vLookDir, -1);
|
vec3d light_dir = Vector_Mul(vLookDir, -1);
|
||||||
light_dir = Vector_Normalise(light_dir);
|
light_dir = Vector_Normalise(light_dir);
|
||||||
|
|
||||||
@ -889,9 +966,11 @@ void FaceBall::RenderMesh(mat4x4&matView,std::vector<Triangle>&vecTrianglesToRas
|
|||||||
triViewed.uv[0] = triTransformed.uv[0];
|
triViewed.uv[0] = triTransformed.uv[0];
|
||||||
triViewed.uv[1] = triTransformed.uv[1];
|
triViewed.uv[1] = triTransformed.uv[1];
|
||||||
triViewed.uv[2] = triTransformed.uv[2];
|
triViewed.uv[2] = triTransformed.uv[2];
|
||||||
triViewed.col[0] = Pixel(triTransformed.col[0].r * dp * dp, triTransformed.col[0].g * dp * dp, triTransformed.col[0].b * dp * dp);
|
if (o.affectedByLighting) {
|
||||||
triViewed.col[1] = Pixel(triTransformed.col[1].r * dp * dp, triTransformed.col[1].g * dp * dp, triTransformed.col[1].b * dp * dp);
|
triViewed.col[0] = Pixel(triTransformed.col[0].r * dp * dp, triTransformed.col[0].g * dp * dp, triTransformed.col[0].b * dp * dp);
|
||||||
triViewed.col[2] = Pixel(triTransformed.col[2].r * dp * dp, triTransformed.col[2].g * dp * dp, triTransformed.col[2].b * dp * dp);
|
triViewed.col[1] = Pixel(triTransformed.col[1].r * dp * dp, triTransformed.col[1].g * dp * dp, triTransformed.col[1].b * dp * dp);
|
||||||
|
triViewed.col[2] = Pixel(triTransformed.col[2].r * dp * dp, triTransformed.col[2].g * dp * dp, triTransformed.col[2].b * dp * dp);
|
||||||
|
}
|
||||||
Pixel originalCol[3] = { triViewed.col[0],triViewed.col[1],triViewed.col[2] };
|
Pixel originalCol[3] = { triViewed.col[0],triViewed.col[1],triViewed.col[2] };
|
||||||
float dist = std::sqrtf(std::powf((freeRoam ? freeRoamCamera : player.GetPos()).x - triTransformed.p[0].x, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).y - triTransformed.p[0].y, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).z - triTransformed.p[0].z, 2));
|
float dist = std::sqrtf(std::powf((freeRoam ? freeRoamCamera : player.GetPos()).x - triTransformed.p[0].x, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).y - triTransformed.p[0].y, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).z - triTransformed.p[0].z, 2));
|
||||||
float dist2 = std::sqrtf(std::powf((freeRoam ? freeRoamCamera : player.GetPos()).x - triTransformed.p[1].x, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).y - triTransformed.p[1].y, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).z - triTransformed.p[1].z, 2));
|
float dist2 = std::sqrtf(std::powf((freeRoam ? freeRoamCamera : player.GetPos()).x - triTransformed.p[1].x, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).y - triTransformed.p[1].y, 2) + std::powf((freeRoam ? freeRoamCamera : player.GetPos()).z - triTransformed.p[1].z, 2));
|
||||||
@ -899,22 +978,31 @@ void FaceBall::RenderMesh(mat4x4&matView,std::vector<Triangle>&vecTrianglesToRas
|
|||||||
float colorMult = dist > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist + PI / 2);
|
float colorMult = dist > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist + PI / 2);
|
||||||
float colorMult2 = dist2 > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist2 + PI / 2);
|
float colorMult2 = dist2 > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist2 + PI / 2);
|
||||||
float colorMult3 = dist3 > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist3 + PI / 2);
|
float colorMult3 = dist3 > 5 * PI / 3 ? 0 : std::sinf(0.3 * dist3 + PI / 2);
|
||||||
triViewed.col[0] = Pixel(triViewed.col[0].r * colorMult, triViewed.col[0].g * colorMult, triViewed.col[0].b * colorMult);
|
if (o.affectedByLighting) {
|
||||||
triViewed.col[1] = Pixel(triViewed.col[1].r * colorMult2, triViewed.col[1].g * colorMult2, triViewed.col[1].b * colorMult2);
|
triViewed.col[0] = Pixel(triViewed.col[0].r * colorMult, triViewed.col[0].g * colorMult, triViewed.col[0].b * colorMult);
|
||||||
triViewed.col[2] = Pixel(triViewed.col[2].r * colorMult3, triViewed.col[2].g * colorMult3, triViewed.col[2].b * colorMult3);
|
triViewed.col[1] = Pixel(triViewed.col[1].r * colorMult2, triViewed.col[1].g * colorMult2, triViewed.col[1].b * colorMult2);
|
||||||
|
triViewed.col[2] = Pixel(triViewed.col[2].r * colorMult3, triViewed.col[2].g * colorMult3, triViewed.col[2].b * colorMult3);
|
||||||
|
}
|
||||||
|
if (!o.affectedByLighting) {
|
||||||
|
triViewed.col[0] = originalCol[0];
|
||||||
|
triViewed.col[1] = originalCol[1];
|
||||||
|
triViewed.col[2] = originalCol[2];
|
||||||
|
}
|
||||||
triViewed.tex = triTransformed.tex;
|
triViewed.tex = triTransformed.tex;
|
||||||
|
|
||||||
for (Bullet& b : bullets) {
|
if (o.affectedByLighting) {
|
||||||
float dist = std::sqrtf(std::powf(b.pos.x - triTransformed.p[0].x, 2) + std::powf(b.pos.y - triTransformed.p[0].y, 2) + std::powf(b.pos.z - triTransformed.p[0].z, 2));
|
for (Bullet& b : bullets) {
|
||||||
float dist2 = std::sqrtf(std::powf(b.pos.x - triTransformed.p[1].x, 2) + std::powf(b.pos.y - triTransformed.p[1].y, 2) + std::powf(b.pos.z - triTransformed.p[1].z, 2));
|
float dist = std::sqrtf(std::powf(b.pos.x - triTransformed.p[0].x, 2) + std::powf(b.pos.y - triTransformed.p[0].y, 2) + std::powf(b.pos.z - triTransformed.p[0].z, 2));
|
||||||
float dist3 = std::sqrtf(std::powf(b.pos.x - triTransformed.p[2].x, 2) + std::powf(b.pos.y - triTransformed.p[2].y, 2) + std::powf(b.pos.z - triTransformed.p[2].z, 2));
|
float dist2 = std::sqrtf(std::powf(b.pos.x - triTransformed.p[1].x, 2) + std::powf(b.pos.y - triTransformed.p[1].y, 2) + std::powf(b.pos.z - triTransformed.p[1].z, 2));
|
||||||
float colorMult = (dist < 2 ? std::sinf(0.75 * dist + PI / 2) * 4 :1);
|
float dist3 = std::sqrtf(std::powf(b.pos.x - triTransformed.p[2].x, 2) + std::powf(b.pos.y - triTransformed.p[2].y, 2) + std::powf(b.pos.z - triTransformed.p[2].z, 2));
|
||||||
float colorMult2 = (dist2 < 2 ? std::sinf(0.75 * dist2 + PI / 2) * 4 : 1);
|
float colorMult = (dist < 2 ? std::sinf(0.75 * dist + PI / 2) * 4 : 1);
|
||||||
float colorMult3 = (dist3 < 2 ? std::sinf(0.75 * dist3 + PI / 2) * 4 : 1);
|
float colorMult2 = (dist2 < 2 ? std::sinf(0.75 * dist2 + PI / 2) * 4 : 1);
|
||||||
Pixel lightCol = b.col / 2 + Pixel{ 128, 128, 128 };
|
float colorMult3 = (dist3 < 2 ? std::sinf(0.75 * dist3 + PI / 2) * 4 : 1);
|
||||||
if (dist < 2) {triViewed.col[0] = Pixel(std::min(255, std::max((int)originalCol[0].r, (int)(originalCol[0].r * colorMult / float(255.f/lightCol.r)))), std::min(255, std::max((int)originalCol[0].g, (int)(originalCol[0].g * colorMult / float(255.f / lightCol.g)))), std::min(255, std::max((int)originalCol[0].b, (int)(originalCol[0].b * colorMult / float(255.f / lightCol.b)))));}
|
Pixel lightCol = b.col / 2 + Pixel{ 128, 128, 128 };
|
||||||
if (dist2 < 2) {triViewed.col[1] = Pixel(std::min(255, std::max((int)originalCol[1].r, (int)(originalCol[1].r * colorMult2 / float(255.f / lightCol.r)))), std::min(255, std::max((int)originalCol[1].g, (int)(originalCol[1].g * colorMult2 / float(255.f / lightCol.g)))), std::min(255, std::max((int)originalCol[1].b, (int)(originalCol[1].b * colorMult2 / float(255.f / lightCol.b)))));}
|
if (dist < 2) { triViewed.col[0] = Pixel(std::min(255, std::max((int)originalCol[0].r, (int)(originalCol[0].r * colorMult / float(255.f / lightCol.r)))), std::min(255, std::max((int)originalCol[0].g, (int)(originalCol[0].g * colorMult / float(255.f / lightCol.g)))), std::min(255, std::max((int)originalCol[0].b, (int)(originalCol[0].b * colorMult / float(255.f / lightCol.b))))); }
|
||||||
if (dist3 < 2) {triViewed.col[2] = Pixel(std::min(255, std::max((int)originalCol[2].r, (int)(originalCol[2].r * colorMult3 / float(255.f / lightCol.r)))), std::min(255, std::max((int)originalCol[2].g, (int)(originalCol[2].g * colorMult3 / float(255.f / lightCol.g)))), std::min(255, std::max((int)originalCol[2].b, (int)(originalCol[2].b * colorMult3 / float(255.f / lightCol.b)))));}
|
if (dist2 < 2) { triViewed.col[1] = Pixel(std::min(255, std::max((int)originalCol[1].r, (int)(originalCol[1].r * colorMult2 / float(255.f / lightCol.r)))), std::min(255, std::max((int)originalCol[1].g, (int)(originalCol[1].g * colorMult2 / float(255.f / lightCol.g)))), std::min(255, std::max((int)originalCol[1].b, (int)(originalCol[1].b * colorMult2 / float(255.f / lightCol.b))))); }
|
||||||
|
if (dist3 < 2) { triViewed.col[2] = Pixel(std::min(255, std::max((int)originalCol[2].r, (int)(originalCol[2].r * colorMult3 / float(255.f / lightCol.r)))), std::min(255, std::max((int)originalCol[2].g, (int)(originalCol[2].g * colorMult3 / float(255.f / lightCol.g)))), std::min(255, std::max((int)originalCol[2].b, (int)(originalCol[2].b * colorMult3 / float(255.f / lightCol.b))))); }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//triViewed.col = triTransformed.col;
|
//triViewed.col = triTransformed.col;
|
||||||
|
|
||||||
@ -1443,6 +1531,16 @@ void FaceBall::RenderWorld() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FaceBall::PlayerActiveShotCount(int playerNumb){
|
||||||
|
int count=0;
|
||||||
|
for (Bullet&b:bullets){
|
||||||
|
if (b.playerIndex==playerNumb){
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
void FaceBall::HandleKeys(float fElapsedTime) {
|
void FaceBall::HandleKeys(float fElapsedTime) {
|
||||||
vec3d vForward = Vector_Mul(vLookDir, std::min(player.GetRadius()-0.00001f,moveSpd*fElapsedTime));
|
vec3d vForward = Vector_Mul(vLookDir, std::min(player.GetRadius()-0.00001f,moveSpd*fElapsedTime));
|
||||||
if (freeRoam) {
|
if (freeRoam) {
|
||||||
@ -1456,8 +1554,10 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
|||||||
else {
|
else {
|
||||||
pitch = 0;
|
pitch = 0;
|
||||||
if (GetMouse(0).bPressed) {
|
if (GetMouse(0).bPressed) {
|
||||||
if (bullets.size() < shotLimit) {
|
if (PlayerActiveShotCount(0) < shotLimit) {
|
||||||
bullets.push_back({ bullet,{player.GetPos().x,player.GetPos().y - 0.15f, player.GetPos().z},fYaw,0.125f,{shotSpd * std::cosf(fYaw),shotSpd * std::sinf(fYaw)},GREEN,true });
|
Bullet newBullet={ bullet,{player.GetPos().x,player.GetPos().y - 0.15f, player.GetPos().z},fYaw,0.125f,1,true,{shotSpd * std::cosf(fYaw),shotSpd * std::sinf(fYaw)},GREEN,true };
|
||||||
|
newBullet.playerIndex=0;
|
||||||
|
bullets.push_back(newBullet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1638,6 +1738,10 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
|||||||
if (GetKey(olc::F1).bPressed) {
|
if (GetKey(olc::F1).bPressed) {
|
||||||
freeRoam = !freeRoam;
|
freeRoam = !freeRoam;
|
||||||
}
|
}
|
||||||
|
if (vi2d{int(player.GetPos().x),int(player.GetPos().z)}!=playerRoundedCoords){
|
||||||
|
playerRoundedCoords = vi2d{int(player.GetPos().x),int(player.GetPos().z)};
|
||||||
|
RegenerateMinimap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FaceBall::AddWall(int dir, vi2d gridSquare) {
|
void FaceBall::AddWall(int dir, vi2d gridSquare) {
|
||||||
@ -1685,6 +1789,7 @@ bool FaceBall::OnUserCreate()
|
|||||||
exit_wall_tex = new Decal(new Sprite("assets/exitwall.png"));
|
exit_wall_tex = new Decal(new Sprite("assets/exitwall.png"));
|
||||||
enemy_ShootMe2_tex = new Decal(new Sprite("assets/enemies/ShootMe2.png"));
|
enemy_ShootMe2_tex = new Decal(new Sprite("assets/enemies/ShootMe2.png"));
|
||||||
enemy_IShoot_tex = new Decal(new Sprite("assets/enemies/IShoot.png"));
|
enemy_IShoot_tex = new Decal(new Sprite("assets/enemies/IShoot.png"));
|
||||||
|
enemy_IShoot2_tex = new Decal(new Sprite("assets/enemies/IShoot2.png"));
|
||||||
life4 = new Decal(new Sprite("assets/life4.png"));
|
life4 = new Decal(new Sprite("assets/life4.png"));
|
||||||
life3 = new Decal(new Sprite("assets/life3.png"));
|
life3 = new Decal(new Sprite("assets/life3.png"));
|
||||||
life2 = new Decal(new Sprite("assets/life2.png"));
|
life2 = new Decal(new Sprite("assets/life2.png"));
|
||||||
@ -1694,22 +1799,28 @@ bool FaceBall::OnUserCreate()
|
|||||||
powerup_tex = new Decal(new Sprite("assets/powerup.png"));
|
powerup_tex = new Decal(new Sprite("assets/powerup.png"));
|
||||||
powerup2_tex = new Decal(new Sprite("assets/powerup2.png"));
|
powerup2_tex = new Decal(new Sprite("assets/powerup2.png"));
|
||||||
powerups_tex = new Decal(new Sprite("assets/powerups.png"));
|
powerups_tex = new Decal(new Sprite("assets/powerups.png"));
|
||||||
|
worldSkyBox_tex = new Decal(new Sprite("assets/worldSkyBox.png"));
|
||||||
|
|
||||||
enemy_ShootMe = { "assets/enemies/ShootMe.obj", enemy_ShootMe_tex };
|
enemy_ShootMe = { "assets/enemies/ShootMe.obj", enemy_ShootMe_tex };
|
||||||
enemy_ShootMe2 = { "assets/enemies/ShootMe2.obj", enemy_ShootMe2_tex };
|
enemy_ShootMe2 = { "assets/enemies/ShootMe2.obj", enemy_ShootMe2_tex };
|
||||||
enemy_Sonar = { "assets/enemies/Sonar.obj", enemy_Sonar_tex };
|
enemy_Sonar = { "assets/enemies/Sonar.obj", enemy_Sonar_tex };
|
||||||
enemy_IShoot = { "assets/enemies/IShoot.obj", enemy_IShoot_tex};
|
enemy_IShoot = { "assets/enemies/IShoot.obj", enemy_IShoot_tex};
|
||||||
|
enemy_IShoot2 = { "assets/enemies/IShoot2.obj", enemy_IShoot2_tex};
|
||||||
bullet = { "assets/enemies/bullet.obj",bullet_tex };
|
bullet = { "assets/enemies/bullet.obj",bullet_tex };
|
||||||
powerup = { "assets/Powerup.obj",powerup_tex};
|
powerup = { "assets/Powerup.obj",powerup_tex};
|
||||||
powerup2 = { "assets/Powerup2.obj",powerup2_tex };
|
powerup2 = { "assets/Powerup2.obj",powerup2_tex };
|
||||||
mapExit = { "assets/Exit.obj",dot };
|
mapExit = { "assets/Exit.obj",dot };
|
||||||
|
worldSkyBox = { "assets/worldSkyBox.obj",worldSkyBox_tex };
|
||||||
mapWalls.texture = wall_tex;
|
mapWalls.texture = wall_tex;
|
||||||
mapFloor.texture = floor_tex;
|
mapFloor.texture = floor_tex;
|
||||||
|
|
||||||
|
mapSpr=new Sprite(minimapGridSize.x*20,minimapGridSize.y*20);
|
||||||
|
mapDecal=new Decal(mapSpr);
|
||||||
|
|
||||||
InitializeEnemyData();
|
InitializeEnemyData();
|
||||||
InitializePowerupColors();
|
InitializePowerupColors();
|
||||||
|
|
||||||
LoadLevel(1);
|
LoadLevel(level);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1812,20 +1923,23 @@ bool Bullet::Update(float fElapsedTime) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FaceBall::HurtPlayer(EnemyID id,int damage,bool blinking) {
|
void FaceBall::HurtPlayer(EnemyID id,int damage,bool blinking) {
|
||||||
if (shieldDuration >= 0) {
|
if (respawnTimer<=0.0f){
|
||||||
damage = 0;
|
if (shieldDuration >= 0) {
|
||||||
}
|
damage = 0;
|
||||||
hp = std::max(0, hp - damage);
|
}
|
||||||
if (hp <= 0) {
|
hp = std::max(0, hp - damage);
|
||||||
respawnTimer = 3.0f;
|
if (hp <= 0) {
|
||||||
}
|
RegenerateMinimap();
|
||||||
lastHitBy = id;
|
respawnTimer = 3.0f;
|
||||||
lastHitByBlinking = blinking;
|
}
|
||||||
if (shieldDuration < 0) {
|
lastHitBy = id;
|
||||||
screenCol = enemyData[lastHitBy].col;
|
lastHitByBlinking = blinking;
|
||||||
}
|
if (shieldDuration < 0) {
|
||||||
else {
|
screenCol = enemyData[lastHitBy].col;
|
||||||
screenCol = WHITE;
|
}
|
||||||
|
else {
|
||||||
|
screenCol = WHITE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1948,6 +2062,7 @@ void FaceBall::RenderHud(float fElapsedTime) {
|
|||||||
hudShakeAmt = std::sinf(40 * hudShakeTime);
|
hudShakeAmt = std::sinf(40 * hudShakeTime);
|
||||||
hudAdjustment.x += hudShakeAmt * 2;
|
hudAdjustment.x += hudShakeAmt * 2;
|
||||||
hudAdjustment.y += hudShakeAmt * 4;
|
hudAdjustment.y += hudShakeAmt * 4;
|
||||||
|
hudOffset += hudShakeAmt * 2;
|
||||||
}
|
}
|
||||||
vf2d hudLoc = { hudAdjustment.x + (hp>0?hudOffset:0),hudAdjustment.y};
|
vf2d hudLoc = { hudAdjustment.x + (hp>0?hudOffset:0),hudAdjustment.y};
|
||||||
if (hp > 0) {
|
if (hp > 0) {
|
||||||
@ -1969,7 +2084,12 @@ void FaceBall::RenderHud(float fElapsedTime) {
|
|||||||
for (int x = -1; x <= 1; x++) {
|
for (int x = -1; x <= 1; x++) {
|
||||||
for (int y = -1; y <= 1; y++) {
|
for (int y = -1; y <= 1; y++) {
|
||||||
if (x != 0 && y != 0) {
|
if (x != 0 && y != 0) {
|
||||||
DrawStringDecal(vf2d{ hudOffset + float(ScreenWidth() / 2 - GetTextSize(hudDisplayText).x / 2 * 4) + 32,float(ScreenHeight() - 128 - GetTextSize(hudDisplayText).y * 4) + 18 } + vf2d{ float(x),float(y) }, hudDisplayText, DARK_BLUE, { 4,4 });
|
if (lookingAtText != "") {
|
||||||
|
DrawStringDecal(vf2d{ hudOffset + float(ScreenWidth() / 2 - GetTextSize(lookingAtText).x / 2 * 4) + 32,float(ScreenHeight() - 128 - GetTextSize(lookingAtText).y * 4) + 18 } + vf2d{ float(x),float(y) }, lookingAtText, DARK_BLUE, { 4,4 });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DrawStringDecal(vf2d{ hudOffset + float(ScreenWidth() / 2 - GetTextSize(hudDisplayText).x / 2 * 4) + 32,float(ScreenHeight() - 128 - GetTextSize(hudDisplayText).y * 4) + 18 } + vf2d{ float(x),float(y) }, hudDisplayText, DARK_BLUE, { 4,4 });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1981,7 +2101,12 @@ void FaceBall::RenderHud(float fElapsedTime) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
DrawStringPropDecal(vf2d{ hudOffset + (float)(ScreenWidth() / 2 - GetTextSizeProp(std::to_string(score)).x * 4 / 2) + 32,(float)(36 - GetTextSizeProp(std::to_string(score)).y * 4) + 18 } + hudAdjustment, std::to_string(score), { 192,96,96 }, { 4,4 });
|
DrawStringPropDecal(vf2d{ hudOffset + (float)(ScreenWidth() / 2 - GetTextSizeProp(std::to_string(score)).x * 4 / 2) + 32,(float)(36 - GetTextSizeProp(std::to_string(score)).y * 4) + 18 } + hudAdjustment, std::to_string(score), { 192,96,96 }, { 4,4 });
|
||||||
DrawStringDecal(vf2d{ hudOffset + float(ScreenWidth() / 2 - GetTextSize(hudDisplayText).x / 2 * 4) + 32,float(ScreenHeight() - 128 - GetTextSize(hudDisplayText).y * 4) + 18 }, hudDisplayText, { 192,192,255 }, { 4,4 });
|
if (lookingAtText != "") {
|
||||||
|
DrawStringDecal(vf2d{ hudOffset + float(ScreenWidth() / 2 - GetTextSize(lookingAtText).x / 2 * 4) + 32,float(ScreenHeight() - 128 - GetTextSize(lookingAtText).y * 4) + 18 }, lookingAtText, { 192,192,255 }, { 4,4 });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DrawStringDecal(vf2d{ hudOffset + float(ScreenWidth() / 2 - GetTextSize(hudDisplayText).x / 2 * 4) + 32,float(ScreenHeight() - 128 - GetTextSize(hudDisplayText).y * 4) + 18 }, hudDisplayText, { 192,192,255 }, { 4,4 });
|
||||||
|
}
|
||||||
DrawStringDecal({float(ScreenWidth()-128),24},std::to_string(wave2Enemies.size()));
|
DrawStringDecal({float(ScreenWidth()-128),24},std::to_string(wave2Enemies.size()));
|
||||||
SetDecalMode(DecalMode::ADDITIVE);
|
SetDecalMode(DecalMode::ADDITIVE);
|
||||||
DrawDecal({ float(ScreenWidth() / 2 - crosshair->sprite->width / 2),float(ScreenHeight() / 2 - crosshair->sprite->height / 2) }, crosshair, { 1,1 }, {255,255,255,128});
|
DrawDecal({ float(ScreenWidth() / 2 - crosshair->sprite->width / 2),float(ScreenHeight() / 2 - crosshair->sprite->height / 2) }, crosshair, { 1,1 }, {255,255,255,128});
|
||||||
@ -1994,6 +2119,10 @@ void FaceBall::RenderHud(float fElapsedTime) {
|
|||||||
if (camoDuration > 0) {
|
if (camoDuration > 0) {
|
||||||
DrawPartialDecal({ hudOffset + float(ScreenWidth() / 10 - 16), float(ScreenHeight() / 4 + ScreenHeight() / 4 * 2 - 16 * 4) }, vf2d{ 32,32 }*4, powerups_tex, { 5 * 32,0 }, { 32,32 },camoDuration>7?WHITE:camoDuration>2?std::abs(std::sin(10*camoDuration))>0.65?WHITE:BLACK: std::abs(std::sin(30 * camoDuration)) > 0.75 ? WHITE : BLACK);
|
DrawPartialDecal({ hudOffset + float(ScreenWidth() / 10 - 16), float(ScreenHeight() / 4 + ScreenHeight() / 4 * 2 - 16 * 4) }, vf2d{ 32,32 }*4, powerups_tex, { 5 * 32,0 }, { 32,32 },camoDuration>7?WHITE:camoDuration>2?std::abs(std::sin(10*camoDuration))>0.65?WHITE:BLACK: std::abs(std::sin(30 * camoDuration)) > 0.75 ? WHITE : BLACK);
|
||||||
}
|
}
|
||||||
|
vf2d mapCenter = {float(ScreenWidth()-364),float(164)};
|
||||||
|
SetDrawTarget(nullptr);
|
||||||
|
DrawDecal(vf2d{mapCenter.x+hudOffset/2,mapCenter.y}-vf2d{2.5f,2.5f},dot,{5,5},GREEN);
|
||||||
|
DrawRotatedDecal({mapCenter.x+hudOffset/2,mapCenter.y},mapDecal,-fYaw-PI/2,vf2d{int(player.GetPos().x)+0.5f,int(player.GetPos().z)+0.5f}*minimapGridSize,{1,1});
|
||||||
SetDecalMode(DecalMode::NORMAL);
|
SetDecalMode(DecalMode::NORMAL);
|
||||||
}
|
}
|
||||||
GradientFillRectDecal({ 0,0 }, vf2d{ (float)ScreenWidth()/2,(float)ScreenHeight()/2 }, { (uint8_t)screenCol.r,(uint8_t)screenCol.g,(uint8_t)screenCol.b,(uint8_t)(hudShakeTime>0.2f?120:hudShakeTime>0?64:0) }, { (uint8_t)screenCol.r,(uint8_t)screenCol.g,(uint8_t)screenCol.b,(uint8_t)(hudShakeTime>0.2f?120:hudShakeTime>0?64:0) }, { (uint8_t)screenCol.r,(uint8_t)screenCol.g,(uint8_t)screenCol.b,(uint8_t)(hudShakeTime > 0.2f ? 64 : 0) }, { (uint8_t)screenCol.r,(uint8_t)screenCol.g,(uint8_t)screenCol.b,(uint8_t)(hudShakeTime>0.2f?120:hudShakeTime>0?64:0) });
|
GradientFillRectDecal({ 0,0 }, vf2d{ (float)ScreenWidth()/2,(float)ScreenHeight()/2 }, { (uint8_t)screenCol.r,(uint8_t)screenCol.g,(uint8_t)screenCol.b,(uint8_t)(hudShakeTime>0.2f?120:hudShakeTime>0?64:0) }, { (uint8_t)screenCol.r,(uint8_t)screenCol.g,(uint8_t)screenCol.b,(uint8_t)(hudShakeTime>0.2f?120:hudShakeTime>0?64:0) }, { (uint8_t)screenCol.r,(uint8_t)screenCol.g,(uint8_t)screenCol.b,(uint8_t)(hudShakeTime > 0.2f ? 64 : 0) }, { (uint8_t)screenCol.r,(uint8_t)screenCol.g,(uint8_t)screenCol.b,(uint8_t)(hudShakeTime>0.2f?120:hudShakeTime>0?64:0) });
|
||||||
@ -2118,14 +2247,15 @@ void FaceBall::RunEnemyAI(Enemy& e,float fElapsedTime,int myIndex) {
|
|||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case ISHOOT:
|
case ISHOOT:
|
||||||
case ISHOOT_MAP: {
|
case ISHOOT_MAP: {
|
||||||
e.rot += dat.rotSpd * fElapsedTime;
|
e.rot += dat.rotSpd * fElapsedTime;
|
||||||
if (e.CanShoot()) {
|
if (e.CanShoot()) {
|
||||||
e.ShootBullet(myIndex);
|
e.ShootBullet(myIndex);
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case ISHOOT2: {
|
case ISHOOT2:
|
||||||
|
case ISHOOT2_SPEED:{
|
||||||
switch (e.GetPhase()) {
|
switch (e.GetPhase()) {
|
||||||
case Phase::DEFAULT: {
|
case Phase::DEFAULT: {
|
||||||
vf2d movementVec = { std::cosf(e.rot) * dat.movSpd * fElapsedTime,std::sinf(e.rot) * dat.movSpd * fElapsedTime };
|
vf2d movementVec = { std::cosf(e.rot) * dat.movSpd * fElapsedTime,std::sinf(e.rot) * dat.movSpd * fElapsedTime };
|
||||||
@ -2162,12 +2292,22 @@ void FaceBall::RunEnemyAI(Enemy& e,float fElapsedTime,int myIndex) {
|
|||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
|
if (e.roundedCoords!=vi2d{int(e.pos.x),int(e.pos.z)}){
|
||||||
|
e.roundedCoords=vi2d{int(e.pos.x),int(e.pos.z)};
|
||||||
|
if (hasMapUpgrade){
|
||||||
|
RegenerateMinimap();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FaceBall::PlayerHasMapUpgrade(){
|
||||||
|
return hasMapUpgrade;
|
||||||
|
}
|
||||||
|
|
||||||
bool FaceBall::OnUserUpdate(float fElapsedTime)
|
bool FaceBall::OnUserUpdate(float fElapsedTime)
|
||||||
{
|
{
|
||||||
fElapsedTime = std::min(0.01667f, fElapsedTime);
|
fElapsedTime = std::min(2/60.f, fElapsedTime);
|
||||||
gameTimer += fElapsedTime;
|
gameTimer += fElapsedTime;
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case GAME: {
|
case GAME: {
|
||||||
@ -2191,6 +2331,7 @@ bool FaceBall::OnUserUpdate(float fElapsedTime)
|
|||||||
!CheckPlayerCollision({0,0,0},{e.pos.x,e.pos.z},e.radius*6)){
|
!CheckPlayerCollision({0,0,0},{e.pos.x,e.pos.z},e.radius*6)){
|
||||||
enemies.push_back(e);
|
enemies.push_back(e);
|
||||||
wave2Enemies.erase(wave2Enemies.begin()+i);
|
wave2Enemies.erase(wave2Enemies.begin()+i);
|
||||||
|
RegenerateMinimap();
|
||||||
goto spawningDone;
|
goto spawningDone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2202,6 +2343,7 @@ bool FaceBall::OnUserUpdate(float fElapsedTime)
|
|||||||
!CheckPlayerCollision({0,0,0},{e.pos.x,e.pos.z},e.radius*6)){
|
!CheckPlayerCollision({0,0,0},{e.pos.x,e.pos.z},e.radius*6)){
|
||||||
enemies.push_back(e);
|
enemies.push_back(e);
|
||||||
wave3Enemies.erase(wave3Enemies.begin()+i);
|
wave3Enemies.erase(wave3Enemies.begin()+i);
|
||||||
|
RegenerateMinimap();
|
||||||
goto spawningDone;
|
goto spawningDone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2217,6 +2359,7 @@ bool FaceBall::OnUserUpdate(float fElapsedTime)
|
|||||||
!CheckPlayerCollision({0,0,0},{e.pos.x,e.pos.z},e.radius*6)){
|
!CheckPlayerCollision({0,0,0},{e.pos.x,e.pos.z},e.radius*6)){
|
||||||
enemies.push_back(e);
|
enemies.push_back(e);
|
||||||
wave2Enemies.erase(wave2Enemies.begin()+i);
|
wave2Enemies.erase(wave2Enemies.begin()+i);
|
||||||
|
RegenerateMinimap();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2231,14 +2374,21 @@ bool FaceBall::OnUserUpdate(float fElapsedTime)
|
|||||||
it++;
|
it++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = 0; i < enemies.size(); i++) {
|
int counter = 0;
|
||||||
Enemy& e = enemies[i];
|
for (std::vector<Enemy>::iterator it = enemies.begin(); it != enemies.end();) {
|
||||||
e.Update(fElapsedTime);
|
Enemy& e = *it;
|
||||||
if (e.isLastHitTimerActive()) {
|
if (!e.Update(fElapsedTime)) {
|
||||||
e.reduceLastHitTimer(fElapsedTime);
|
it = enemies.erase(it);
|
||||||
}
|
}
|
||||||
if (stopDuration < 0) {
|
else {
|
||||||
RunEnemyAI(e, fElapsedTime, i);
|
if (e.isLastHitTimerActive()) {
|
||||||
|
e.reduceLastHitTimer(fElapsedTime);
|
||||||
|
}
|
||||||
|
if (stopDuration < 0) {
|
||||||
|
RunEnemyAI(e, fElapsedTime, counter);
|
||||||
|
}
|
||||||
|
it++;
|
||||||
|
counter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (std::vector<Powerup>::iterator it = powerups.begin(); it != powerups.end();) {
|
for (std::vector<Powerup>::iterator it = powerups.begin(); it != powerups.end();) {
|
||||||
@ -2283,6 +2433,7 @@ bool FaceBall::OnUserUpdate(float fElapsedTime)
|
|||||||
}break;
|
}break;
|
||||||
case PowerupType::MAP: {
|
case PowerupType::MAP: {
|
||||||
hasMapUpgrade = true;
|
hasMapUpgrade = true;
|
||||||
|
RegenerateMinimap();
|
||||||
}break;
|
}break;
|
||||||
case PowerupType::COIN: {
|
case PowerupType::COIN: {
|
||||||
AddScore(1000);
|
AddScore(1000);
|
||||||
@ -2294,6 +2445,25 @@ bool FaceBall::OnUserUpdate(float fElapsedTime)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hp > 0) {
|
if (hp > 0) {
|
||||||
|
vf2d checkPos = {player.GetPos().x, player.GetPos().z};
|
||||||
|
lookingAtText = "";
|
||||||
|
while (true) {
|
||||||
|
if (checkPos.x<0 || checkPos.y<0 || checkPos.x>MAP_SIZE.x || checkPos.y>MAP_SIZE.y) break;
|
||||||
|
vf2d checkVec = { std::cosf(fYaw) * 0.1f,std::sinf(fYaw) * 0.1f };
|
||||||
|
if (CheckCollision({ checkVec.x,0,checkVec.y }, checkPos, 0.05f)) break;
|
||||||
|
checkPos.x += checkVec.x;
|
||||||
|
checkPos.y += checkVec.y;
|
||||||
|
for (Enemy&e : enemies) {
|
||||||
|
if (!e.isDead()) {
|
||||||
|
float dist = std::sqrtf(std::powf(checkPos.x - e.pos.x, 2) + std::powf(checkPos.y - e.pos.z, 2));
|
||||||
|
if (dist <= e.radius*2) {
|
||||||
|
lookingAtText = enemyData[e.GetID()].name;
|
||||||
|
goto afterPositionCheck;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
afterPositionCheck:
|
||||||
HandleKeys(fElapsedTime);
|
HandleKeys(fElapsedTime);
|
||||||
RenderWorld();
|
RenderWorld();
|
||||||
}
|
}
|
||||||
@ -2408,7 +2578,7 @@ int FaceBall::EnemiesAlive(){
|
|||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
FaceBall demo;
|
FaceBall demo;
|
||||||
if (demo.Construct(1280, 720, 2, 2))
|
if (demo.Construct(1280, 720, 2, 2, false, true))
|
||||||
demo.Start();
|
demo.Start();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -144,6 +144,8 @@ struct Object {
|
|||||||
vec3d pos = { 0,0 };
|
vec3d pos = { 0,0 };
|
||||||
float rot = 0;
|
float rot = 0;
|
||||||
float radius = 0.2f;
|
float radius = 0.2f;
|
||||||
|
float scale = 1.f;
|
||||||
|
bool affectedByLighting = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Bullet : Object{
|
struct Bullet : Object{
|
||||||
@ -153,6 +155,7 @@ struct Bullet : Object{
|
|||||||
EnemyID shooterID;
|
EnemyID shooterID;
|
||||||
int shooterIndex = -1;
|
int shooterIndex = -1;
|
||||||
bool shooterBlinking = false;
|
bool shooterBlinking = false;
|
||||||
|
int playerIndex = -1;
|
||||||
bool Update(float fElapsedTime);
|
bool Update(float fElapsedTime);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -214,6 +217,7 @@ struct Enemy : public Object {
|
|||||||
bool flippedTriangles = false;
|
bool flippedTriangles = false;
|
||||||
bool finishedAnimation = false;
|
bool finishedAnimation = false;
|
||||||
float blinkingAmt = 1; //>0.5 the enemy is visible.
|
float blinkingAmt = 1; //>0.5 the enemy is visible.
|
||||||
|
vi2d roundedCoords = vi2d{int(pos.x),int(pos.z)};
|
||||||
Enemy(EnemyID id, vec3d pos, float rot, float radius);
|
Enemy(EnemyID id, vec3d pos, float rot, float radius);
|
||||||
EnemyID GetID();
|
EnemyID GetID();
|
||||||
//Can set the damage to 0 to cause just a visual hit.
|
//Can set the damage to 0 to cause just a visual hit.
|
||||||
@ -261,12 +265,17 @@ class FaceBall : public PixelGameEngine
|
|||||||
private:
|
private:
|
||||||
Mesh mapWalls,mapFloor,enemy_ShootMe,undefined,
|
Mesh mapWalls,mapFloor,enemy_ShootMe,undefined,
|
||||||
enemy_Sonar, mapExit,enemy_ShootMe2,powerup,powerup2,
|
enemy_Sonar, mapExit,enemy_ShootMe2,powerup,powerup2,
|
||||||
enemy_IShoot;
|
enemy_IShoot,enemy_IShoot2,worldSkyBox;
|
||||||
|
|
||||||
|
Sprite*mapSpr;
|
||||||
|
Decal*mapDecal;
|
||||||
|
|
||||||
|
vf2d minimapGridSize={16,16};
|
||||||
|
|
||||||
Decal* dot, * enemy_ShootMe_tex,*bullet_tex,*wall_tex,*floor_tex,
|
Decal* dot, * enemy_ShootMe_tex,*bullet_tex,*wall_tex,*floor_tex,
|
||||||
*enemy_Sonar_tex,*hud,*exit_wall_tex,*enemy_ShootMe2_tex,*enemy_IShoot_tex,
|
*enemy_Sonar_tex,*hud,*exit_wall_tex,*enemy_ShootMe2_tex,*enemy_IShoot_tex,
|
||||||
*life4,*life3,*life2,*life1,*crosshair,*hudmeter,*powerup_tex,*powerup2_tex,
|
*life4,*life3,*life2,*life1,*crosshair,*hudmeter,*powerup_tex,*powerup2_tex,
|
||||||
*powerups_tex;
|
*powerups_tex,*enemy_IShoot2_tex, *worldSkyBox_tex;
|
||||||
vi2d exitCoords = { 0,0 };
|
vi2d exitCoords = { 0,0 };
|
||||||
std::vector<vf2d>knownGoodPositions;
|
std::vector<vf2d>knownGoodPositions;
|
||||||
std::vector<std::vector<MapSquare>>map;
|
std::vector<std::vector<MapSquare>>map;
|
||||||
@ -281,6 +290,7 @@ class FaceBall : public PixelGameEngine
|
|||||||
double gameTimer = 0;
|
double gameTimer = 0;
|
||||||
int lastPowerupCollidedWith = -1;
|
int lastPowerupCollidedWith = -1;
|
||||||
std::string hudDisplayText = "";
|
std::string hudDisplayText = "";
|
||||||
|
std::string lookingAtText = "";
|
||||||
float stopDuration = 0,shieldDuration=0,camoDuration=0;
|
float stopDuration = 0,shieldDuration=0,camoDuration=0;
|
||||||
bool hasMapUpgrade = false;
|
bool hasMapUpgrade = false;
|
||||||
std::array<Pixel,14>colorCycle={
|
std::array<Pixel,14>colorCycle={
|
||||||
@ -333,8 +343,9 @@ class FaceBall : public PixelGameEngine
|
|||||||
vf2d{1162,575},
|
vf2d{1162,575},
|
||||||
vf2d{1163,525}
|
vf2d{1163,525}
|
||||||
};
|
};
|
||||||
|
public:
|
||||||
Player player = { {3.7,0.3,0.7}, {{0.5,0.5},0.2} };
|
Player player = { {3.7,0.3,0.7}, {{0.5,0.5},0.2} };
|
||||||
|
vi2d playerRoundedCoords = {int(player.GetPos().x),int(player.GetPos().z)};
|
||||||
const int baseHP = 3;
|
const int baseHP = 3;
|
||||||
int hp = baseHP;
|
int hp = baseHP;
|
||||||
int maxHP=hp;
|
int maxHP=hp;
|
||||||
@ -413,6 +424,7 @@ class FaceBall : public PixelGameEngine
|
|||||||
int CheckPowerupCollision(vec3d movementVector, vf2d pos, float radius);
|
int CheckPowerupCollision(vec3d movementVector, vf2d pos, float radius);
|
||||||
void ResetScore();
|
void ResetScore();
|
||||||
int EnemiesAlive();
|
int EnemiesAlive();
|
||||||
|
int PlayerActiveShotCount(int playerNumb);
|
||||||
public:
|
public:
|
||||||
vi2d MAP_SIZE;
|
vi2d MAP_SIZE;
|
||||||
float restingTriangleYDepth = 0.f;
|
float restingTriangleYDepth = 0.f;
|
||||||
@ -431,4 +443,6 @@ class FaceBall : public PixelGameEngine
|
|||||||
vf2d GetPlayerPos();
|
vf2d GetPlayerPos();
|
||||||
void AddScore(int score);
|
void AddScore(int score);
|
||||||
vf2d GetRandomizedSpawnPosition();
|
vf2d GetRandomizedSpawnPosition();
|
||||||
|
bool PlayerHasMapUpgrade();
|
||||||
|
void RegenerateMinimap();
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user