CSC3224_Computer_Games_Development / GameEngine / Engine_Graphics / Scene.cpp
Scene.cpp
Raw
#include "Scene.h"

Scene::Scene(ResourceManagement& resourceManager, float time) : sceneState(INITIALIZATION_STATE), entityManagement(EntityManagement()), enginePhysicsSystem(new EnginePhysicsSystem(*this, b2Vec2(physicsXInput, physicsYInput))), engineMessageSystem(std::vector<EngineMessageSystem*>()), scaleTime(time)
{
// Load scenes, Engine sub-systems
	addEnginePhysicsLoadingTimes.startTime();
// Load scenes, Engine Physics sub-system
	addSceneSystem(enginePhysicsSystem);
	addEngineRenderingLoadingTimes.startTime();
// Load scenes, Engine Rendering sub-system
	addSceneSystem(new EngineRenderingSystem(*this));
	addEngineAudioSystemLoadingTimes.startTime();
// Load scenes, Engine Audio sub-system
	addSceneSystem(new EngineAudioSystem(*this, resourceManager));
//Set default font for in-game text
	if (!font.loadFromFile(FONT_DIR +defaultFont))
	{
		std::cout << "Loading text font failed" << std::endl;
	}
	else
	{	
		std::cout << "Text font" << defaultFont << "loaded" << std::endl;
	}
	text.setFont(font);
	addEngineAudioSystemLoadingTimes.finishProfiler();
	addEnginePhysicsLoadingTimes.finishProfiler();
	addEngineRenderingLoadingTimes.finishProfiler();
}

Scene::~Scene()
{
	for (auto messages : engineMessageSystem)
	{
		delete messages;
	}
}
// Send message 
void Scene::sendSceneSystemMessage(const SystemMessage& engineSystemMessage)
{
	for (auto messages : engineMessageSystem)
	{
		messages->recieveEngineMessage(engineSystemMessage);
	}
}
// Add scene
void Scene::addSceneSystem(EngineMessageSystem* engineSystemMessage)
{
	engineMessageSystem.push_back(engineSystemMessage);
}
// Draw Scene
void Scene::drawScene(sf::RenderWindow& renderWindow, ResourceManagement& resourceManager)
{
	for (auto spriteVector : spriteRectangleVector)
	{
		spriteVector->setTexture(*(resourceManager.getTexture(spriteVector->getSpriteTextureID())));
		renderWindow.draw(*spriteVector);
	}
	if (setFont)
	{
		renderWindow.draw(text);
	}
}
// Step through scene
void Scene::playScene(const sf::Time& gameTime)
{
	for (auto messages : engineMessageSystem)
	{
		messages->play(gameTime);
	}
}
// Get ptr to engine Physics System
EnginePhysicsSystem& Scene::getEnginePhysicsSystem() const
{
	return *enginePhysicsSystem;
}
// Get manage entities
EntityManagement& Scene::getEntityManagement()
{
	return entityManagement;
}