Compare commits
5 Commits
feature/au
...
feature/re
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5939f7702 | ||
|
|
2cec8e9a62 | ||
|
|
820c5a2eb0 | ||
|
|
942ddf24d8 | ||
|
|
1f2258bc01 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -428,6 +428,4 @@ FodyWeavers.xsd
|
|||||||
**/docs/*
|
**/docs/*
|
||||||
**/doc/*
|
**/doc/*
|
||||||
|
|
||||||
**/pose_iter_160000.caffemodel
|
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/c++,visualstudio,visualstudiocode,opencv
|
# End of https://www.toptal.com/developers/gitignore/api/c++,visualstudio,visualstudiocode,opencv
|
||||||
|
|||||||
0
gameoverScene.cpp
Normal file
0
gameoverScene.cpp
Normal file
0
gameoverScene.h
Normal file
0
gameoverScene.h
Normal file
@@ -1,31 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
|
||||||
#include "../entities/entity.h"
|
|
||||||
|
|
||||||
namespace collision
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* This structure represents a collision box inside the world.
|
|
||||||
*
|
|
||||||
* center_pos: The center position of the collision box
|
|
||||||
* size: The size in each axis of the collision box
|
|
||||||
*/
|
|
||||||
struct Box
|
|
||||||
{
|
|
||||||
glm::vec3 center_pos;
|
|
||||||
glm::vec3 size;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This structure represents a collision between 2 entities
|
|
||||||
*
|
|
||||||
* entity1: The first entity
|
|
||||||
* entity2: The second entity
|
|
||||||
*/
|
|
||||||
struct Collision
|
|
||||||
{
|
|
||||||
entities::Entity& entity1;
|
|
||||||
entities::Entity& entity2;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
#include "collision_handler.h"
|
|
||||||
|
|
||||||
namespace collision
|
|
||||||
{
|
|
||||||
void CheckCollisions(std::vector<entities::CollisionEntity*>& entities)
|
|
||||||
{
|
|
||||||
if (entities.size() == 2)
|
|
||||||
{
|
|
||||||
if (entities[0]->IsColliding(*entities[1]))
|
|
||||||
{
|
|
||||||
collision::Collision c = { *entities[0], *entities[1] };
|
|
||||||
entities[0]->OnCollide(c);
|
|
||||||
entities[1]->OnCollide(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < entities.size() - 2; i++)
|
|
||||||
{
|
|
||||||
entities::CollisionEntity* entity = entities[i];
|
|
||||||
|
|
||||||
for (int j = i + 1; i < entities.size() - 1; j++)
|
|
||||||
{
|
|
||||||
entities::CollisionEntity* entity2 = entities[j];
|
|
||||||
|
|
||||||
if (entity == entity2)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entity->IsColliding(*entity2))
|
|
||||||
{
|
|
||||||
collision::Collision c = { *entity, *entity2 };
|
|
||||||
entity->OnCollide(c);
|
|
||||||
entity2->OnCollide(c);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include "../entities/collision_entity.h"
|
|
||||||
#include "collision.h"
|
|
||||||
|
|
||||||
namespace collision
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* @brief: This function will check all the collision entities for
|
|
||||||
* collisions and call the OnCollide function when a entity collides.
|
|
||||||
*
|
|
||||||
* @param entities: A list with all the collision entities.
|
|
||||||
*/
|
|
||||||
void CheckCollisions(std::vector<entities::CollisionEntity*>& entities);
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
#include "FaceDetector.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Author: Pierfrancesco Soffritti https://github.com/PierfrancescoSoffritti
|
|
||||||
*/
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
Rect getFaceRect(Mat input);
|
|
||||||
|
|
||||||
String faceClassifierFileName = "res/haarcascade_frontalface_alt.xml";
|
|
||||||
CascadeClassifier faceCascadeClassifier;
|
|
||||||
|
|
||||||
FaceDetector::FaceDetector(void) {
|
|
||||||
if (!faceCascadeClassifier.load(faceClassifierFileName))
|
|
||||||
throw runtime_error("can't load file " + faceClassifierFileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FaceDetector::removeFaces(Mat input, Mat output) {
|
|
||||||
vector<Rect> faces;
|
|
||||||
Mat frameGray;
|
|
||||||
|
|
||||||
cvtColor(input, frameGray, CV_BGR2GRAY);
|
|
||||||
equalizeHist(frameGray, frameGray);
|
|
||||||
|
|
||||||
faceCascadeClassifier.detectMultiScale(frameGray, faces, 1.1, 2, 0 | 2, Size(120, 120)); // HAAR_SCALE_IMAGE is 2
|
|
||||||
|
|
||||||
for (size_t i = 0; i < faces.size(); i++) {
|
|
||||||
rectangle(
|
|
||||||
output,
|
|
||||||
Point(faces[i].x, faces[i].y),
|
|
||||||
Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
|
|
||||||
Scalar(0, 0, 0),
|
|
||||||
-1
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rect getFaceRect(Mat input) {
|
|
||||||
vector<Rect> faceRectangles;
|
|
||||||
Mat inputGray;
|
|
||||||
|
|
||||||
cvtColor(input, inputGray, CV_BGR2GRAY);
|
|
||||||
equalizeHist(inputGray, inputGray);
|
|
||||||
|
|
||||||
faceCascadeClassifier.detectMultiScale(inputGray, faceRectangles, 1.1, 2, 0 | 2, Size(120, 120)); // HAAR_SCALE_IMAGE is 2
|
|
||||||
|
|
||||||
if (faceRectangles.size() > 0)
|
|
||||||
return faceRectangles[0];
|
|
||||||
else
|
|
||||||
return Rect(0, 0, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <opencv2/opencv.hpp>
|
|
||||||
#include <opencv2/imgproc/types_c.h>
|
|
||||||
#include <opencv2/objdetect.hpp>
|
|
||||||
#include <opencv2/core.hpp>
|
|
||||||
#include <opencv2/objdetect/objdetect.hpp>
|
|
||||||
/*
|
|
||||||
Author: Pierfrancesco Soffritti https://github.com/PierfrancescoSoffritti
|
|
||||||
*/
|
|
||||||
|
|
||||||
using namespace cv;
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
class FaceDetector {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* @brief Constructor for the class FaceDetector, loads training data from a file
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
FaceDetector(void);
|
|
||||||
/**
|
|
||||||
* @brief Detects faces on an image and blocks them with a black rectangle
|
|
||||||
*
|
|
||||||
* @param input Input image
|
|
||||||
* @param output Output image
|
|
||||||
*/
|
|
||||||
void removeFaces(Mat input, Mat output);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -151,16 +151,9 @@ namespace computervision
|
|||||||
drawVectorPoints(frame, filtered_finger_points, color_yellow, false);
|
drawVectorPoints(frame, filtered_finger_points, color_yellow, false);
|
||||||
putText(frame, to_string(filtered_finger_points.size()), center_bounding_rect, FONT_HERSHEY_PLAIN, 3, color_purple);
|
putText(frame, to_string(filtered_finger_points.size()), center_bounding_rect, FONT_HERSHEY_PLAIN, 3, color_purple);
|
||||||
|
|
||||||
amount_of_fingers = filtered_finger_points.size();
|
|
||||||
|
|
||||||
return contours_image;
|
return contours_image;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FingerCount::getAmountOfFingers()
|
|
||||||
{
|
|
||||||
return amount_of_fingers;
|
|
||||||
}
|
|
||||||
|
|
||||||
double FingerCount::findPointsDistance(Point a, Point b) {
|
double FingerCount::findPointsDistance(Point a, Point b) {
|
||||||
Point difference = a - b;
|
Point difference = a - b;
|
||||||
return sqrt(difference.ddot(difference));
|
return sqrt(difference.ddot(difference));
|
||||||
|
|||||||
@@ -24,13 +24,6 @@ namespace computervision
|
|||||||
*/
|
*/
|
||||||
Mat findFingersCount(Mat input_image, Mat frame);
|
Mat findFingersCount(Mat input_image, Mat frame);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief gets the currently held-up finger count.
|
|
||||||
*
|
|
||||||
* @return the currently held-up finger count
|
|
||||||
*/
|
|
||||||
int getAmountOfFingers();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// colors to use
|
// colors to use
|
||||||
Scalar color_blue;
|
Scalar color_blue;
|
||||||
@@ -41,8 +34,6 @@ namespace computervision
|
|||||||
Scalar color_yellow;
|
Scalar color_yellow;
|
||||||
Scalar color_purple;
|
Scalar color_purple;
|
||||||
|
|
||||||
int amount_of_fingers;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief finds the distance between 2 points.
|
* @brief finds the distance between 2 points.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
|
|
||||||
#include <opencv2/videoio.hpp>
|
|
||||||
#include <opencv2/highgui.hpp>
|
|
||||||
#include <opencv2/video.hpp>
|
|
||||||
|
|
||||||
#include "ObjectDetection.h"
|
#include "ObjectDetection.h"
|
||||||
#include "BackgroundRemover.h"
|
#include "BackgroundRemover.h"
|
||||||
#include "SkinDetector.h"
|
#include "SkinDetector.h"
|
||||||
#include "FaceDetector.h"
|
|
||||||
#include "FingerCount.h"
|
#include "FingerCount.h"
|
||||||
|
|
||||||
namespace computervision
|
namespace computervision
|
||||||
@@ -15,63 +10,48 @@ namespace computervision
|
|||||||
|
|
||||||
cv::Mat img, imgGray, img2, img2Gray, img3, img4;
|
cv::Mat img, imgGray, img2, img2Gray, img3, img4;
|
||||||
|
|
||||||
int handMaskStartXPos, handMaskStartYPos, handMaskWidth, handMaskHeight;
|
|
||||||
bool handMaskGenerated = false;
|
|
||||||
|
|
||||||
Mat frame, frameOut, handMask, foreground, fingerCountDebug;
|
Mat frame, frameOut, handMask, foreground, fingerCountDebug;
|
||||||
BackgroundRemover backgroundRemover;
|
BackgroundRemover backgroundRemover;
|
||||||
SkinDetector skinDetector;
|
SkinDetector skinDetector;
|
||||||
FaceDetector faceDetector;
|
|
||||||
FingerCount fingerCount;
|
FingerCount fingerCount;
|
||||||
|
|
||||||
|
|
||||||
ObjectDetection::ObjectDetection()
|
ObjectDetection::ObjectDetection()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
cv::Mat ObjectDetection::readCamera() {
|
bool ObjectDetection::setup()
|
||||||
cap.read(img);
|
{
|
||||||
return img;
|
if (!cap.isOpened()) {
|
||||||
|
cout << "Can't find camera!" << endl;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjectDetection::detectHand(Mat cameraFrame)
|
cap.read(frame);
|
||||||
{
|
frameOut = frame.clone();
|
||||||
Mat inputFrame = generateHandMaskSquare(cameraFrame);
|
|
||||||
frameOut = inputFrame.clone();
|
|
||||||
|
|
||||||
// detect skin color
|
|
||||||
skinDetector.drawSkinColorSampler(frameOut);
|
skinDetector.drawSkinColorSampler(frameOut);
|
||||||
|
|
||||||
// remove background from image
|
foreground = backgroundRemover.getForeground(frame);
|
||||||
foreground = backgroundRemover.getForeground(inputFrame);
|
|
||||||
|
|
||||||
// detect the hand contours
|
|
||||||
handMask = skinDetector.getSkinMask(foreground);
|
handMask = skinDetector.getSkinMask(foreground);
|
||||||
|
|
||||||
// count the amount of fingers and put the info on the matrix
|
|
||||||
fingerCountDebug = fingerCount.findFingersCount(handMask, frameOut);
|
fingerCountDebug = fingerCount.findFingersCount(handMask, frameOut);
|
||||||
|
|
||||||
// get the amount of fingers
|
//backgroundRemover.calibrate(frame);
|
||||||
int fingers_amount = fingerCount.getAmountOfFingers();
|
|
||||||
|
|
||||||
// draw the hand rectangle on the camera input, and draw text showing if the hand is open or closed.
|
|
||||||
drawHandMaskRect(&cameraFrame);
|
|
||||||
string hand_text = fingers_amount > 0 ? "open" : "closed";
|
|
||||||
putText(cameraFrame,hand_text, Point(10, 75), FONT_HERSHEY_PLAIN, 2.0, Scalar(255, 0, 255),3);
|
|
||||||
imshow("camera", cameraFrame);
|
|
||||||
|
|
||||||
/* imshow("output", frameOut);
|
imshow("output", frameOut);
|
||||||
imshow("foreground", foreground);
|
imshow("foreground", foreground);
|
||||||
imshow("handMask", handMask);
|
imshow("handMask", handMask);
|
||||||
imshow("handDetection", fingerCountDebug);*/
|
imshow("handDetection", fingerCountDebug);
|
||||||
|
|
||||||
int key = waitKey(1);
|
int key = waitKey(1);
|
||||||
|
|
||||||
if (key == 98) // b, calibrate the background
|
if (key == 98) // b
|
||||||
backgroundRemover.calibrate(inputFrame);
|
backgroundRemover.calibrate(frame);
|
||||||
else if (key == 115) // s, calibrate the skin color
|
else if (key == 115) // s
|
||||||
skinDetector.calibrate(inputFrame);
|
skinDetector.calibrate(frame);
|
||||||
|
|
||||||
return fingers_amount > 0;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectDetection::calculateDifference()
|
void ObjectDetection::calculateDifference()
|
||||||
@@ -88,32 +68,14 @@ namespace computervision
|
|||||||
imshow("threshold", img4);
|
imshow("threshold", img4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObjectDetection::detect()
|
||||||
cv::Mat ObjectDetection::generateHandMaskSquare(cv::Mat img)
|
|
||||||
{
|
{
|
||||||
handMaskStartXPos = 20;
|
int key = waitKey(1);
|
||||||
handMaskStartYPos = img.rows / 5;
|
|
||||||
handMaskWidth = img.cols / 3;
|
|
||||||
handMaskHeight = img.cols / 3;
|
|
||||||
|
|
||||||
|
if (key == 98) // b
|
||||||
cv::Mat mask = cv::Mat::zeros(img.size(), img.type());
|
backgroundRemover.calibrate(frame);
|
||||||
cv::Mat dstImg = cv::Mat::zeros(img.size(), img.type());
|
else if (key == 115) // s
|
||||||
|
skinDetector.calibrate(frame);
|
||||||
cv::rectangle(mask, Rect(handMaskStartXPos, handMaskStartYPos, handMaskWidth, handMaskHeight), Scalar(255, 255, 255), -1);
|
|
||||||
|
|
||||||
img.copyTo(dstImg, mask);
|
|
||||||
|
|
||||||
handMaskGenerated = true;
|
|
||||||
return dstImg;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ObjectDetection::drawHandMaskRect(cv::Mat* input)
|
|
||||||
{
|
|
||||||
if (!handMaskGenerated) return false;
|
|
||||||
rectangle(*input, Rect(handMaskStartXPos, handMaskStartYPos, handMaskWidth, handMaskHeight), Scalar(255, 255, 255));
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectDetection::showWebcam()
|
void ObjectDetection::showWebcam()
|
||||||
|
|||||||
@@ -22,7 +22,13 @@ namespace computervision
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
ObjectDetection();
|
ObjectDetection();
|
||||||
|
/**
|
||||||
|
* @brief Initializes the object detection, captures a frame and modifies it
|
||||||
|
* so it is ready to use for object detection
|
||||||
|
*
|
||||||
|
* @return return true if webcam is connected, returns false if it isn't
|
||||||
|
*/
|
||||||
|
bool setup();
|
||||||
/**
|
/**
|
||||||
* @brief Displays an image of the current webcam-footage
|
* @brief Displays an image of the current webcam-footage
|
||||||
*
|
*
|
||||||
@@ -34,36 +40,11 @@ namespace computervision
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void calculateDifference();
|
void calculateDifference();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief generates the square that will hold the mask in which the hand will be detected.
|
* @brief Listens for keypresses and handles them
|
||||||
*
|
*
|
||||||
* @param img the current camear frame
|
|
||||||
* @return a matrix containing the mask
|
|
||||||
*/
|
*/
|
||||||
cv::Mat generateHandMaskSquare(cv::Mat img);
|
void detect();
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief reads the camera and returns it in a matrix.
|
|
||||||
*
|
|
||||||
* @return the camera frame in a matrix
|
|
||||||
*/
|
|
||||||
cv::Mat readCamera();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief detects a hand based on the given hand mask input frame.
|
|
||||||
*
|
|
||||||
* @param inputFrame the input frame from the camera
|
|
||||||
* @return true if hand is open, false if hand is closed
|
|
||||||
*/
|
|
||||||
bool detectHand(cv::Mat cameraFrame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief draws the hand mask rectangle on the given input matrix.
|
|
||||||
*
|
|
||||||
* @param input the input matrix to draw the rectangle on
|
|
||||||
*/
|
|
||||||
bool drawHandMaskRect(cv::Mat *input);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace computervision
|
|||||||
void SkinDetector::drawSkinColorSampler(Mat input) {
|
void SkinDetector::drawSkinColorSampler(Mat input) {
|
||||||
int frameWidth = input.size().width, frameHeight = input.size().height;
|
int frameWidth = input.size().width, frameHeight = input.size().height;
|
||||||
|
|
||||||
int rectangleSize = 25;
|
int rectangleSize = 20;
|
||||||
Scalar rectangleColor = Scalar(255, 0, 255);
|
Scalar rectangleColor = Scalar(255, 0, 255);
|
||||||
|
|
||||||
skinColorSamplerRectangle1 = Rect(frameWidth / 5, frameHeight / 2, rectangleSize, rectangleSize);
|
skinColorSamplerRectangle1 = Rect(frameWidth / 5, frameHeight / 2, rectangleSize, rectangleSize);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,8 @@ namespace entities
|
|||||||
|
|
||||||
class Entity
|
class Entity
|
||||||
{
|
{
|
||||||
protected:
|
private:
|
||||||
models::TexturedModel model;
|
models::TexturedModel model;
|
||||||
|
|
||||||
glm::vec3 position;
|
glm::vec3 position;
|
||||||
glm::vec3 rotation;
|
glm::vec3 rotation;
|
||||||
float scale;
|
float scale;
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
#include "collision_entity.h"
|
|
||||||
|
|
||||||
namespace entities
|
|
||||||
{
|
|
||||||
CollisionEntity::CollisionEntity(const models::TexturedModel& model, const glm::vec3& position,
|
|
||||||
const glm::vec3& rotation, float scale, const collision::Box& bounding_box)
|
|
||||||
: Entity(model, position, rotation, scale),
|
|
||||||
bounding_box(bounding_box)
|
|
||||||
{
|
|
||||||
MoveCollisionBox();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CollisionEntity::OnCollide(const collision::Collision& collision)
|
|
||||||
{
|
|
||||||
if (on_collide != nullptr)
|
|
||||||
{
|
|
||||||
on_collide(collision);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CollisionEntity::IsColliding(const glm::vec3& point) const
|
|
||||||
{
|
|
||||||
return (point.x >= min_xyz.x && point.x <= max_xyz.x) &&
|
|
||||||
(point.y >= min_xyz.y && point.y <= max_xyz.y) &&
|
|
||||||
(point.z >= min_xyz.z && point.z <= max_xyz.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CollisionEntity::IsColliding(const CollisionEntity& e) const
|
|
||||||
{
|
|
||||||
return (min_xyz.x <= e.max_xyz.x && max_xyz.x >= e.min_xyz.x) &&
|
|
||||||
(min_xyz.y <= e.max_xyz.y && max_xyz.y >= e.min_xyz.y) &&
|
|
||||||
(min_xyz.z <= e.max_xyz.z && max_xyz.z >= e.min_xyz.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CollisionEntity::MoveCollisionBox()
|
|
||||||
{
|
|
||||||
bounding_box.center_pos = position;
|
|
||||||
|
|
||||||
const glm::vec3 size = bounding_box.size;
|
|
||||||
|
|
||||||
min_xyz = bounding_box.center_pos;
|
|
||||||
max_xyz = glm::vec3(min_xyz.x + size.x, min_xyz.y + size.y, min_xyz.z + size.z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "entity.h"
|
|
||||||
#include "../collision/collision.h"
|
|
||||||
|
|
||||||
namespace entities
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* This class is an entity with a collision box
|
|
||||||
*/
|
|
||||||
class CollisionEntity : public Entity
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
collision::Box bounding_box;
|
|
||||||
|
|
||||||
glm::vec3 min_xyz;
|
|
||||||
glm::vec3 max_xyz;
|
|
||||||
|
|
||||||
void (*on_collide)(const collision::Collision& collision);
|
|
||||||
|
|
||||||
public:
|
|
||||||
CollisionEntity(const models::TexturedModel& model, const glm::vec3& position, const glm::vec3& rotation,
|
|
||||||
float scale, const collision::Box& bounding_box);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: A function to do some sort of behaviour when the entity collides
|
|
||||||
*
|
|
||||||
* @param collision: The collision
|
|
||||||
*/
|
|
||||||
virtual void OnCollide(const collision::Collision& collision);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: A function to check if the entity is colliding with a point in 3D space
|
|
||||||
*
|
|
||||||
* @param point: The point to check if its colliding with the entity
|
|
||||||
*
|
|
||||||
* @return: True is the entity is colliding, false if not
|
|
||||||
*/
|
|
||||||
bool IsColliding(const glm::vec3& point) const;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: A function to check if the entity is colliding with another entity
|
|
||||||
*
|
|
||||||
* @param e: The other entity to check if its colliding with this
|
|
||||||
*
|
|
||||||
* @return: True is the entity is colliding, false if not
|
|
||||||
*/
|
|
||||||
bool IsColliding(const CollisionEntity& e) const;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: A function to set the collision behaviour of the entity
|
|
||||||
*
|
|
||||||
* @param function: A function pointer to a function with the collision behaviour
|
|
||||||
*/
|
|
||||||
void SetCollisionBehaviour(void (*function)(const collision::Collision& collision))
|
|
||||||
{ if (function != nullptr) { on_collide = function; } }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: This method moves the collision to the center of the entity
|
|
||||||
*/
|
|
||||||
void MoveCollisionBox();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include "gui_interactable.h"
|
#include "gui_interactable.h"
|
||||||
|
|
||||||
|
|||||||
128
src/main.cpp
128
src/main.cpp
@@ -3,10 +3,10 @@
|
|||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
#define STB_IMAGE_IMPLEMENTATION
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
|
||||||
|
|
||||||
#include "stb_image.h"
|
#include "stb_image.h"
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
#include <opencv2/core.hpp>
|
#include <opencv2/core.hpp>
|
||||||
#include <opencv2/videoio.hpp>
|
#include <opencv2/videoio.hpp>
|
||||||
@@ -19,9 +19,10 @@
|
|||||||
#include "renderEngine/renderer.h"
|
#include "renderEngine/renderer.h"
|
||||||
#include "shaders/entity_shader.h"
|
#include "shaders/entity_shader.h"
|
||||||
#include "toolbox/toolbox.h"
|
#include "toolbox/toolbox.h"
|
||||||
|
|
||||||
#include "scenes/scene.h"
|
#include "scenes/scene.h"
|
||||||
#include "scenes/in_Game_Scene.h"
|
#include "scenes/startupScene.h"
|
||||||
#include "scenes/startup_Scene.h"
|
#include "scenes/inGameScene.h"
|
||||||
|
|
||||||
#include "computervision/ObjectDetection.h"
|
#include "computervision/ObjectDetection.h"
|
||||||
|
|
||||||
@@ -32,11 +33,15 @@
|
|||||||
static double UpdateDelta();
|
static double UpdateDelta();
|
||||||
|
|
||||||
static GLFWwindow* window;
|
static GLFWwindow* window;
|
||||||
scene::Scene* current_scene;
|
|
||||||
|
//Scene management variables
|
||||||
|
std::map<Scenes, Scene*> scenes;
|
||||||
|
Scene* current_scene = nullptr;
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
#pragma region OPENGL_SETTINGS
|
#pragma region OPENGL_SETTINGS
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
throw "Could not inditialize glwf";
|
throw "Could not inditialize glwf";
|
||||||
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGT, "SDBA", NULL, NULL);
|
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGT, "SDBA", NULL, NULL);
|
||||||
@@ -48,52 +53,101 @@ int main(void)
|
|||||||
glfwMakeContextCurrent(window);
|
glfwMakeContextCurrent(window);
|
||||||
glewInit();
|
glewInit();
|
||||||
glGetError();
|
glGetError();
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
|
||||||
current_scene = new scene::Startup_Scene();
|
|
||||||
|
|
||||||
glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int scancode, int action, int mods)
|
glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
|
current_scene->onKey(key, scancode, action, mods);
|
||||||
if (key == GLFW_KEY_ESCAPE)
|
if (key == GLFW_KEY_ESCAPE)
|
||||||
{
|
|
||||||
glfwSetWindowShouldClose(window, true);
|
glfwSetWindowShouldClose(window, true);
|
||||||
}
|
|
||||||
|
|
||||||
current_scene->onKey(window, key, scancode, action, mods);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
bool window_open = true;
|
scenes[Scenes::STARTUP] = new StartupScene();
|
||||||
// Main game loop
|
scenes[Scenes::INGAME] = new InGameScene();
|
||||||
while (!glfwWindowShouldClose(window) && window_open)
|
|
||||||
|
models::RawModel raw_model = render_engine::LoadObjModel("res/House.obj");
|
||||||
|
models::ModelTexture texture = { render_engine::loader::LoadTexture("res/Texture.png") };
|
||||||
|
texture.shine_damper = 10;
|
||||||
|
texture.reflectivity = 0;
|
||||||
|
models::TexturedModel model = { raw_model, texture };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* load and add some models (in this case some level sections) to the entities list.
|
||||||
|
* */
|
||||||
|
std::vector<entities::Entity> entities;
|
||||||
|
int z = 0;
|
||||||
|
for (int i = 0; i < 5; ++i)
|
||||||
{
|
{
|
||||||
//Update
|
entities.push_back(entities::Entity(model, glm::vec3(0, -50, -50 - z), glm::vec3(0, 90, 0), 20));
|
||||||
|
z += (raw_model.model_size.x * 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<entities::Light> lights;
|
||||||
|
lights.push_back(entities::Light(glm::vec3(0, 1000, -7000), glm::vec3(5, 5, 5)));
|
||||||
|
lights.push_back(entities::Light(glm::vec3(0, 0, -30), glm::vec3(2, 0, 2), glm::vec3(0.0001f, 0.0001f, 0.0001f)));
|
||||||
|
lights.push_back(entities::Light(glm::vec3(0, 0, -200), glm::vec3(0, 2, 0), glm::vec3(0.0001f, 0.0001f, 0.0001f)));
|
||||||
|
|
||||||
|
shaders::EntityShader shader;
|
||||||
|
shader.Init();
|
||||||
|
render_engine::renderer::Init(shader);
|
||||||
|
|
||||||
|
entities::Camera camera(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0));
|
||||||
|
|
||||||
|
|
||||||
|
// GUI stuff
|
||||||
|
shaders::GuiShader gui_shader;
|
||||||
|
gui_shader.Init();
|
||||||
|
|
||||||
|
std::vector<gui::GuiTexture*> guis;
|
||||||
|
gui::Button button(render_engine::loader::LoadTexture("res/Mayo.png"), glm::vec2(0.5f, 0.0f), glm::vec2(0.25f, 0.25f));
|
||||||
|
button.SetHoverTexture(render_engine::loader::LoadTexture("res/Texture.png"));
|
||||||
|
button.SetClickedTexture(render_engine::loader::LoadTexture("res/Mayo.png"));
|
||||||
|
button.SetOnClickAction([]()
|
||||||
|
{
|
||||||
|
std::cout << "I got clicked on!" << std::endl;
|
||||||
|
});
|
||||||
|
guis.push_back(&button);
|
||||||
|
|
||||||
|
|
||||||
|
// Main game loop
|
||||||
|
while (!glfwWindowShouldClose(window))
|
||||||
|
{
|
||||||
|
// Update
|
||||||
const double delta = UpdateDelta();
|
const double delta = UpdateDelta();
|
||||||
|
camera.Move(window);
|
||||||
|
button.Update(window);
|
||||||
|
|
||||||
scene::Scenes return_value = current_scene->start(window);
|
// Render
|
||||||
delete current_scene;
|
render_engine::renderer::Prepare();
|
||||||
|
|
||||||
switch (return_value) {
|
// Start rendering the entities
|
||||||
case scene::Scenes::STOP:
|
shader.Start();
|
||||||
window_open = false;
|
shader.LoadSkyColor(render_engine::renderer::SKY_COLOR);
|
||||||
break;
|
shader.LoadLights(lights);
|
||||||
|
shader.LoadViewMatrix(camera);
|
||||||
|
|
||||||
case scene::Scenes::STARTUP:
|
// Renders each entity in the entities list
|
||||||
current_scene = new scene::Startup_Scene();
|
for (entities::Entity& entity : entities)
|
||||||
break;
|
{
|
||||||
|
render_engine::renderer::Render(entity, shader);
|
||||||
case scene::Scenes::INGAME:
|
|
||||||
current_scene = new scene::In_Game_Scene();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
std::cout << "Wrong return value!!! ->" << std::endl;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean up -> preventing memory leaks!!!
|
// Stop rendering the entities
|
||||||
std::cout << "ending..." << std::endl;
|
shader.Stop();
|
||||||
|
|
||||||
|
// Render GUI items
|
||||||
|
render_engine::renderer::Render(guis, gui_shader);
|
||||||
|
|
||||||
|
// Finish up
|
||||||
|
glfwSwapBuffers(window);
|
||||||
|
glfwPollEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up
|
||||||
|
shader.CleanUp();
|
||||||
|
gui_shader.CleanUp();
|
||||||
|
render_engine::loader::CleanUp();
|
||||||
|
current_scene->stop();
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
29
src/scenes/inGameScene.cpp
Normal file
29
src/scenes/inGameScene.cpp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#include "inGameScene.h"
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
void InGameScene::start()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InGameScene::stop()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InGameScene::render()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InGameScene::update(GLFWwindow* window)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InGameScene::onKey(int key, int scancode, int action, int mods)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* misschien iets van als niet in settings dan hoeft alleen escape een knop zijn als reserve optie. Als wel in settings, dan heb je hetzelfde hoe je in het in het begin scherm hebt.
|
||||||
|
**/
|
||||||
|
}
|
||||||
17
src/scenes/inGameScene.h
Normal file
17
src/scenes/inGameScene.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "scene.h"
|
||||||
|
class InGameScene : public Scene
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
void start() override;
|
||||||
|
void stop() override;
|
||||||
|
void render() override;
|
||||||
|
void update(GLFWwindow* window) override;
|
||||||
|
void onKey(int key, int scancode, int action, int mods) override;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
#include <iostream>
|
|
||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include "in_Game_Scene.h"
|
|
||||||
#include "startup_Scene.h"
|
|
||||||
#include "../gui/gui_interactable.h"
|
|
||||||
#include "../models/model.h"
|
|
||||||
#include "../renderEngine/loader.h"
|
|
||||||
#include "../renderEngine/obj_loader.h"
|
|
||||||
#include "../renderEngine/renderer.h"
|
|
||||||
#include "../shaders/entity_shader.h"
|
|
||||||
#include "../toolbox/toolbox.h"
|
|
||||||
#include <deque>
|
|
||||||
|
|
||||||
#define MAX_MODEL_DEQUE_SIZE 6 // max amount of models to load at the same time
|
|
||||||
#define UPCOMING_MODEL_AMOUNT 4 // how much models should be loaded in front of us
|
|
||||||
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
std::deque<entities::Entity> house_models;
|
|
||||||
std::deque<entities::Light> lights;
|
|
||||||
std::deque<entities::Entity> trees;
|
|
||||||
|
|
||||||
models::RawModel raw_model;
|
|
||||||
models::ModelTexture texture;
|
|
||||||
shaders::EntityShader* shader;
|
|
||||||
shaders::GuiShader* gui_shader;
|
|
||||||
entities::Camera camera(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0));
|
|
||||||
std::vector<gui::GuiTexture*> guis;
|
|
||||||
|
|
||||||
models::TexturedModel model;
|
|
||||||
models::TexturedModel tree;
|
|
||||||
|
|
||||||
|
|
||||||
In_Game_Scene::In_Game_Scene()
|
|
||||||
{
|
|
||||||
shader = new shaders::EntityShader;
|
|
||||||
shader->Init();
|
|
||||||
render_engine::renderer::Init(*shader);
|
|
||||||
|
|
||||||
gui_shader = new shaders::GuiShader();
|
|
||||||
gui_shader->Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief loads a new chunk in front of the camera, and deletes the chunk behind the camera.
|
|
||||||
*
|
|
||||||
* @param model_pos the amount of models the camera has passed already. This is the rounded result of (z position of camera) / (size of model)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void load_chunk(int model_pos)
|
|
||||||
{
|
|
||||||
std::cout << "loading model chunk" << std::endl;
|
|
||||||
if (house_models.size() >= MAX_MODEL_DEQUE_SIZE)
|
|
||||||
{
|
|
||||||
house_models.pop_back();
|
|
||||||
trees.pop_back();
|
|
||||||
}
|
|
||||||
int z_offset = model_pos * (model.raw_model.model_size.x * 20); // how much "in the distance" we should load the model
|
|
||||||
house_models.push_front(entities::Entity(model, glm::vec3(0, -50, -50 - z_offset), glm::vec3(0, 90, 0), 20));
|
|
||||||
|
|
||||||
trees.push_front(entities::Entity(tree, glm::vec3(0, 0, -50 - z_offset), glm::vec3(0, 90, 0), 3));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
scene::Scenes scene::In_Game_Scene::start(GLFWwindow* window)
|
|
||||||
{
|
|
||||||
raw_model = render_engine::LoadObjModel("res/House.obj");
|
|
||||||
texture = { render_engine::loader::LoadTexture("res/Texture.png") };
|
|
||||||
texture.shine_damper = 10;
|
|
||||||
texture.reflectivity = 0;
|
|
||||||
model = { raw_model, texture };
|
|
||||||
|
|
||||||
models::RawModel raw_tree_model = render_engine::LoadObjModel("res/Tree.obj");
|
|
||||||
models::ModelTexture tree_texture = { render_engine::loader::LoadTexture("res/TreeTexture.png") };
|
|
||||||
tree = { raw_tree_model, tree_texture };
|
|
||||||
|
|
||||||
|
|
||||||
// load the first few house models
|
|
||||||
for (int i = 0; i <= UPCOMING_MODEL_AMOUNT; i++)
|
|
||||||
{
|
|
||||||
load_chunk(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
lights.push_back(entities::Light(glm::vec3(0, 1000, -7000), glm::vec3(5, 5, 5))); // sun
|
|
||||||
lights.push_back(entities::Light(glm::vec3(0, 0, -30), glm::vec3(2, 0, 2), glm::vec3(0.0001f, 0.0001f, 0.0001f)));
|
|
||||||
lights.push_back(entities::Light(glm::vec3(0, 0, -200), glm::vec3(0, 2, 0), glm::vec3(0.0001f, 0.0001f, 0.0001f)));
|
|
||||||
|
|
||||||
// GUI stuff
|
|
||||||
gui::Button button(render_engine::loader::LoadTexture("res/Mayo.png"), glm::vec2(0.5f, 0.0f), glm::vec2(0.25f, 0.25f));
|
|
||||||
button.SetHoverTexture(render_engine::loader::LoadTexture("res/Texture.png"));
|
|
||||||
button.SetClickedTexture(render_engine::loader::LoadTexture("res/Mayo.png"));
|
|
||||||
button.SetOnClickAction([]()
|
|
||||||
{
|
|
||||||
std::cout << "I got clicked on!" << std::endl;
|
|
||||||
});
|
|
||||||
guis.push_back(&button);
|
|
||||||
|
|
||||||
|
|
||||||
while (return_value == scene::Scenes::INGAME)
|
|
||||||
{
|
|
||||||
update(window);
|
|
||||||
button.Update(window);
|
|
||||||
render();
|
|
||||||
|
|
||||||
glfwSwapBuffers(window);
|
|
||||||
glfwPollEvents();
|
|
||||||
}
|
|
||||||
shader->CleanUp();
|
|
||||||
gui_shader->CleanUp();
|
|
||||||
render_engine::loader::CleanUp();
|
|
||||||
return return_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::In_Game_Scene::render()
|
|
||||||
{
|
|
||||||
// Render
|
|
||||||
render_engine::renderer::Prepare();
|
|
||||||
|
|
||||||
shader->Start();
|
|
||||||
shader->LoadSkyColor(render_engine::renderer::SKY_COLOR);
|
|
||||||
shader->LoadLightsDeque(lights);
|
|
||||||
shader->LoadViewMatrix(camera);
|
|
||||||
|
|
||||||
for (entities::Entity& model_entity : house_models)
|
|
||||||
{
|
|
||||||
render_engine::renderer::Render(model_entity, *shader);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (entities::Entity& tree_entity : trees)
|
|
||||||
{
|
|
||||||
render_engine::renderer::Render(tree_entity, *shader);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render GUI items
|
|
||||||
render_engine::renderer::Render(guis, *gui_shader);
|
|
||||||
|
|
||||||
// Stop rendering the entities
|
|
||||||
shader->Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::In_Game_Scene::update(GLFWwindow* window)
|
|
||||||
{
|
|
||||||
camera.Move(window);
|
|
||||||
|
|
||||||
// calculate where the next house model should be loaded
|
|
||||||
static int last_model_pos = 0;
|
|
||||||
int model_pos = -round(camera.GetPosition().z / (model.raw_model.model_size.x * 20)); // how much models we have passed, minus because we are moving in the negative z axis
|
|
||||||
|
|
||||||
// if we have passed a model, load a new one and delete the one behind us
|
|
||||||
if (last_model_pos != model_pos)
|
|
||||||
{
|
|
||||||
load_chunk(model_pos + UPCOMING_MODEL_AMOUNT);
|
|
||||||
}
|
|
||||||
// remember the position at which the new model was added
|
|
||||||
last_model_pos = model_pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::In_Game_Scene::onKey(GLFWwindow* window, int key, int scancode, int action, int mods)
|
|
||||||
{
|
|
||||||
if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS)
|
|
||||||
{
|
|
||||||
return_value = scene::Scenes::STOP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include "scene.h"
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
|
|
||||||
class In_Game_Scene : public scene::Scene
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
scene::Scenes return_value = scene::Scenes::INGAME;
|
|
||||||
|
|
||||||
public:
|
|
||||||
In_Game_Scene();
|
|
||||||
|
|
||||||
Scenes start(GLFWwindow* window) override;
|
|
||||||
void render() override;
|
|
||||||
void update(GLFWwindow* window) override;
|
|
||||||
void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
1
src/scenes/scene.cpp
Normal file
1
src/scenes/scene.cpp
Normal file
@@ -0,0 +1 @@
|
|||||||
|
#include "scene.h"
|
||||||
@@ -1,31 +1,23 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include <map>
|
|
||||||
|
class Scene
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void start() = 0;
|
||||||
|
virtual void stop() = 0;
|
||||||
|
virtual void render() = 0;
|
||||||
|
virtual void update(GLFWwindow* window) = 0;
|
||||||
|
virtual void onKey(int key, int scancode, int action, int mods) {};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
namespace scene {
|
|
||||||
|
|
||||||
enum class Scenes
|
enum class Scenes
|
||||||
{
|
{
|
||||||
STARTUP,
|
STARTUP,
|
||||||
INGAME,
|
INGAME,
|
||||||
GAMEOVER,
|
GAMEOVER,
|
||||||
CALIBRATION,
|
SETTINGS,
|
||||||
STOP
|
CALIBRATION
|
||||||
};
|
};
|
||||||
|
|
||||||
class Scene
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual Scenes start(GLFWwindow* window) = 0;
|
|
||||||
virtual void render() = 0;
|
|
||||||
virtual void update(GLFWwindow* window) = 0;
|
|
||||||
virtual void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) {};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
31
src/scenes/startupScene.cpp
Normal file
31
src/scenes/startupScene.cpp
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#include "startupScene.h"
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
void StartupScene::start()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartupScene::stop()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartupScene::render()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartupScene::update(GLFWwindow* window)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartupScene::onKey(int key, int scancode, int action, int mods)
|
||||||
|
{
|
||||||
|
if (key == GLFW_KEY_DOWN && action == GLFW_RELEASE)
|
||||||
|
{
|
||||||
|
//ideetje voor het scrollen door het menu heen
|
||||||
|
//menuIndex = (menuIndex + 1) % 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
15
src/scenes/startupScene.h
Normal file
15
src/scenes/startupScene.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "scene.h"
|
||||||
|
class StartupScene : public Scene
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int menuIndex;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void start() override;
|
||||||
|
void stop() override;
|
||||||
|
void render() override;
|
||||||
|
void update(GLFWwindow* window) override;
|
||||||
|
void onKey(int key, int scancode, int action, int mods) override;
|
||||||
|
};
|
||||||
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include <map>
|
|
||||||
#include "startup_Scene.h"
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
|
|
||||||
scene::Scenes scene::Startup_Scene::start(GLFWwindow *window)
|
|
||||||
{
|
|
||||||
while (return_value == scene::Scenes::STARTUP)
|
|
||||||
{
|
|
||||||
render();
|
|
||||||
update(window);
|
|
||||||
|
|
||||||
glfwSwapBuffers(window);
|
|
||||||
glfwPollEvents();
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::Startup_Scene::render()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::Startup_Scene::update(GLFWwindow* window)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::Startup_Scene::onKey(GLFWwindow* window, int key, int scancode, int action, int mods)
|
|
||||||
{
|
|
||||||
if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS)
|
|
||||||
{
|
|
||||||
return_value = scene::Scenes::INGAME;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include "scene.h"
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
extern GLFWwindow* window;
|
|
||||||
|
|
||||||
class Startup_Scene : public scene::Scene
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
scene::Scenes return_value = scene::Scenes::STARTUP;
|
|
||||||
|
|
||||||
public:
|
|
||||||
Scenes start(GLFWwindow* window) override;
|
|
||||||
void render() override;
|
|
||||||
void update(GLFWwindow* window) override;
|
|
||||||
void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
#include "entity_shader.h"
|
#include "entity_shader.h"
|
||||||
#include "../toolbox/toolbox.h"
|
#include "../toolbox/toolbox.h"
|
||||||
#include <deque>
|
|
||||||
|
|
||||||
namespace shaders
|
namespace shaders
|
||||||
{
|
{
|
||||||
@@ -161,25 +160,6 @@ namespace shaders
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityShader::LoadLightsDeque(std::deque<entities::Light>& lights) const
|
|
||||||
{
|
|
||||||
for (int i = 0; i < MAX_LIGHTS; ++i)
|
|
||||||
{
|
|
||||||
if (i < lights.size())
|
|
||||||
{
|
|
||||||
LoadVector(location_light_position[i], lights[i].GetPosition());
|
|
||||||
LoadVector(location_light_color[i], lights[i].GetColor());
|
|
||||||
LoadVector(location_light_attenuation[i], lights[i].GetAttenuation());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoadVector(location_light_position[i], glm::vec3(0, 0, 0));
|
|
||||||
LoadVector(location_light_color[i], glm::vec3(0, 0, 0));
|
|
||||||
LoadVector(location_light_attenuation[i], glm::vec3(1, 0, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void EntityShader::LoadShineVariables(float shine_damper, float reflectivity) const
|
void EntityShader::LoadShineVariables(float shine_damper, float reflectivity) const
|
||||||
{
|
{
|
||||||
LoadFloat(location_shine_damper, shine_damper);
|
LoadFloat(location_shine_damper, shine_damper);
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <deque>
|
|
||||||
#include "shader_program.h"
|
#include "shader_program.h"
|
||||||
#include "../entities/camera.h"
|
#include "../entities/camera.h"
|
||||||
#include "../entities/light.h"
|
#include "../entities/light.h"
|
||||||
@@ -59,13 +58,6 @@ namespace shaders
|
|||||||
*/
|
*/
|
||||||
void LoadLights(std::vector<entities::Light>& lights) const;
|
void LoadLights(std::vector<entities::Light>& lights) const;
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief loads some lights contained in a deque.
|
|
||||||
*
|
|
||||||
* @param lights the deque containing the lights to load
|
|
||||||
*/
|
|
||||||
void LoadLightsDeque(std::deque<entities::Light>& lights) const;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @brief: A method to load the the shine variables from a model into the shader
|
* @brief: A method to load the the shine variables from a model into the shader
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
namespace toolbox
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* This class represents a timer which needs to be updated
|
|
||||||
* every frame to work correctly.
|
|
||||||
*/
|
|
||||||
class Timer
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
float current_time;
|
|
||||||
float final_time;
|
|
||||||
bool has_finished;
|
|
||||||
|
|
||||||
public:
|
|
||||||
/*
|
|
||||||
* @brief: Constructor to make the timer
|
|
||||||
*
|
|
||||||
* @param final_time: The time which the timer needs to count to
|
|
||||||
*/
|
|
||||||
Timer(float final_time): current_time(0), final_time(final_time), has_finished(false) {}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: Updates the timer. Call this method once every iteration in the game loop
|
|
||||||
*
|
|
||||||
* @param delta: The deltatime of the game
|
|
||||||
*/
|
|
||||||
void UpdateTimer(const double delta)
|
|
||||||
{
|
|
||||||
current_time += delta;
|
|
||||||
|
|
||||||
if (current_time >= final_time)
|
|
||||||
{
|
|
||||||
has_finished = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: Returns if the timer has finished
|
|
||||||
*
|
|
||||||
* @return: True if the timer has finished
|
|
||||||
*/
|
|
||||||
bool HasFinished() const { return has_finished; }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -19,15 +19,13 @@
|
|||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="src\collision\collision_handler.cpp" />
|
<ClCompile Include="src\scenes\inGameScene.cpp" />
|
||||||
<ClCompile Include="src\scenes\in_Game_Scene.cpp" />
|
<ClCompile Include="src\scenes\scene.cpp" />
|
||||||
<ClCompile Include="src\computervision\FaceDetector.cpp" />
|
|
||||||
<ClCompile Include="src\computervision\ObjectDetection.cpp" />
|
<ClCompile Include="src\computervision\ObjectDetection.cpp" />
|
||||||
<ClCompile Include="src\computervision\SkinDetector.cpp" />
|
<ClCompile Include="src\computervision\SkinDetector.cpp" />
|
||||||
<ClCompile Include="src\computervision\FingerCount.cpp" />
|
<ClCompile Include="src\computervision\FingerCount.cpp" />
|
||||||
<ClCompile Include="src\computervision\BackgroundRemover.cpp" />
|
<ClCompile Include="src\computervision\BackgroundRemover.cpp" />
|
||||||
<ClCompile Include="src\entities\camera.cpp" />
|
<ClCompile Include="src\entities\camera.cpp" />
|
||||||
<ClCompile Include="src\entities\collision_entity.cpp" />
|
|
||||||
<ClCompile Include="src\entities\entity.cpp" />
|
<ClCompile Include="src\entities\entity.cpp" />
|
||||||
<ClCompile Include="src\gui\gui_interactable.cpp" />
|
<ClCompile Include="src\gui\gui_interactable.cpp" />
|
||||||
<ClCompile Include="src\main.cpp" />
|
<ClCompile Include="src\main.cpp" />
|
||||||
@@ -38,20 +36,16 @@
|
|||||||
<ClCompile Include="src\shaders\shader_program.cpp" />
|
<ClCompile Include="src\shaders\shader_program.cpp" />
|
||||||
<ClCompile Include="src\shaders\entity_shader.cpp" />
|
<ClCompile Include="src\shaders\entity_shader.cpp" />
|
||||||
<ClCompile Include="src\toolbox\toolbox.cpp" />
|
<ClCompile Include="src\toolbox\toolbox.cpp" />
|
||||||
<ClCompile Include="src\scenes\startup_Scene.cpp" />
|
<ClCompile Include="src\scenes\startupScene.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="src\collision\collision.h" />
|
<ClInclude Include="src\scenes\inGameScene.h" />
|
||||||
<ClInclude Include="src\collision\collision_handler.h" />
|
|
||||||
<ClInclude Include="src\scenes\in_Game_Scene.h" />
|
|
||||||
<ClInclude Include="src\scenes\scene.h" />
|
<ClInclude Include="src\scenes\scene.h" />
|
||||||
<ClInclude Include="src\computervision\FaceDetector.h" />
|
|
||||||
<ClInclude Include="src\computervision\FingerCount.h" />
|
<ClInclude Include="src\computervision\FingerCount.h" />
|
||||||
<ClInclude Include="src\computervision\BackgroundRemover.h" />
|
<ClInclude Include="src\computervision\BackgroundRemover.h" />
|
||||||
<ClInclude Include="src\computervision\SkinDetector.h" />
|
<ClInclude Include="src\computervision\SkinDetector.h" />
|
||||||
<ClInclude Include="src\computervision\ObjectDetection.h" />
|
<ClInclude Include="src\computervision\ObjectDetection.h" />
|
||||||
<ClInclude Include="src\entities\camera.h" />
|
<ClInclude Include="src\entities\camera.h" />
|
||||||
<ClInclude Include="src\entities\collision_entity.h" />
|
|
||||||
<ClInclude Include="src\entities\entity.h" />
|
<ClInclude Include="src\entities\entity.h" />
|
||||||
<ClInclude Include="src\entities\light.h" />
|
<ClInclude Include="src\entities\light.h" />
|
||||||
<ClInclude Include="src\gui\gui_element.h" />
|
<ClInclude Include="src\gui\gui_element.h" />
|
||||||
@@ -64,9 +58,8 @@
|
|||||||
<ClInclude Include="src\shaders\shader_program.h" />
|
<ClInclude Include="src\shaders\shader_program.h" />
|
||||||
<ClInclude Include="src\shaders\entity_shader.h" />
|
<ClInclude Include="src\shaders\entity_shader.h" />
|
||||||
<ClInclude Include="src\stb_image.h" />
|
<ClInclude Include="src\stb_image.h" />
|
||||||
<ClInclude Include="src\toolbox\Timer.h" />
|
|
||||||
<ClInclude Include="src\toolbox\toolbox.h" />
|
<ClInclude Include="src\toolbox\toolbox.h" />
|
||||||
<ClInclude Include="src\scenes\startup_Scene.h" />
|
<ClInclude Include="src\scenes\startupScene.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Xml Include="res\haarcascade_frontalface_alt.xml" />
|
<Xml Include="res\haarcascade_frontalface_alt.xml" />
|
||||||
@@ -129,16 +122,16 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<IncludePath>C:\opencv\build\include;$(IncludePath);C:\opencv\opencv\build\include;C:\opencv\build\include</IncludePath>
|
<IncludePath>C:\opencv\build\include;$(IncludePath);C:\opencv\opencv\build\include</IncludePath>
|
||||||
<LibraryPath>C:\opencv\build\x64\vc15\lib;$(LibraryPath);C:\opencv\opencv\build\x64\vc15\lib;C:\opencv\build\x64\vc15\lib</LibraryPath>
|
<LibraryPath>C:\opencv\build\x64\vc15\lib;$(LibraryPath);C:\opencv\opencv\build\x64\vc15\lib</LibraryPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
<IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);;C:\opencv\opencv\build\include;C:\opencv\build\include</IncludePath>
|
<IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);;C:\opencv\opencv\build\include</IncludePath>
|
||||||
<LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);C:\opencv\opencv\build\x64\vc15\lib;C:\opencv\build\x64\vc15\lib</LibraryPath>
|
<LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);C:\opencv\opencv\build\x64\vc15\lib</LibraryPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
@@ -170,7 +163,7 @@
|
|||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>$(SolutionDir)lib\glfw-3.3.2\$(Platform);$(SolutionDir)lib\glew-2.1.0\lib\Release\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(SolutionDir)lib\glfw-3.3.2\$(Platform);$(SolutionDir)lib\glew-2.1.0\lib\Release\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>opencv_world452d.lib;%(AdditionalDependencies); opencv_world452.lib;opencv_world452d.lib</AdditionalDependencies>
|
<AdditionalDependencies>opencv_world452d.lib;%(AdditionalDependencies); opencv_world452.lib</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@@ -211,7 +204,7 @@
|
|||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>$(SolutionDir)lib\glfw-3.3.2\$(Platform);$(SolutionDir)lib\glew-2.1.0\lib\Release\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(SolutionDir)lib\glfw-3.3.2\$(Platform);$(SolutionDir)lib\glew-2.1.0\lib\Release\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies); opencv_world452.lib;opencv_world452d.lib</AdditionalDependencies>
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies); opencv_world452.lib</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
|||||||
@@ -48,18 +48,6 @@
|
|||||||
<ClCompile Include="src\gui\gui_interactable.cpp">
|
<ClCompile Include="src\gui\gui_interactable.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="src\scenes\in_Game_Scene.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="src\scenes\startup_Scene.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="src\entities\collision_entity.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="src\collision\collision_handler.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="src\computervision\ObjectDetection.cpp">
|
<ClCompile Include="src\computervision\ObjectDetection.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -69,10 +57,16 @@
|
|||||||
<ClCompile Include="src\computervision\FingerCount.cpp">
|
<ClCompile Include="src\computervision\FingerCount.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="src\computervision\FaceDetector.cpp">
|
<ClCompile Include="src\computervision\BackgroundRemover.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="src\computervision\BackgroundRemover.cpp">
|
<ClCompile Include="src\scenes\scene.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\scenes\startupScene.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\scenes\inGameScene.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@@ -119,24 +113,6 @@
|
|||||||
<ClInclude Include="src\gui\gui_interactable.h">
|
<ClInclude Include="src\gui\gui_interactable.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="src\scenes\scene.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="src\scenes\in_Game_Scene.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="src\scenes\startup_Scene.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="src\entities\collision_entity.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="src\collision\collision.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="src\collision\collision_handler.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="src\computervision\ObjectDetection.h">
|
<ClInclude Include="src\computervision\ObjectDetection.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@@ -146,13 +122,16 @@
|
|||||||
<ClInclude Include="src\computervision\FingerCount.h">
|
<ClInclude Include="src\computervision\FingerCount.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="src\computervision\FaceDetector.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="src\computervision\BackgroundRemover.h">
|
<ClInclude Include="src\computervision\BackgroundRemover.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="src\toolbox\Timer.h">
|
<ClInclude Include="src\scenes\scene.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\scenes\startupScene.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\scenes\inGameScene.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
Reference in New Issue
Block a user