LVL_Npc *LevelScene::spawnNPC(LevelNPC npcData, NpcSpawnType sp_type, NpcSpawnDirection sp_dir, bool reSpawnable) { if(!ConfigManager::lvl_npc_indexes.contains(npcData.id)) return NULL; obj_npc* curNpcData = &ConfigManager::lvl_npc_indexes[npcData.id]; LVL_Npc * npc = luaEngine.createLuaNpc(npcData.id); if(!npc) return NULL; npcData.array_id= ++data.npc_array_id; npc->setup = curNpcData; npc->reSpawnable=reSpawnable; npc->data = npcData; npc->init(); npc->Activate(); switch(sp_type) { case GENERATOR_WARP: switch(sp_dir) { case SPAWN_DOWN: npc->setWarpSpawn(LVL_Npc::WARP_TOP); break; case SPAWN_UP: npc->setWarpSpawn(LVL_Npc::WARP_BOTTOM); break; case SPAWN_LEFT: npc->setWarpSpawn(LVL_Npc::WARP_RIGHT); break; case SPAWN_RIGHT: npc->setWarpSpawn(LVL_Npc::WARP_LEFT); break; } break; case GENERATOR_PROJECTILE: break; default: break; } active_npcs.push_back(npc); npcs.push_back(npc); return npc; }
LVL_Npc *LevelScene::spawnNPC(const LevelNPC &npcData, NpcSpawnType sp_type, NpcSpawnDirection sp_dir, bool reSpawnable) { if(npcData.id <= 0) return nullptr; if(!ConfigManager::lvl_npc_indexes.contains(npcData.id)) return nullptr; obj_npc *curNpcData = &ConfigManager::lvl_npc_indexes[npcData.id]; LVL_Npc *npc = m_luaEngine.createLuaNpc(npcData.id); if(!npc) return nullptr; npc->setScenePointer(this); npc->setup = curNpcData; npc->reSpawnable = reSpawnable; npc->data = npcData; npc->data.meta.array_id = ++m_data.npc_array_id; npc->init(); npc->m_spawnedGeneratorType = sp_type; npc->m_spawnedGeneratorDirection = sp_dir; switch(sp_type) { case GENERATOR_WARP: switch(sp_dir) { case SPAWN_DOWN: npc->setWarpSpawn(LVL_Npc::WARP_TOP); break; case SPAWN_UP: npc->setWarpSpawn(LVL_Npc::WARP_BOTTOM); break; case SPAWN_LEFT: npc->setWarpSpawn(LVL_Npc::WARP_RIGHT); break; case SPAWN_RIGHT: npc->setWarpSpawn(LVL_Npc::WARP_LEFT); break; } break; case GENERATOR_PROJECTILE: switch(sp_dir) { case SPAWN_DOWN: npc->setSpeedX(0.0); npc->setSpeedY(ConfigManager::g_setup_npc.projectile_speed); break; case SPAWN_UP: npc->setSpeedX(0.0); npc->setSpeedY(-ConfigManager::g_setup_npc.projectile_speed); break; case SPAWN_LEFT: npc->setSpeedX(-ConfigManager::g_setup_npc.projectile_speed); npc->setSpeedY(0.0); break; case SPAWN_RIGHT: npc->setSpeedX(ConfigManager::g_setup_npc.projectile_speed); npc->setSpeedY(0.0); break; } PGE_Audio::playSound(ConfigManager::g_setup_npc.projectile_sound_id); break; default: break; } npc->Activate(); m_npcActive.push_back(npc); m_itemsNpc.push_back(npc); return npc; }