@startuml Round
participant Szoba as sz
participant Hallgató as h
participant Oktató as okt
participant Ajto as a
participant Hátizsák as hát
participant "Tárgy" as t

!includesub gased_rucksack.puml!GAS_RUCKSACK

loop for each active_object in hátizsák
    hát->>t : decreaseCooldown()
end

$gasRuck("h", "Tárgy1")

note over h: most az oktatók lépnek

group ref Round okt 
end

opt #lightyellow Move
    h->sz : Move

    loop door_num
        sz->a ++: askDirections
        return ret(directions)
    end

    alt Szoba.capacity!=full && there is entrance
        sz-->h : MoveAccept
        sz->>sz : setParticipants
        h->>h : setRoom    
    else
        sz-->h : MoveDeny
    end

    $gasRuck("h", "Tárgy2")
end

newpage

loop max 3
    opt tárgyfelvétel
        h->sz : askForObject
        alt a Tárgy egy aktivált tranzisztor
            sz-->h : deny
        end
        sz-->h : ret(Object)
        h->>hát : add(Object)
    end

    opt tárgyeldobás
        h->hát ++: askForObject
        hát-->h --: ret(Object)
        h->>sz : add(Object)
    end

    opt tárgyhasználat
        group perform effect

            hát->>t : effect
            alt ha a tárgy magán kívül mást is módosít
                t->hát ++ : getSzoba
                hát->h ++: getSzoba
                return szoba
                hát-->t --: szoba
                t->>sz : invokeEffect()

                note right of t : az invokeEffect azt jelenti, hogy a védelmi tárgy hatásának\n megfelelő függvényt hívja meg

                alt gázosítás
                    sz->>sz : setGased
                end

                alt oktatót bénít
                    sz-->okt : paralyze
                end

                alt védelmet aktivál
                    t->>t : setValid
                end

                alt tranzisztor
                    group ref tranzisztorhasználat
                    end
                end
            end
        end
    end
end

group ref Building changing
end
@enduml