259 lines
7.5 KiB
C++
259 lines
7.5 KiB
C++
|
|
#include "CKernel.hpp"
|
|||
|
|
#include <chrono>
|
|||
|
|
#include <memory>
|
|||
|
|
#include <string>
|
|||
|
|
#include "../../Configurations/Configuration/CConfiguration.hpp"
|
|||
|
|
#include "../../Modules/Module/CModuleLoader.hpp"
|
|||
|
|
#include "../Component/Graphics/CTestRenderer.hpp"
|
|||
|
|
|
|||
|
|
//CKernel* CKernel::m_kernel;
|
|||
|
|
//CShader* CKernel::m_mainShader;
|
|||
|
|
|
|||
|
|
// #define NAME "Cosmic Engine"
|
|||
|
|
// #define LOGO "../assets/spaceEngineIcon.png"
|
|||
|
|
// #define SPLASH "../assets/shrekt.png"
|
|||
|
|
// #define SPLASH_HEIGHT 512
|
|||
|
|
// #define SPLASH_WIDTH 512
|
|||
|
|
// #define GAME_HEIGHT 360
|
|||
|
|
// #define GAME_WIDTH 640
|
|||
|
|
|
|||
|
|
namespace CosmicCore {
|
|||
|
|
|
|||
|
|
CKernel::CKernel(std::string name, std::string gameName) :
|
|||
|
|
m_gameName(gameName)
|
|||
|
|
{
|
|||
|
|
//m_kernel = this;
|
|||
|
|
//CContext::init(SDL_INIT_EVENTS | SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC,IMG_INIT_PNG | IMG_INIT_JPG);
|
|||
|
|
m_activeScene = std::make_unique<CScene>("Scene1");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CKernel::~CKernel()
|
|||
|
|
{
|
|||
|
|
/*for(std::pair<const std::string, CScene*>& scenePair : m_sceneList)
|
|||
|
|
{
|
|||
|
|
delete scenePair.second;
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*void CKernel::setContext(SDL_GLContext context)
|
|||
|
|
{
|
|||
|
|
m_GLcontext = context;
|
|||
|
|
}*/
|
|||
|
|
|
|||
|
|
/*CScene* CKernel::getActiveScene()
|
|||
|
|
{
|
|||
|
|
return m_activeScene;
|
|||
|
|
}*/
|
|||
|
|
|
|||
|
|
/*void CKernel::initGL()
|
|||
|
|
{
|
|||
|
|
m_window.setCursorGrabbed(false);
|
|||
|
|
m_window.setAntiAliasing(m_config.getMsaa());
|
|||
|
|
m_window.initialization();
|
|||
|
|
m_GLcontext = m_window.getOpenGLContext();
|
|||
|
|
SDL_GL_MakeCurrent(m_window.getWindow(), m_GLcontext);
|
|||
|
|
m_window.setVisible(true);
|
|||
|
|
SDL_GL_SetSwapInterval(1);
|
|||
|
|
}*/
|
|||
|
|
|
|||
|
|
void CKernel::start(bool isPreview) {
|
|||
|
|
|
|||
|
|
//DEBUG_LOG(trace, "Kernel", "Context", "Starting " + m_gameName + "...")
|
|||
|
|
CConfiguration::init();
|
|||
|
|
//CComponentFactory::registerStandardProvidedAbstractComponents();
|
|||
|
|
std::cout << CModuleLoader::loadAll() << std::endl;
|
|||
|
|
if(!isPreview)
|
|||
|
|
{
|
|||
|
|
// Open the splash window.
|
|||
|
|
//DEBUG_LOG(trace, "Kernel", "Context", "Loading splash window...")
|
|||
|
|
//m_loadingWindow.setVisible(true);
|
|||
|
|
//m_loadingWindow.initialization();
|
|||
|
|
|
|||
|
|
// Load the config file.
|
|||
|
|
//m_engineConfig.load();
|
|||
|
|
//m_config.load();
|
|||
|
|
|
|||
|
|
// Load the main window.
|
|||
|
|
/*DEBUG_LOG(trace, "Kernel", "Context", "Loading main window...")
|
|||
|
|
m_window.setAntiAliasing(m_config.getMsaa());
|
|||
|
|
m_window.initialization();
|
|||
|
|
m_window.setCursorGrabbed(m_config.getFullscreen());
|
|||
|
|
m_GLcontext = m_window.getOpenGLContext();
|
|||
|
|
SDL_GL_SetSwapInterval(1);
|
|||
|
|
m_window.setFullscreen(m_config.getFullscreen());
|
|||
|
|
if (m_config.getFullscreen()) {
|
|||
|
|
m_window.setSize(m_config.getFullScreenSize());
|
|||
|
|
glViewport(0, 0, m_config.getFullScreenSize().first, m_config.getFullScreenSize().second);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
m_window.setSize(m_config.getWindowSize());
|
|||
|
|
glViewport(0, 0, m_config.getWindowSize().first, m_config.getWindowSize().second);
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// On initialise GLEW.
|
|||
|
|
/*DEBUG_LOG(trace, "Kernel", "Context", "GLEW initialization...")
|
|||
|
|
GLenum initialisationGLEW(glewInit());
|
|||
|
|
|
|||
|
|
if (initialisationGLEW != GLEW_OK) {
|
|||
|
|
// On affiche l'erreur grace a la fonction : glewGetErrorString(GLenum code)
|
|||
|
|
HandleException(CLibException(std::string("Erreur d'initialisation de GLEW : ") + (char*)glewGetErrorString(initialisationGLEW)), true);
|
|||
|
|
}
|
|||
|
|
DEBUG_LOG(trace, "Kernel", "Context", "GLEW initialized!")
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
m_shaderManager.create();
|
|||
|
|
m_shaderManager.compile();
|
|||
|
|
}
|
|||
|
|
catch (const CException& exception) {
|
|||
|
|
HandleException(exception, true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_mainShader = m_shaderManager.get("basicColor");
|
|||
|
|
|
|||
|
|
//double ratio;
|
|||
|
|
//if (isFullscreen()) {
|
|||
|
|
// ratio = ((double)m_fullscreenSize.first) / ((double)m_fullscreenSize.second);
|
|||
|
|
//}
|
|||
|
|
//else {
|
|||
|
|
// ratio = ((double)m_windowSize.first) / ((double)m_windowSize.second);
|
|||
|
|
//}
|
|||
|
|
// m_projection = glm::perspective(m_fov, ratio, 1.0, 100.0);
|
|||
|
|
// m_modelView = glm::mat4(1.0);
|
|||
|
|
|
|||
|
|
if(!isPreview)
|
|||
|
|
{
|
|||
|
|
m_loadingWindow.setVisible(false);
|
|||
|
|
m_window.setVisible(true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
DEBUG_LOG(trace, "Kernel", "Context", m_gameName + " Started !")*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CKernel::loop() {
|
|||
|
|
while(1)
|
|||
|
|
{
|
|||
|
|
int addOrNot = 0;
|
|||
|
|
std::cout << "Create test renderer to add to the scene via an entity ?" << std::endl;
|
|||
|
|
std::cin >> addOrNot;
|
|||
|
|
if(addOrNot == 1)
|
|||
|
|
{
|
|||
|
|
auto entity = m_activeScene->addEntity("test1", "testDesc");
|
|||
|
|
entity.addComponent<CTestRenderer>();
|
|||
|
|
std::cout << "nb Entities : " << m_activeScene->getNumEntity() << std::endl;
|
|||
|
|
}
|
|||
|
|
else if(addOrNot == 2)
|
|||
|
|
{
|
|||
|
|
//m_activeScene.get()->getEntityComponentManager().getEntities().clear();
|
|||
|
|
//m_activeScene.get()->getEntityComponentManager().addComponent<CTestRenderer>(m_activeScene.get()->getEntityComponentManager().getEntities().size()-1, EComponentType::COMPONENT_RENDERER);
|
|||
|
|
}
|
|||
|
|
m_activeScene->render();
|
|||
|
|
}
|
|||
|
|
/*unsigned int frameRate(1000 / m_config.getTargetedFramerate());
|
|||
|
|
unsigned int beginIterationTime(0);
|
|||
|
|
unsigned int endIterationTime(0);
|
|||
|
|
unsigned int spendedIterationTime(0);
|
|||
|
|
unsigned int lastFrame = 0;
|
|||
|
|
|
|||
|
|
// Activation du Depth Buffer
|
|||
|
|
glEnable(GL_DEPTH_TEST);
|
|||
|
|
|
|||
|
|
//lancement des scripts
|
|||
|
|
unsigned int numEntities = m_activeScene->getNumEntity();
|
|||
|
|
for (unsigned int i = 0; i < numEntities; i++)
|
|||
|
|
{
|
|||
|
|
unsigned int numComponents = m_activeScene->getEntity(i)->getComponents(EComponentType::COMPONENT_SCRIPT).size();
|
|||
|
|
for (unsigned int j = 0; j < numComponents; j++)
|
|||
|
|
{
|
|||
|
|
((CAbstractScript*)(m_activeScene->getEntity(i)->getComponents(EComponentType::COMPONENT_SCRIPT)[j]))->start();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
while (!m_finished) {
|
|||
|
|
// Define the starting time.
|
|||
|
|
beginIterationTime = SDL_GetTicks();
|
|||
|
|
|
|||
|
|
// Compute the delta time.
|
|||
|
|
unsigned int currentFrame = beginIterationTime;
|
|||
|
|
m_deltaTime = currentFrame - lastFrame;
|
|||
|
|
lastFrame = currentFrame;
|
|||
|
|
|
|||
|
|
// Update event system.
|
|||
|
|
m_inputHandler.updateEvent();
|
|||
|
|
// ####### start render #######
|
|||
|
|
|
|||
|
|
// Nettoyage de l'<27>cran.
|
|||
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|||
|
|
|
|||
|
|
// Update des scripts.
|
|||
|
|
m_activeScene->updateScript();
|
|||
|
|
|
|||
|
|
// Actualisation du monde physique.
|
|||
|
|
//todo fonction wrap => pour rendre valide même si c'est pas ODE
|
|||
|
|
dSpaceCollide(m_activeScene->getTangibleWorld()->getSpace(), m_activeScene->getTangibleWorld(), &(m_activeScene->getTangibleWorld())->callback);
|
|||
|
|
m_activeScene->getTangibleWorld()->updateWorld(0.12f);
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Rendu.
|
|||
|
|
m_activeScene->render();
|
|||
|
|
|
|||
|
|
// Actualisation de la fen<65>tre.
|
|||
|
|
SDL_GL_SwapWindow(m_window.getWindow());
|
|||
|
|
|
|||
|
|
// ####### end render #######
|
|||
|
|
|
|||
|
|
// Compute the end and spended time .
|
|||
|
|
endIterationTime = SDL_GetTicks();
|
|||
|
|
spendedIterationTime = endIterationTime - beginIterationTime;
|
|||
|
|
|
|||
|
|
// If need, we pause the programm to have the right fps amount.
|
|||
|
|
if (spendedIterationTime < frameRate) {
|
|||
|
|
SDL_Delay(frameRate - spendedIterationTime);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if(m_isOriginOfContext)
|
|||
|
|
CContext::quit();*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CKernel::quit() {
|
|||
|
|
m_finished = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CKernel::fullscreen() {
|
|||
|
|
/*if (!m_config.getFullscreen()) {
|
|||
|
|
m_window.setSize(m_config.getFullScreenSize());
|
|||
|
|
m_window.setCursorGrabbed(true);
|
|||
|
|
m_window.setFullscreen(true);
|
|||
|
|
m_config.setFullscreen(true);
|
|||
|
|
glViewport(0, 0, m_config.getFullScreenSize().first, m_config.getFullScreenSize().second);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
m_window.setSize(m_config.getWindowSize());
|
|||
|
|
m_window.setCursorGrabbed(true);
|
|||
|
|
m_window.setFullscreen(false);
|
|||
|
|
m_config.setFullscreen(false);
|
|||
|
|
glViewport(0, 0, m_config.getWindowSize().first, m_config.getWindowSize().second);
|
|||
|
|
}
|
|||
|
|
// Sauvegarde la nouvelle conf.
|
|||
|
|
m_config.save();*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CKernel::desktop() {
|
|||
|
|
/*if (m_config.getFullscreen()) {
|
|||
|
|
m_window.setSize(m_config.getWindowSize());
|
|||
|
|
m_window.setCursorGrabbed(false);
|
|||
|
|
m_window.setFullscreen(false);
|
|||
|
|
m_config.setFullscreen(false);
|
|||
|
|
glViewport(0, 0, m_config.getWindowSize().first, m_config.getWindowSize().second);
|
|||
|
|
}
|
|||
|
|
m_window.setCursorGrabbed(false);*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CKernel::focus() {
|
|||
|
|
//m_window.setCursorGrabbed(true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|