health_bar #11
@ -1,5 +1,7 @@
|
|||||||
#include "glm.hpp"
|
#include "glm.hpp"
|
||||||
#include "src/Shader_Loader.h"
|
#include "src/Shader_Loader.h"
|
||||||
|
#include <vector>
|
||||||
|
#include "GameEntity.h"
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
class Bullet
|
class Bullet
|
||||||
@ -39,14 +41,52 @@ public:
|
|||||||
return new Bullet(10, 10, directionNormalized, startPosition, birthTime, simpleRenderContext, 0.01f);
|
return new Bullet(10, 10, directionNormalized, startPosition, birthTime, simpleRenderContext, 0.01f);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool shouldBeDestroyed(float time, GLuint program) {
|
bool shouldBeDestroyed(float time, GLuint program, std::vector<GameEntity*>& gameEntities, float attackerDmg) {
|
||||||
float age = getAge(time);
|
float age = getAge(time);
|
||||||
if (age > lifetime) {
|
if (age > lifetime) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
glm::mat4 modelMatrix = glm::translate(glm::mat4(1.0f), startPosition) * glm::translate(directionNormalized * speed * age) * glm::scale(glm::vec3(scale));
|
glm::mat4 modelMatrix = glm::translate(glm::mat4(1.0f), startPosition) * glm::translate(directionNormalized * speed * age) * glm::scale(glm::vec3(scale));
|
||||||
Core::drawObjectPBR(renderContext, modelMatrix, glm::vec3(1.f, 0.f, 0.f), 0.3, 0, program);
|
Core::drawObjectPBR(renderContext, modelMatrix, glm::vec3(1.f, 0.f, 0.f), 0.3, 0, program);
|
||||||
|
//std::cout << "x: " << modelMatrix[3].x << std::endl;
|
||||||
|
//std::cout << "y: " << modelMatrix[3].y << std::endl;
|
||||||
|
//std::cout << "z: " << modelMatrix[3].z << std::endl;
|
||||||
|
if (checkCollisionWithGameEntities(gameEntities, modelMatrix, attackerDmg)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
bool checkCollisionWithGameEntities(std::vector<GameEntity*>& gameEntities, glm::mat4 bulletModelMatrix, float attackerDmg) {
|
||||||
|
for (const auto& entity : gameEntities) {
|
||||||
|
glm::mat4 entityModelMatrix = entity->getModelMatrix();
|
||||||
|
|
||||||
|
// SprawdŸ kolizjê AABB miêdzy pociskiem a obiektem z wektora gameEntities
|
||||||
|
if (checkAABBCollision(bulletModelMatrix, entityModelMatrix)) {
|
||||||
|
entity->applyDamage(attackerDmg);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool checkAABBCollision(const glm::mat4& obj1ModelMatrix, const glm::mat4& obj2ModelMatrix) {
|
||||||
|
// Pobierz rozmiary obiektów z ich macierzy modelu
|
||||||
|
glm::vec3 obj1Min = glm::vec3(obj1ModelMatrix * glm::vec4(-0.5f, -0.5f, -0.5f, 1.0f));
|
||||||
|
glm::vec3 obj1Max = glm::vec3(obj1ModelMatrix * glm::vec4(0.5f, 0.5f, 0.5f, 1.0f));
|
||||||
|
|
||||||
|
glm::vec3 obj2Min = glm::vec3(obj2ModelMatrix * glm::vec4(-0.5f, -0.5f, -0.5f, 1.0f));
|
||||||
|
glm::vec3 obj2Max = glm::vec3(obj2ModelMatrix * glm::vec4(0.5f, 0.5f, 0.5f, 1.0f));
|
||||||
|
|
||||||
|
// SprawdŸ kolizjê wzd³u¿ trzech osi (x, y, z)
|
||||||
|
bool collisionX = obj1Max.x >= obj2Min.x && obj1Min.x <= obj2Max.x;
|
||||||
|
bool collisionY = obj1Max.y >= obj2Min.y && obj1Min.y <= obj2Max.y;
|
||||||
|
bool collisionZ = obj1Max.z >= obj2Min.z && obj1Min.z <= obj2Max.z;
|
||||||
|
|
||||||
|
// Kolizja wystêpuje tylko wtedy, gdy zachodzi kolizja na wszystkich trzech osiach
|
||||||
|
return collisionX && collisionY && collisionZ;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,10 +2,11 @@
|
|||||||
#include "ext.hpp"
|
#include "ext.hpp"
|
||||||
#include "src/Render_Utils.h"
|
#include "src/Render_Utils.h"
|
||||||
#include "Bullet.h"
|
#include "Bullet.h"
|
||||||
|
#include "./GameEntity.h"
|
||||||
#include "Spaceship.h"
|
#include "Spaceship.h"
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
class Enemy
|
class Enemy : public GameEntity
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::list<Bullet*> bullets;
|
std::list<Bullet*> bullets;
|
||||||
@ -14,13 +15,13 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
glm::mat4 modelMatrix;
|
glm::mat4 modelMatrix;
|
||||||
int hp;
|
|
||||||
int initialHp;
|
|
||||||
int dmg;
|
|
||||||
float aggroRange;
|
float aggroRange;
|
||||||
|
|
||||||
Enemy(int currHp,int initialHp, glm::mat4 initialModelMatrix, int initialDmg, float initialAggroRange)
|
Enemy(float currHp,float initialHp, glm::mat4 initialModelMatrix, float initialDmg, float initialAggroRange)
|
||||||
: hp(currHp), initialHp(initialHp), modelMatrix(initialModelMatrix), dmg(initialDmg), aggroRange(initialAggroRange)
|
:
|
||||||
|
aggroRange(initialAggroRange),
|
||||||
|
modelMatrix(initialModelMatrix),
|
||||||
|
GameEntity(currHp, initialHp, initialDmg)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -34,7 +35,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual bool isAlive() const {
|
virtual bool isAlive() const {
|
||||||
if (this->hp < 0) {
|
if (this->currentHP <= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -48,11 +49,11 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderBullets(float time, GLuint program) {
|
void renderBullets(float time, GLuint program, std::vector<GameEntity*>& gameEntities) {
|
||||||
for (auto it = bullets.begin(); it != bullets.end();) {
|
for (auto it = bullets.begin(); it != bullets.end();) {
|
||||||
Bullet* bullet = *it;
|
Bullet* bullet = *it;
|
||||||
|
|
||||||
if (bullet->shouldBeDestroyed(time, program)) {
|
if (bullet->shouldBeDestroyed(time, program, gameEntities, dmg)) {
|
||||||
delete bullet;
|
delete bullet;
|
||||||
it = bullets.erase(it);
|
it = bullets.erase(it);
|
||||||
}
|
}
|
||||||
@ -61,6 +62,15 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
glm::vec3 getPosition() const override
|
||||||
|
{
|
||||||
|
return modelMatrix[3];
|
||||||
|
}
|
||||||
|
glm::mat4 getModelMatrix() override
|
||||||
|
{
|
||||||
|
return modelMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void requestShoot(float time) {
|
void requestShoot(float time) {
|
||||||
if (canShoot(time)) {
|
if (canShoot(time)) {
|
||||||
@ -75,6 +85,7 @@ private:
|
|||||||
void shoot(float time) {
|
void shoot(float time) {
|
||||||
Spaceship* spaceship = Spaceship::getInstance();
|
Spaceship* spaceship = Spaceship::getInstance();
|
||||||
glm::vec3 bulletDirection = glm::normalize(spaceship->spaceshipPos - glm::vec3(modelMatrix[3]));
|
glm::vec3 bulletDirection = glm::normalize(spaceship->spaceshipPos - glm::vec3(modelMatrix[3]));
|
||||||
|
|
||||||
this->bullets.push_back(Bullet::createSimpleBullet(bulletDirection, this->modelMatrix[3], time));
|
this->bullets.push_back(Bullet::createSimpleBullet(bulletDirection, this->modelMatrix[3], time));
|
||||||
this->lastShootTime = time;
|
this->lastShootTime = time;
|
||||||
}
|
}
|
||||||
|
23
grk/project/GameEntity.h
Normal file
23
grk/project/GameEntity.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#include "glm.hpp"
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
class GameEntity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
float currentHP;
|
||||||
|
float dmg;
|
||||||
|
float maxHP;
|
||||||
|
|
||||||
|
GameEntity(float currentHP, float maxHP, float initialDmg)
|
||||||
|
: currentHP(currentHP), maxHP(maxHP), dmg(initialDmg)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void applyDamage(float attackerDmg) {
|
||||||
|
currentHP = currentHP - attackerDmg;
|
||||||
|
};
|
||||||
|
virtual glm::vec3 getPosition() const = 0;
|
||||||
|
virtual glm::mat4 getModelMatrix() = 0;
|
||||||
|
};
|
||||||
|
|
@ -4,10 +4,11 @@
|
|||||||
#include <list>
|
#include <list>
|
||||||
#include "Bullet.h"
|
#include "Bullet.h"
|
||||||
#include "ParticleSystem.h"
|
#include "ParticleSystem.h"
|
||||||
|
#include "GameEntity.h"
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
class Spaceship
|
class Spaceship : public GameEntity
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::list<Bullet*> bullets;
|
std::list<Bullet*> bullets;
|
||||||
@ -16,8 +17,9 @@ private:
|
|||||||
ParticleSystem* leftParticle;
|
ParticleSystem* leftParticle;
|
||||||
ParticleSystem* rightParticle;
|
ParticleSystem* rightParticle;
|
||||||
|
|
||||||
// Prywatny konstruktor, aby zapobiec zewnêtrznemu tworzeniu instancji
|
// Prywatny konstruktor, aby zapobiec zewn<77>trznemu tworzeniu instancji
|
||||||
Spaceship() {
|
Spaceship() : GameEntity(100.0f, 100.0f, 10.0f)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,11 +166,11 @@ public:
|
|||||||
return cameraMatrix;
|
return cameraMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderBullets(float time, GLuint program) {
|
void renderBullets(float time, GLuint program, std::vector<GameEntity*>& gameEntities) {
|
||||||
for (auto it = bullets.begin(); it != bullets.end();) {
|
for (auto it = bullets.begin(); it != bullets.end();) {
|
||||||
Bullet* bullet = *it;
|
Bullet* bullet = *it;
|
||||||
|
|
||||||
if (bullet->shouldBeDestroyed(time, program)) {
|
if (bullet->shouldBeDestroyed(time, program, gameEntities, dmg)) {
|
||||||
delete bullet;
|
delete bullet;
|
||||||
it = bullets.erase(it);
|
it = bullets.erase(it);
|
||||||
}
|
}
|
||||||
@ -194,4 +196,11 @@ public:
|
|||||||
bullets.push_back(Bullet::createSimpleBullet(cameraDir, spaceshipPos + perpendicularVector, time));
|
bullets.push_back(Bullet::createSimpleBullet(cameraDir, spaceshipPos + perpendicularVector, time));
|
||||||
lastShootTime = time;
|
lastShootTime = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glm::vec3 getPosition() const override {
|
||||||
|
return spaceshipPos;
|
||||||
|
}
|
||||||
|
glm::mat4 getModelMatrix() override {
|
||||||
|
return calculateModelMatrix();
|
||||||
|
}
|
||||||
};
|
};
|
@ -29,6 +29,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Bullet.h" />
|
<ClInclude Include="Bullet.h" />
|
||||||
<ClInclude Include="Enemy.h" />
|
<ClInclude Include="Enemy.h" />
|
||||||
|
<ClInclude Include="GameEntity.h" />
|
||||||
<ClInclude Include="GameObject.h" />
|
<ClInclude Include="GameObject.h" />
|
||||||
<ClInclude Include="GameUtils.h" />
|
<ClInclude Include="GameUtils.h" />
|
||||||
<ClInclude Include="ParticleSystem.h" />
|
<ClInclude Include="ParticleSystem.h" />
|
||||||
|
@ -128,6 +128,9 @@
|
|||||||
<ClInclude Include="ParticleSystem.h">
|
<ClInclude Include="ParticleSystem.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="GameEntity.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="shaders\shader_8_sun.vert">
|
<None Include="shaders\shader_8_sun.vert">
|
||||||
|
@ -70,7 +70,7 @@ Sun* sun;
|
|||||||
GLuint VAO,VBO;
|
GLuint VAO,VBO;
|
||||||
|
|
||||||
std::vector<Enemy*> enemies;
|
std::vector<Enemy*> enemies;
|
||||||
|
std::vector<GameEntity*> gameEntities;
|
||||||
|
|
||||||
float exposition = 1.f;
|
float exposition = 1.f;
|
||||||
|
|
||||||
@ -94,13 +94,21 @@ void updateDeltaTime(float time) {
|
|||||||
if (deltaTime > 0.1) deltaTime = 0.1;
|
if (deltaTime > 0.1) deltaTime = 0.1;
|
||||||
lastTime = time;
|
lastTime = time;
|
||||||
}
|
}
|
||||||
void renderEnemies() {
|
void renderHUD() {
|
||||||
glDisable(GL_DEPTH_TEST);
|
|
||||||
glUseProgram(programSpriteBar);
|
glUseProgram(programSpriteBar);
|
||||||
|
glDisable(GL_DEPTH_TEST);
|
||||||
glm::mat4 spaceshipModelMatrix = spaceship->calculateModelMatrix();
|
glm::mat4 spaceshipModelMatrix = spaceship->calculateModelMatrix();
|
||||||
glm::mat4 healthBarPosition = glm::translate(spaceshipModelMatrix, glm::vec3(12.0f, -9.0f, 0.0f));
|
glm::mat4 healthBarPosition = glm::translate(spaceshipModelMatrix, glm::vec3(12.0f, -9.0f, 0.0f));
|
||||||
spriteRenderer->DrawHUDBar(glm::vec3(0.0f, 1.0f, 0.0f), glm::scale(healthBarPosition, glm::vec3(9.0f, 1.1f, 1.0f)), 1.f, programSpriteBar);
|
spriteRenderer->DrawHUDBar(
|
||||||
|
glm::vec3(0.0f, 1.0f, 0.0f),
|
||||||
|
glm::scale(healthBarPosition, glm::vec3(9.0f, 1.1f, 1.0f)),
|
||||||
|
spaceship->currentHP / spaceship->maxHP,
|
||||||
|
programSpriteBar);
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
}
|
||||||
|
void renderEnemies() {
|
||||||
|
|
||||||
|
glUseProgram(programSpriteBar);
|
||||||
for (const auto& enemy : enemies) {
|
for (const auto& enemy : enemies) {
|
||||||
if (enemy->isAlive()) {
|
if (enemy->isAlive()) {
|
||||||
spriteRenderer->DrawSpriteBar(
|
spriteRenderer->DrawSpriteBar(
|
||||||
@ -110,12 +118,13 @@ void renderEnemies() {
|
|||||||
),
|
),
|
||||||
glm::vec3(1.0f, 0.2f, 1.0f)
|
glm::vec3(1.0f, 0.2f, 1.0f)
|
||||||
),
|
),
|
||||||
static_cast<float>(enemy->hp / enemy->initialHp),
|
enemy->currentHP / enemy->maxHP,
|
||||||
programSpriteBar);
|
programSpriteBar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
glUseProgram(programSprite);
|
glUseProgram(programSprite);
|
||||||
for (const auto& enemy : enemies) {
|
for (const auto& enemy : enemies) {
|
||||||
|
|
||||||
if (enemy->isAlive()) {
|
if (enemy->isAlive()) {
|
||||||
spriteRenderer->DrawSprite(texture::spriteTexture, enemy->modelMatrix, programSprite);
|
spriteRenderer->DrawSprite(texture::spriteTexture, enemy->modelMatrix, programSprite);
|
||||||
}
|
}
|
||||||
@ -125,7 +134,7 @@ void renderEnemies() {
|
|||||||
for (const auto& enemy : enemies) {
|
for (const auto& enemy : enemies) {
|
||||||
if (enemy->isAlive()) {
|
if (enemy->isAlive()) {
|
||||||
enemy->attack(spaceship->spaceshipPos, glfwGetTime());
|
enemy->attack(spaceship->spaceshipPos, glfwGetTime());
|
||||||
enemy->renderBullets(glfwGetTime(), program);
|
enemy->renderBullets(glfwGetTime(), program, gameEntities);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -174,9 +183,8 @@ void renderScene(GLFWwindow* window)
|
|||||||
|
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
|
|
||||||
spaceship->renderBullets(glfwGetTime(), program);
|
std::vector<GameEntity*> gameEntities(enemies.begin(), enemies.end());
|
||||||
|
spaceship->renderBullets(glfwGetTime(), program, gameEntities);
|
||||||
|
|
||||||
|
|
||||||
drawObjectPBR(models::sphereContext,
|
drawObjectPBR(models::sphereContext,
|
||||||
glm::translate(pointlightPos) * glm::scale(glm::vec3(0.1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::eulerAngleY(time) * glm::translate(glm::vec3(1.f, 0, 0)) * glm::scale(glm::vec3(0.1f)),
|
glm::translate(pointlightPos) * glm::scale(glm::vec3(0.1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::eulerAngleY(time) * glm::translate(glm::vec3(1.f, 0, 0)) * glm::scale(glm::vec3(0.1f)),
|
||||||
@ -190,6 +198,7 @@ void renderScene(GLFWwindow* window)
|
|||||||
texture::spaceshipTexture,
|
texture::spaceshipTexture,
|
||||||
spaceship->roughness, spaceship->metallic, programTex
|
spaceship->roughness, spaceship->metallic, programTex
|
||||||
);
|
);
|
||||||
|
<<<<<<< HEAD
|
||||||
|
|
||||||
<<<<<<< HEAD
|
<<<<<<< HEAD
|
||||||
//Core::SetActiveTexture(texture::earthTexture, "textureSampler", programTex, 0);
|
//Core::SetActiveTexture(texture::earthTexture, "textureSampler", programTex, 0);
|
||||||
@ -219,6 +228,9 @@ void renderScene(GLFWwindow* window)
|
|||||||
glm::mat4 viewMatrix = Core::createViewMatrix(spaceship->cameraPos, spaceship->cameraDir, cameraUp);
|
glm::mat4 viewMatrix = Core::createViewMatrix(spaceship->cameraPos, spaceship->cameraDir, cameraUp);
|
||||||
spaceship->renderParticles(programParticle, viewMatrix, Core::createPerspectiveMatrix(), time);
|
spaceship->renderParticles(programParticle, viewMatrix, Core::createPerspectiveMatrix(), time);
|
||||||
=======
|
=======
|
||||||
|
=======
|
||||||
|
renderHUD();
|
||||||
|
>>>>>>> 9586849 (Add collision detection and taking dmg)
|
||||||
renderEnemies();
|
renderEnemies();
|
||||||
|
|
||||||
//drawObjectPBR(sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(10.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3), 0.3, 0.0, program);
|
//drawObjectPBR(sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(10.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3), 0.3, 0.0, program);
|
||||||
@ -268,9 +280,12 @@ void createSolarSystem(glm::vec3 sunPos, float sunScale, float* planetSizes, int
|
|||||||
|
|
||||||
void createEnemies() {
|
void createEnemies() {
|
||||||
|
|
||||||
enemies.push_back(new Enemy(100,100, glm::mat4(1.0f), 20, 5.0f));
|
enemies.push_back(new Enemy(100.0f,100.0f, glm::mat4(1.0f), 1.0f, 5.0f));
|
||||||
enemies.push_back(new Enemy(100,100, glm::translate(glm::mat4(1.0f) , glm::vec3(1.f,1.f,1.f)), 15, 5.0f));
|
enemies.push_back(new Enemy(100.0f,100.0f, glm::translate(glm::mat4(1.0f) , glm::vec3(1.f,1.f,1.f)), 1.0f, 5.0f));
|
||||||
enemies.push_back(new Enemy(100,100, glm::translate(glm::mat4(1.0f), glm::vec3(-1.f, 2.f, -0.9f)), 25, 5.0f));
|
enemies.push_back(new Enemy(100.0f,100.0f, glm::translate(glm::mat4(1.0f), glm::vec3(-1.f, 2.f, -0.9f)), 1.0f, 5.0f));
|
||||||
|
|
||||||
|
//obiekty do ktorych bedzie sprawdzana kolizja dla pociskow enemy
|
||||||
|
gameEntities.push_back(spaceship);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,19 +61,16 @@ GLuint programSun;
|
|||||||
GLuint programTest;
|
GLuint programTest;
|
||||||
GLuint programSprite;
|
GLuint programSprite;
|
||||||
GLuint programCubemap;
|
GLuint programCubemap;
|
||||||
<<<<<<< HEAD
|
|
||||||
GLuint programParticle;
|
GLuint programParticle;
|
||||||
GLuint programTex;
|
GLuint programTex;
|
||||||
=======
|
|
||||||
GLuint programSpriteBar;
|
GLuint programSpriteBar;
|
||||||
>>>>>>> 6ccdec5 (Add drawing health bars for enemies)
|
|
||||||
|
|
||||||
std::list<Planet*> planets;
|
std::list<Planet*> planets;
|
||||||
Sun* sun;
|
Sun* sun;
|
||||||
GLuint VAO,VBO;
|
GLuint VAO,VBO;
|
||||||
|
|
||||||
std::vector<Enemy*> enemies;
|
std::vector<Enemy*> enemies;
|
||||||
|
std::vector<GameEntity*> gameEntities;
|
||||||
|
|
||||||
float exposition = 1.f;
|
float exposition = 1.f;
|
||||||
|
|
||||||
@ -97,7 +94,20 @@ void updateDeltaTime(float time) {
|
|||||||
if (deltaTime > 0.1) deltaTime = 0.1;
|
if (deltaTime > 0.1) deltaTime = 0.1;
|
||||||
lastTime = time;
|
lastTime = time;
|
||||||
}
|
}
|
||||||
|
void renderHUD() {
|
||||||
|
glUseProgram(programSpriteBar);
|
||||||
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
glm::mat4 spaceshipModelMatrix = spaceship->calculateModelMatrix();
|
||||||
|
glm::mat4 healthBarPosition = glm::translate(spaceshipModelMatrix, glm::vec3(12.0f, -9.0f, 0.0f));
|
||||||
|
spriteRenderer->DrawHUDBar(
|
||||||
|
glm::vec3(0.0f, 1.0f, 0.0f),
|
||||||
|
glm::scale(healthBarPosition, glm::vec3(9.0f, 1.1f, 1.0f)),
|
||||||
|
spaceship->currentHP / spaceship->maxHP,
|
||||||
|
programSpriteBar);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
}
|
||||||
void renderEnemies() {
|
void renderEnemies() {
|
||||||
|
|
||||||
glUseProgram(programSpriteBar);
|
glUseProgram(programSpriteBar);
|
||||||
for (const auto& enemy : enemies) {
|
for (const auto& enemy : enemies) {
|
||||||
if (enemy->isAlive()) {
|
if (enemy->isAlive()) {
|
||||||
@ -108,24 +118,13 @@ void renderEnemies() {
|
|||||||
),
|
),
|
||||||
glm::vec3(1.0f, 0.2f, 1.0f)
|
glm::vec3(1.0f, 0.2f, 1.0f)
|
||||||
),
|
),
|
||||||
static_cast<float>(enemy->hp / enemy->initialHp),
|
enemy->currentHP / enemy->maxHP,
|
||||||
programSpriteBar);
|
programSpriteBar);
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
TextureTuple getRandomPlanetTexture() {
|
|
||||||
int textureIndex = rand() % planetTextures.size();
|
|
||||||
TextureTuple selectedTextures = planetTextures[textureIndex];
|
|
||||||
//GLuint textureID = selectedTextures.textureID;
|
|
||||||
//GLuint normalMapID = selectedTextures.normalMapID;
|
|
||||||
|
|
||||||
return planetTextures[textureIndex];
|
|
||||||
}
|
|
||||||
|
|
||||||
=======
|
|
||||||
}
|
}
|
||||||
glUseProgram(programSprite);
|
glUseProgram(programSprite);
|
||||||
for (const auto& enemy : enemies) {
|
for (const auto& enemy : enemies) {
|
||||||
|
|
||||||
if (enemy->isAlive()) {
|
if (enemy->isAlive()) {
|
||||||
spriteRenderer->DrawSprite(texture::spriteTexture, enemy->modelMatrix, programSprite);
|
spriteRenderer->DrawSprite(texture::spriteTexture, enemy->modelMatrix, programSprite);
|
||||||
}
|
}
|
||||||
@ -135,13 +134,20 @@ TextureTuple getRandomPlanetTexture() {
|
|||||||
for (const auto& enemy : enemies) {
|
for (const auto& enemy : enemies) {
|
||||||
if (enemy->isAlive()) {
|
if (enemy->isAlive()) {
|
||||||
enemy->attack(spaceship->spaceshipPos, glfwGetTime());
|
enemy->attack(spaceship->spaceshipPos, glfwGetTime());
|
||||||
enemy->renderBullets(glfwGetTime(), program);
|
enemy->renderBullets(glfwGetTime(), program, gameEntities);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
>>>>>>> 6ccdec5 (Add drawing health bars for enemies)
|
TextureTuple getRandomPlanetTexture() {
|
||||||
|
int textureIndex = rand() % planetTextures.size();
|
||||||
|
TextureTuple selectedTextures = planetTextures[textureIndex];
|
||||||
|
//GLuint textureID = selectedTextures.textureID;
|
||||||
|
//GLuint normalMapID = selectedTextures.normalMapID;
|
||||||
|
|
||||||
|
return planetTextures[textureIndex];
|
||||||
|
}
|
||||||
void renderShadowapSun() {
|
void renderShadowapSun() {
|
||||||
float time = glfwGetTime();
|
float time = glfwGetTime();
|
||||||
glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT);
|
glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT);
|
||||||
@ -174,10 +180,15 @@ void renderScene(GLFWwindow* window)
|
|||||||
for (Planet* p : planets) {
|
for (Planet* p : planets) {
|
||||||
p->draw(time, programTex);
|
p->draw(time, programTex);
|
||||||
}
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
|
|
||||||
spaceship->renderBullets(glfwGetTime(), program);
|
spaceship->renderBullets(glfwGetTime(), program);
|
||||||
|
=======
|
||||||
|
std::vector<GameEntity*> gameEntities(enemies.begin(), enemies.end());
|
||||||
|
spaceship->renderBullets(glfwGetTime(), program, gameEntities);
|
||||||
|
>>>>>>> 9586849 (Add collision detection and taking dmg)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -193,6 +204,7 @@ void renderScene(GLFWwindow* window)
|
|||||||
texture::spaceshipTexture,
|
texture::spaceshipTexture,
|
||||||
spaceship->roughness, spaceship->metallic, programTex
|
spaceship->roughness, spaceship->metallic, programTex
|
||||||
);
|
);
|
||||||
|
<<<<<<< HEAD
|
||||||
|
|
||||||
<<<<<<< HEAD
|
<<<<<<< HEAD
|
||||||
//Core::SetActiveTexture(texture::earthTexture, "textureSampler", programTex, 0);
|
//Core::SetActiveTexture(texture::earthTexture, "textureSampler", programTex, 0);
|
||||||
@ -222,6 +234,9 @@ void renderScene(GLFWwindow* window)
|
|||||||
glm::mat4 viewMatrix = Core::createViewMatrix(spaceship->cameraPos, spaceship->cameraDir, cameraUp);
|
glm::mat4 viewMatrix = Core::createViewMatrix(spaceship->cameraPos, spaceship->cameraDir, cameraUp);
|
||||||
spaceship->renderParticles(programParticle, viewMatrix, Core::createPerspectiveMatrix(), time);
|
spaceship->renderParticles(programParticle, viewMatrix, Core::createPerspectiveMatrix(), time);
|
||||||
=======
|
=======
|
||||||
|
=======
|
||||||
|
renderHUD();
|
||||||
|
>>>>>>> 9586849 (Add collision detection and taking dmg)
|
||||||
renderEnemies();
|
renderEnemies();
|
||||||
|
|
||||||
//drawObjectPBR(sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(10.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3), 0.3, 0.0, program);
|
//drawObjectPBR(sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(10.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3), 0.3, 0.0, program);
|
||||||
@ -271,9 +286,12 @@ void createSolarSystem(glm::vec3 sunPos, float sunScale, float* planetSizes, int
|
|||||||
|
|
||||||
void createEnemies() {
|
void createEnemies() {
|
||||||
|
|
||||||
enemies.push_back(new Enemy(100,100, glm::mat4(1.0f), 20, 5.0f));
|
enemies.push_back(new Enemy(100.0f,100.0f, glm::mat4(1.0f), 1.0f, 5.0f));
|
||||||
enemies.push_back(new Enemy(100,100, glm::translate(glm::mat4(1.0f) , glm::vec3(1.f,1.f,1.f)), 15, 5.0f));
|
enemies.push_back(new Enemy(100.0f,100.0f, glm::translate(glm::mat4(1.0f) , glm::vec3(1.f,1.f,1.f)), 1.0f, 5.0f));
|
||||||
enemies.push_back(new Enemy(100,100, glm::translate(glm::mat4(1.0f), glm::vec3(-1.f, 2.f, -0.9f)), 25, 5.0f));
|
enemies.push_back(new Enemy(100.0f,100.0f, glm::translate(glm::mat4(1.0f), glm::vec3(-1.f, 2.f, -0.9f)), 1.0f, 5.0f));
|
||||||
|
|
||||||
|
//obiekty do ktorych bedzie sprawdzana kolizja dla pociskow enemy
|
||||||
|
gameEntities.push_back(spaceship);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user