void EntityManager::update(float dt) { CCArray *keys = m_pIDToEntitiesMap->allKeys(); if (keys) { // if the dictionary has no objects, keys will be NULL for (int i=0; i<keys->count(); i++) { CCInteger *integer = (CCInteger *)keys->objectAtIndex(i); int key = integer->getValue(); BaseGameEntity *entity = (BaseGameEntity *)m_pIDToEntitiesMap->objectForKey(key); if (entity->getIsActive()) { // Only update the entity if it's active. entity->update(dt); } } } /* // Add new entities. for (int i=0; i<m_pEntitiesToAdd->count(); i++) { BaseGameEntity *newEntity = (BaseGameEntity *)m_pEntitiesToAdd->objectAtIndex(i); m_pIDToEntitiesMap->setObject(newEntity, newEntity->getID()); } m_pEntitiesToAdd->removeAllObjects(); */ // Remove old entities. for (int i=0; i<m_pEntitiesToRemove->count(); i++) { BaseGameEntity *oldEntity = (BaseGameEntity *)m_pEntitiesToRemove->objectAtIndex(i); m_pIDToEntitiesMap->removeObjectForKey(oldEntity->getID()); } m_pEntitiesToRemove->removeAllObjects(); }
bool Projectile::handleMessage(const Telegram *telegram) { switch (telegram->message) { case kMessageReachPosition: reset(); return true; case kMessageCollide: BaseGameEntity *entity = GameModel::instance()->getEntityForID(telegram->sender); if (arc4random()%10 > 3) { return false; } if (entity->getEntityType() == kFighter && entity->getController() != m_eController) { MessageDispatcher::instance()->dispatchMessage(0, m_uID, entity->getID(), kMessageHit, (void *)&m_iDamage); reset(); return true; } return false; } return false; }