class ButtonSprite(AnimatedSprite): def __init__(self, tilemaps, rect, eventstack, onclick=None, onclick_params=[], animations={}, layer=2, fps=60,sendself=False, mouseover='', frontend=None): self._layer = layer AnimatedSprite.__init__(self, tilemaps, rect, animations, layer, fps) self.registered_events = [] self.eventstack = eventstack self.onclick = onclick self.onclick_params = onclick_params self.sendself = sendself self.registered_events.append(self.eventstack.register_event("button1", self, self.click)) self.mouseover_text = mouseover if mouseover: self.mo_hash = make_hash() self.frontend = frontend self.registered_events.append(self.eventstack.register_event("mouseover", self, self.mouseover)) def click(self, pos): if self.onclick is not None: if not self.sendself: self.onclick(*self.onclick_params) else: self.onclick(self, *self.onclick_params) def mouseover(self, pos): self.m = MouseOver(self.mouseover_text, pos, layer=self._layer +1) self.frontend.sprites[self.mo_hash] = self.m self.eventstack.register_event("mouseout", self, self.mouseout) def mouseout(self, pos): self.m.delete() if self.mo_hash in self.frontend.sprites: del self.frontend.sprites[self.mo_hash] def delete(self): for h in self.registered_events: self.eventstack.unregister_event(h) if self.mouseover_text and self.mo_hash in self.frontend.sprites: del self.frontend.sprites[self.mo_hash] self.kill()
def mouseover(self, pos): self.m = MouseOver(self.mouseover_text, pos, layer=self._layer +1) self.frontend.sprites[self.mo_hash] = self.m self.eventstack.register_event("mouseout", self, self.mouseout)