void DacSceneFactory::CreateScene(GameManager & manager, GameObject & root)
{
	// Game
	auto gameController = make_shared<GameController>();
	GameObject& bg = root.CreateObject("Background", 0, 0, "BackGround.jpg",gameController );

	// Fuse
	auto fuseController = make_shared<FuseController>();
	fuseController->m_burnTime = TIME_LIMIT;
	fuseController->m_points.push_back(Vector2d(0, 0));
	fuseController->m_points.push_back(Vector2d(-12, -20));
	fuseController->m_points.push_back(Vector2d(-8, -39));
	fuseController->m_points.push_back(Vector2d(-51, -47));
	fuseController->m_points.push_back(Vector2d(-54, -184));
	fuseController->m_points.push_back(Vector2d(-87, -185));

	GameObject& fuse = bg.CreateObject("Fuse", 263, 555, NULL, fuseController);

	// Big Explosion
	auto bigBoomController = make_shared<ParticlesController>();
	bigBoomController->m_controllerLife = -1;
	bigBoomController->m_assetName = "Explosion.png";
	bigBoomController->m_burstSize = 0;
	bigBoomController->m_velocity = 400;
	bigBoomController->m_acceleration = -200;
	bigBoomController->m_life = 3000;
	bigBoomController->m_velocityNoise = 0.8f;
	GameObject& bigBoom = bg.CreateObject("BigBoom", 129, 329, NULL, bigBoomController);
	gameController->m_bigBoom = bigBoomController;


	// Field
	auto fieldController = make_shared<FieldController>();
	fieldController->m_gameController = gameController;
	fieldController->m_fuse = fuseController;
	GameObject& field = bg.CreateObject("Field", 330, 107, NULL, fieldController );
	gameController->m_field = fieldController;

	// Score
	TextRenderer* text = new TextRenderer(manager.GetRenderer());
	text->SetFont(manager.LoadFont("Digital.ttf", 60), { 0xff, 0xff,0xff,0xff });
	text->SetText("000000");
	auto textPtr = shared_ptr<TextRenderer>(text);
	GameObject& score = bg.CreateObject("Score", 20, 50, 180, 70, textPtr, NULL);
	gameController->m_scoreText = textPtr;

	// Timer
	text = new TextRenderer(manager.GetRenderer());
	text->SetFont(manager.LoadFont("Digital.ttf", 70), { 0xff, 0x55,0x00,0xff });
	text->SetText("00");
	auto timerText = shared_ptr<TextRenderer>(text);
	GameObject& timer = bg.CreateObject("Timer", 75, 425, 180, 70, timerText, NULL);
	gameController->m_timerText = timerText;

	// Menu
	SolidRenderer* solid = new SolidRenderer();
	solid->SetColor(0, 0, 0, 220);
	GameObject& menu = root.CreateObject("Menu", 0, 0, manager.SCREEN_WIDTH, manager.SCREEN_HEIGHT,
		shared_ptr<SolidRenderer>(solid),NULL);
	gameController->m_menu = menu.GetSharedPtr();

	// Header text
	text = new TextRenderer(manager.GetRenderer());
	text->SetFont(manager.LoadFont("Digital.ttf", 90), { 0xff, 0xff,0xff,0xff });
	text->SetText("Diamonds&Crystals");
	GameObject& headerText = menu.CreateObject("Header", 20, 30, 0, 0, shared_ptr<TextRenderer>(text), NULL);

	// Sign text
	text = new TextRenderer(manager.GetRenderer());
	text->SetFont(manager.LoadFont("Digital.ttf", 30), { 0xff, 0xff,0xff,0xff });
	text->SetText("by Maxim Machekhin");
	GameObject& signText = menu.CreateObject("Sign", 30, 120, 0, 0, shared_ptr<TextRenderer>(text), NULL);

	// Best score text
	text = new TextRenderer(manager.GetRenderer());
	auto bestScorePtr = shared_ptr<TextRenderer>(text);
	text->SetFont(manager.LoadFont("Digital.ttf", 30), { 0xff, 0xff,0xff,0xff });
	text->SetText("Best score: 000000");
	GameObject& bestScore = menu.CreateObject("BestScore", 120, 230, 0, 0, bestScorePtr, NULL);
	gameController->m_bestScoreText = bestScorePtr;

	// Button
	solid = new SolidRenderer();
	solid->SetColor(0xe0, 0xa0, 0x20, 0xff);
	GameObject& startBtn = menu.CreateObject("StartButton", 280, 400, 200, 100, 
		shared_ptr<SolidRenderer>(solid), make_shared<MouseHoverController>());
	gameController->m_btnStart = startBtn.GetSharedPtr();

	// Button text
	text = new TextRenderer(manager.GetRenderer());
	text->SetFont(manager.LoadFont("Digital.ttf", 90), { 0x00, 0x00,0x00,0xff });
	text->SetText("Start!");
	GameObject& startBtnText = startBtn.CreateObject("StartButtonText", 8, 0, 180, 70, shared_ptr<TextRenderer>(text), NULL);

}