0

I'm currently trying to make a class used for status effects. It works fine when removing one status effect, but when the Status amount hits 0 while there's two or more currently on screen, I get the error " StatusEffect = list_of_status[l] IndexError: list index out of range"

def draw():
    for l in range (0, len(list_of_status)):
        StatusEffect = list_of_status[l]
        
        StatusEffect.y = statuses_y + (l % 5) * 20

        StatusEffect.draw()
        StatusEffect.activate()

        if StatusEffect.amount == 0:
            list_of_status.remove(StatusEffect)

    

class StatusEffect:
    def __init__(self, name, amount, time=5):
        self.name = name
        self.amount = amount
        self.time = time
        self.x = 0
        self.y = 0
        self.active = True

    def draw(self):
        font = pygame.font.SysFont('Gill Sans', 17, True, False)
        name_text = font.render(f'{self.name}: {self.amount}/{self.time}', True, BLACK)
        if self.name == "Burn":
            name_text = font.render(f'{self.name}: {self.amount}', True, BLACK)
        screen.blit(name_text, [self.x, self.y])
    def activate(self):
        global health
        
        if time.time() - self.time >= 1:
            if self.name == "Burn":
                health -= 1
                self.amount -= 1
                self.time = time.time()


list_of_status = []
list_of_status.append(StatusEffect(name="Burn", amount=10))
list_of_status.append(StatusEffect(name="Burn", amount=10))

0 Answers0