Extract turn logic to separate object