open and closing of powerup capsule.
This commit is contained in:
parent
5e9fed6992
commit
78b7aef32f
@ -158,6 +158,7 @@ bool Powerup::Update(float fElapsedTime) {
|
||||
aliveTime += fElapsedTime;
|
||||
colorCycle = std::sinf(10 * aliveTime);
|
||||
col = game->powerupColorData[type] * colorCycle;
|
||||
opened = false; //Open state is false until a player causes it to open.
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -188,6 +189,7 @@ void FaceBall::LoadLevel(int level)
|
||||
objects.clear();
|
||||
bullets.clear();
|
||||
enemies.clear();
|
||||
powerups.clear();
|
||||
exitCoords = { 0,0 };
|
||||
for (int y = 0; y < MAP_SIZE.y; y++) {
|
||||
std::vector<MapSquare>row;
|
||||
@ -835,7 +837,7 @@ void FaceBall::RenderPowerupMesh(mat4x4& matView, std::vector<Triangle>& vecTria
|
||||
rotMat = Matrix_MultiplyMatrix(rotMat, flipMat);
|
||||
}
|
||||
localMat = Matrix_MultiplyMatrix(localMat, rotMat);
|
||||
mat4x4 matTrans = Matrix_MakeTranslation(p.pos.x, p.pos.y+(i?0.375f:0), p.pos.z);
|
||||
mat4x4 matTrans = Matrix_MakeTranslation(p.pos.x, p.pos.y+(i?p.opened?0.65f:0.375f:p.opened?-0.125f:0), p.pos.z);
|
||||
localMat = Matrix_MultiplyMatrix(localMat, matTrans);
|
||||
|
||||
triTransformed.p[0] = Matrix_MultiplyVector(localMat, tri.p[0]);
|
||||
@ -1292,7 +1294,8 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
||||
freeRoamCamera = Vector_Add(freeRoamCamera, vLeftStrafe);
|
||||
}
|
||||
else {
|
||||
if (!CheckCollision({ vLeftStrafe.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius())) {
|
||||
if (!CheckCollision({ vLeftStrafe.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius())&&
|
||||
CheckPowerupCollision({ vLeftStrafe.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius())==-1) {
|
||||
vec3d xMovement{ vLeftStrafe.x,0,0 };
|
||||
int enemyCollisionIndex = CheckExplosiveEnemyCollision(xMovement, { player.GetPos().x,player.GetPos().z }, player.GetRadius());
|
||||
if (enemyCollisionIndex != -1) {
|
||||
@ -1304,7 +1307,8 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
||||
}
|
||||
player.UpdatePos(Vector_Add(player.GetPos(), xMovement));
|
||||
}
|
||||
if (!CheckCollision({ 0,0,vLeftStrafe.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius())) {
|
||||
if (!CheckCollision({ 0,0,vLeftStrafe.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) &&
|
||||
CheckPowerupCollision({ 0,0,vLeftStrafe.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) == -1) {
|
||||
vec3d zMovement{ 0,0,vLeftStrafe.z };
|
||||
int enemyCollisionIndex = CheckExplosiveEnemyCollision(zMovement, { player.GetPos().x,player.GetPos().z }, player.GetRadius());
|
||||
if (enemyCollisionIndex != -1) {
|
||||
@ -1326,7 +1330,8 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
||||
freeRoamCamera = Vector_Add(freeRoamCamera, vRightStrafe);
|
||||
}
|
||||
else {
|
||||
if (!CheckCollision({ vRightStrafe.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius())) {
|
||||
if (!CheckCollision({ vRightStrafe.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) &&
|
||||
CheckPowerupCollision({ vRightStrafe.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) == -1) {
|
||||
vec3d xMovement{ vRightStrafe.x,0,0 };
|
||||
int enemyCollisionIndex = CheckExplosiveEnemyCollision(xMovement, { player.GetPos().x,player.GetPos().z }, player.GetRadius());
|
||||
if (enemyCollisionIndex != -1) {
|
||||
@ -1338,7 +1343,8 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
||||
}
|
||||
player.UpdatePos(Vector_Add(player.GetPos(), xMovement));
|
||||
}
|
||||
if (!CheckCollision({ 0,0,vRightStrafe.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius())) {
|
||||
if (!CheckCollision({ 0,0,vRightStrafe.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) &&
|
||||
CheckPowerupCollision({ 0,0,vRightStrafe.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) == -1) {
|
||||
vec3d zMovement{ 0,0,vRightStrafe.z };
|
||||
int enemyCollisionIndex = CheckExplosiveEnemyCollision(zMovement, { player.GetPos().x,player.GetPos().z }, player.GetRadius());
|
||||
if (enemyCollisionIndex != -1) {
|
||||
@ -1357,7 +1363,8 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
||||
freeRoamCamera = Vector_Add(freeRoamCamera, vForward);
|
||||
}
|
||||
else {
|
||||
if (!CheckCollision({ vForward.x,0,0 }, {player.GetPos().x,player.GetPos().z},player.GetRadius())) {
|
||||
if (!CheckCollision({ vForward.x,0,0 }, {player.GetPos().x,player.GetPos().z},player.GetRadius()) &&
|
||||
CheckPowerupCollision({ vForward.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) == -1) {
|
||||
vec3d xMovement{ vForward.x,0,0 };
|
||||
int enemyCollisionIndex = CheckExplosiveEnemyCollision(xMovement, { player.GetPos().x,player.GetPos().z }, player.GetRadius());
|
||||
if (enemyCollisionIndex != -1) {
|
||||
@ -1369,7 +1376,8 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
||||
}
|
||||
player.UpdatePos(Vector_Add(player.GetPos(), xMovement));
|
||||
}
|
||||
if (!CheckCollision({ 0,0,vForward.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius())) {
|
||||
if (!CheckCollision({ 0,0,vForward.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) &&
|
||||
CheckPowerupCollision({ 0,0,vForward.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) == -1) {
|
||||
vec3d zMovement{ 0,0,vForward.z };
|
||||
int enemyCollisionIndex = CheckExplosiveEnemyCollision(zMovement, { player.GetPos().x,player.GetPos().z }, player.GetRadius());
|
||||
if (enemyCollisionIndex != -1) {
|
||||
@ -1393,7 +1401,8 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
||||
freeRoamCamera = Vector_Add(freeRoamCamera, vReverse);
|
||||
}
|
||||
else {
|
||||
if (!CheckCollision({ vReverse.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius())) {
|
||||
if (!CheckCollision({ vReverse.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) &&
|
||||
CheckPowerupCollision({ vReverse.x,0,0 }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) == -1) {
|
||||
vec3d xMovement{ vReverse.x,0,0 };
|
||||
int enemyCollisionIndex = CheckExplosiveEnemyCollision(xMovement, { player.GetPos().x,player.GetPos().z }, player.GetRadius());
|
||||
if (enemyCollisionIndex != -1) {
|
||||
@ -1405,7 +1414,8 @@ void FaceBall::HandleKeys(float fElapsedTime) {
|
||||
}
|
||||
player.UpdatePos(Vector_Add(player.GetPos(), xMovement));
|
||||
}
|
||||
if (!CheckCollision({ 0,0,vReverse.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius())) {
|
||||
if (!CheckCollision({ 0,0,vReverse.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) &&
|
||||
CheckPowerupCollision({ 0,0,vReverse.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius()) == -1) {
|
||||
vec3d zMovement{ 0,0,vReverse.z };
|
||||
int enemyCollisionIndex = CheckExplosiveEnemyCollision(zMovement, { player.GetPos().x,player.GetPos().z }, player.GetRadius());
|
||||
if (enemyCollisionIndex != -1) {
|
||||
@ -1516,6 +1526,19 @@ bool FaceBall::OnUserCreate()
|
||||
return true;
|
||||
}
|
||||
|
||||
int FaceBall::CheckPowerupCollision(vec3d movementVector, vf2d pos, float radius) {
|
||||
vf2d newpos = { pos.x + movementVector.x,pos.y + movementVector.z };
|
||||
for (int i = 0; i < game->powerups.size(); i++) {
|
||||
Powerup& p = game->powerups[i];
|
||||
float dist = std::sqrtf(std::powf(newpos.x - p.pos.x, 2) + std::powf(newpos.y - p.pos.z, 2));
|
||||
if (dist < radius + p.radius) {
|
||||
lastPowerupCollidedWith = i; //This function is only meant for the player to collide with things. If this is needed for other things, we will have to refactor/reconsider this line as they would modify the player's last powerup touched variable which is a no-no.
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
//Collisions will not occur if the player is dead.
|
||||
bool FaceBall::CheckPlayerCollision(vec3d movementVector, vf2d pos, float radius) {
|
||||
if (game->hp <= 0) { return false; }
|
||||
@ -2003,34 +2026,40 @@ void FaceBall::RunEnemyAI(Enemy& e,float fElapsedTime,int myIndex) {
|
||||
bool FaceBall::OnUserUpdate(float fElapsedTime)
|
||||
{
|
||||
gameTimer += fElapsedTime;
|
||||
for (std::vector<Bullet>::iterator it = bullets.begin(); it != bullets.end();) {
|
||||
Bullet& b = *it;
|
||||
if (!b.Update(fElapsedTime)) {
|
||||
it=bullets.erase(it);
|
||||
}
|
||||
else {
|
||||
it++;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < enemies.size(); i++) {
|
||||
Enemy& e = enemies[i];
|
||||
e.Update(fElapsedTime);
|
||||
if (e.isLastHitTimerActive()) {
|
||||
e.reduceLastHitTimer(fElapsedTime);
|
||||
}
|
||||
RunEnemyAI(e, fElapsedTime,i);
|
||||
}
|
||||
for (std::vector<Powerup>::iterator it = powerups.begin(); it != powerups.end();) {
|
||||
Powerup& p = *it;
|
||||
if (!p.Update(fElapsedTime)) {
|
||||
it = powerups.erase(it);
|
||||
}
|
||||
else {
|
||||
it++;
|
||||
}
|
||||
}
|
||||
switch (mode) {
|
||||
case GAME: {
|
||||
for (std::vector<Bullet>::iterator it = bullets.begin(); it != bullets.end();) {
|
||||
Bullet& b = *it;
|
||||
if (!b.Update(fElapsedTime)) {
|
||||
it = bullets.erase(it);
|
||||
}
|
||||
else {
|
||||
it++;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < enemies.size(); i++) {
|
||||
Enemy& e = enemies[i];
|
||||
e.Update(fElapsedTime);
|
||||
if (e.isLastHitTimerActive()) {
|
||||
e.reduceLastHitTimer(fElapsedTime);
|
||||
}
|
||||
RunEnemyAI(e, fElapsedTime, i);
|
||||
}
|
||||
for (std::vector<Powerup>::iterator it = powerups.begin(); it != powerups.end();) {
|
||||
Powerup& p = *it;
|
||||
if (!p.Update(fElapsedTime)) {
|
||||
it = powerups.erase(it);
|
||||
}
|
||||
else {
|
||||
it++;
|
||||
}
|
||||
}
|
||||
if (lastPowerupCollidedWith != -1) {
|
||||
vec3d vForward = Vector_Mul(vLookDir, std::min(player.GetRadius() - 0.00001f, moveSpd * fElapsedTime));
|
||||
if (CheckPowerupCollision({ vForward.x,0,vForward.z }, { player.GetPos().x,player.GetPos().z }, player.GetRadius() * 1.25) != -1) {
|
||||
powerups[lastPowerupCollidedWith].opened = true;
|
||||
}
|
||||
}
|
||||
if (hp > 0) {
|
||||
HandleKeys(fElapsedTime);
|
||||
RenderWorld();
|
||||
|
@ -174,6 +174,7 @@ struct Powerup : Object {
|
||||
Pixel col;
|
||||
float colorCycle=1;
|
||||
float aliveTime=0;
|
||||
bool opened = false;
|
||||
bool Update(float fElapsedTime);
|
||||
};
|
||||
|
||||
@ -278,6 +279,7 @@ class FaceBall : public PixelGameEngine
|
||||
int tagsRemaining = 10;
|
||||
int lives = 3;
|
||||
double gameTimer = 0;
|
||||
int lastPowerupCollidedWith = -1;
|
||||
|
||||
mat4x4 matProj;
|
||||
|
||||
@ -374,6 +376,7 @@ class FaceBall : public PixelGameEngine
|
||||
void RenderHud(float fElapsedTime);
|
||||
void ConvertBulletColor(Mesh& bullet, Pixel col);
|
||||
void Display3DKillerModel();
|
||||
int CheckPowerupCollision(vec3d movementVector, vf2d pos, float radius);
|
||||
public:
|
||||
vi2d MAP_SIZE;
|
||||
float restingTriangleYDepth = 0.f;
|
||||
|
Loading…
x
Reference in New Issue
Block a user