void Renderer::TrackScene(const core::Scene& scene)
{
  SetCurrentCamera(*scene.camera());
  for (auto& entity : scene.entities()) {
    TrackEntity(*entity);
  }
}
Entity *Entity::NewEntity( int _troopType )
{
    Entity *entity = NULL;

    switch(_troopType)
    {
        case Entity::TypeLaserTroop:            entity = new LaserTrooper();        break;
        case Entity::TypeInsertionSquadie:      entity = new Squadie();             break;
        case Entity::TypeEngineer:              entity = new Engineer();            break;            
        case Entity::TypeVirii:                 entity = new Virii();               break;
        case Entity::TypeEgg:                   entity = new Egg();                 break;
        case Entity::TypeSporeGenerator:        entity = new SporeGenerator();      break;
        case Entity::TypeLander:                entity = new Lander();              break;
		case Entity::TypeTripod:				entity = new Tripod();				break;
        case Entity::TypeCentipede:             entity = new Centipede();           break;
        case Entity::TypeSpaceInvader:          entity = new SpaceInvader();        break;
		case Entity::TypeSpider:				entity = new Spider();				break;
        case Entity::TypeDarwinian:             entity = new Darwinian();           break;
        case Entity::TypeOfficer:               entity = new Officer();             break;
        case Entity::TypeArmyAnt:               entity = new ArmyAnt();             break;
        case Entity::TypeArmour:                entity = new Armour();              break;
        case Entity::TypeSoulDestroyer:         entity = new SoulDestroyer();       break;
        case Entity::TypeTriffidEgg:            entity = new TriffidEgg();          break;
        case Entity::TypeAI:                    entity = new AI();                  break;
		case Entity::TypeShaman:				entity = new Shaman();				break;
        case Entity::TypeHarvester:             entity = new Harvester();           break;
        case Entity::TypeNuke:                  entity = new Nuke();                break;
        case Entity::TypeTentacle:              entity = new Tentacle();            break;
        case Entity::TypeMeteor:                entity = new Meteor();              break;
        case Entity::TypeTank:                  entity = new Tank();                break;
        case Entity::TypeSpaceShip:             entity = new SpaceShip();           break;
        case Entity::TypeDropShip:              entity = new DropShip();            break;

        default:                                AppDebugAssert(false);
    }
    
    entity->m_id.GenerateUniqueId();

#ifdef TRACK_SYNC_RAND
	void TrackEntity( Entity *_entity );
    TrackEntity( entity );
#endif

    return entity;
}