CzActor* CzApp::FindTappedActor(int x, int y) { CzActor* hit_actor = NULL; CzScene* hit = NULL; for (_Iterator it = Scenes.begin(); it != Scenes.end(); ++it) { if ((CurrentScene == *it || (*it)->getAllowFocus()) && (*it)->isActive()) { if (hit == NULL || (hit->getLayer() <= (*it)->getLayer())) { if (!(*it)->isDragging()) { CzActor* tapped_actor = (*it)->FindTappedActor(x, y); CzScene* new_hit = *it; if (tapped_actor != NULL) { hit_actor = tapped_actor; hit = *it; } } } } } return hit_actor; }
void CzApp::Draw() { PLATFORM_RENDER->Begin(); #if defined(CZ_ENABLE_METRICS) CzMetrics::TotalSpritesProcessed = 0; CzMetrics::TotalActorsProcessed = 0; #endif // Calculate max layers, also draw any scenes that have negative layers int max_layers = 0; for (_Iterator it = Scenes.begin(); it != Scenes.end(); ++it) { CzScene* s = *it; if (!s->isDestroyed()) { int layer = s->getLayer(); if (layer < 0) s->Draw(); else if (layer < CZ_MAX_SCENE_LAYERS && layer > max_layers) max_layers = layer; } } // Draw all scenes in layer order int num_scenes = Scenes.size(); for (int t = 0; t <= max_layers; t++) { for (_Iterator it = Scenes.begin(); it != Scenes.end(); ++it) { CzScene* s = *it; if (!s->isDestroyed()) { if (s->getLayer() == t) s->Draw(); } } } // Draw any scenes that have layers that are out of range last for (_Iterator it = Scenes.begin(); it != Scenes.end(); ++it) { CzScene* s = *it; if (!s->isDestroyed()) { int layer = s->getLayer(); if (layer >= CZ_MAX_SCENE_LAYERS) s->Draw(); } } // Take care of any post draw rendering PostDraw(); #if defined(CZ_ENABLE_METRICS) CzDebug::Log(CZ_DEBUG_CHANNEL_INFO, "TotalSpritesProcessed - ", CzString(CzMetrics::TotalSpritesProcessed).c_str()); CzDebug::Log(CZ_DEBUG_CHANNEL_INFO, "TotalSpritesCreated - ", CzString(CzMetrics::TotalSpritesCreated).c_str()); CzDebug::Log(CZ_DEBUG_CHANNEL_INFO, "TotalSpritesDestroyed - ", CzString(CzMetrics::TotalSpritesDestroyed).c_str()); #endif PLATFORM_RENDER->End(); // Swap display buffers PLATFORM_DISPLAY->Swap(); // Clear the screen PLATFORM_DISPLAY->Clear(); // Yield to the operating system PLATFORM_SYS->YieldToOS(0); }