void GameScene::Update(const float elapsed)
{
	//BaseScene::Update(elapsed);
	// Update of graphic scene.
	MapScene* myRender = reinterpret_cast<MapScene*>(GetRender());
	if (myRender)
	{
		myRender->Update(elapsed);
		Camera& camera = myRender->GetCamera();
		GetSource()->SetPosition(
			static_cast<float>(camera.GetX()), static_cast<float>(camera.GetY()), 0);
	}

	// Camera update.
	Camera& myCamera = GetRender()->GetCamera();
	myCamera.SetPosition(myCamera.GetX() + MOVE_CAMERA, myCamera.GetY());

	// Update of logic entities.
	for (unsigned int i = 0; i < m_entities.Size(); i++)
		m_entities[i]->Update(elapsed);
}
bool GameScene::Init()
{
	bool isValid = BaseScene::Init();

	if (isValid)
	{
		rapidjson::Document* myDoc = GetDoc();

		// Load map.
		m_map = NEW(Map, ((*myDoc)["map"].GetString()));
		MapScene* myRender = 0;
		if (m_map)
		{
			SetRender(NEW(MapScene, (m_map)));
			myRender = reinterpret_cast<MapScene*>(GetRender());
		}
//		MapScene* myRender = reinterpret_cast<MapScene*>(GetRender());
		if (myRender)
		{
			const char* dirImage = (*myDoc)["background"].GetString();
			SpriteFactory::TSpriteNode* myImage = SpriteFactory::Instance().CreateImageNode(dirImage);
			myRender->SetBackgroundImage(myImage->m_image);
			myRender->GetCamera().SetBounds(0, 0, myRender->GetMap()->GetWidth(), myRender->GetMap()->GetHeight());
			double cameraX = (*myDoc)["camera"]["x"].GetDouble();
			double cameraY = (*myDoc)["camera"]["y"].GetDouble();
			myRender->GetCamera().SetPosition(cameraX, cameraY);

			// Load entities types.
			const rapidjson::Value& myInfo = (*myDoc)["typesEntities"];
			unsigned int numInfo = myInfo.Size();
			for (unsigned int i = 0; i < numInfo; i++)
				EntityFactory::Instance().LoadInfo(myInfo[i]);

			// Load entities.
			const rapidjson::Value& entities = (*myDoc)["entities"];
			unsigned int numEntities = entities.Size();
			isValid = true;
			for (unsigned int i = 0; i < numEntities && isValid; i++)
			{
				BaseEntity* myEntity = EntityFactory::Instance().CreateEntity(entities[i]);
				if (myEntity)
				{
					myEntity->AddToScene(this);
					if (myEntity->GetSprite())
					{
						Sprite* mySprite = myEntity->GetSprite()->m_sprite;
						mySprite->SetMap(m_map);
						mySprite->SetCollisionPixelData(NEW(CollisionPixelData, ("./data/sprites/dwarf_col.png")));
						mySprite->SetCollision(Sprite::COLLISION_PIXEL);
					}
					m_entities.Add(myEntity);
					isValid = m_entities.Last()->Init();
				}
				else
					isValid = false;
			}
		}
	}

	return isValid;
}