Exemplo n.º 1
0
void LevelScene::placeNPC(LevelNPC& npcData)
{
    if(npcData.id <= 0)
        return;

    if(!ConfigManager::lvl_npc_indexes.contains(npcData.id))
        return;

    obj_npc *curNpcData = &ConfigManager::lvl_npc_indexes[npcData.id];
    LVL_Npc *npc = m_luaEngine.createLuaNpc(npcData.id);

    if(!npc)
        return;

    npc->setScenePointer(this);
    npc->setup = curNpcData;
    npc->data  = npcData;
    npc->init();
    m_itemsNpc.push_back(npc);
}
Exemplo n.º 2
0
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;
}