# This file is part of A Robot's Conundrum. # # A Robot's Conundrum is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) any # later version. # # A Robot's Conundrum is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # details. # # You should have received a copy of the GNU General Public License along with # A Robot's Conundrum. If not, see . # # ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' # # lever.py # -------------------- # date created : Wed Aug 8 2012 # copyright : (C) 2012 Sakse Dalum # maintained by : Sakse Dalum """ A generic lever. """ import pygame import worldobject class Lever(worldobject.WorldObject): def __init__(self, level, x, y, links, anim='lever_leftright', toggling=False, signal=[0, 1], setting=False): self.__dict__.update(locals()) worldobject.WorldObject.__init__(self, level, x, y) self.init_setting = setting self.at_rest = True self.send_signal = False self.frame = 0 self.anim_speed = 15 def set_init_pos(self): worldobject.WorldObject.set_init_pos(self) self.init_setting = self.setting def reset_pos(self): worldobject.WorldObject.reset_pos(self) self.setting = self.init_setting def use(self, obj): self.setting = not self.setting self.at_rest = False self.send_signal = True def update(self, e, t, dt): # Update the animation if not self.setting: self.frame = min(self.frame + self.anim_speed * dt, len(self.level.imgs[self.anim]) - 1) else: self.frame = max(self.frame - self.anim_speed * dt, 0) if not self.toggling: if (self.frame - self.anim_speed * dt <= 0): self.setting = 0 self.at_rest = self.frame == len(self.level.imgs[self.anim]) - 1 else: self.at_rest = self.frame in [len(self.level.imgs[self.anim]) - 1, 0] if (((self.frame <= int(len(self.level.imgs[self.anim]) / 3) and not self.toggling) or (self.frame <= int(len(self.level.imgs[self.anim]) / 3) and self.setting and self.toggling) or (self.frame >= int(2 * len(self.level.imgs[self.anim]) / 3) and not self.setting and self.toggling)) and self.send_signal): for link in self.links: link(self.signal[self.setting]) self.send_signal = False worldobject.WorldObject.update(self, e, t, dt) def draw(self, window): self.img = self.level.imgs[self.anim][int(self.frame)] window.blit(self.img, (self.x - 32 - self.level.camera_x, self.y - self.img.get_size()[1] + 24 - self.level.camera_y))