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; }