# This file is part of ROBOTGAME
#
# ROBOTGAME 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.
#
# ROBOTGAME 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
# ROBOTGAME.  If not, see <http://www.gnu.org/licenses/>.
#
# ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
#
#                          trigger.py
#                     --------------------
#       date created : Thu Aug 9 2012
#          copyright : (C) 2012 Sakse Dalum
#      maintained by : Sakse Dalum <don_s@hongabar.org>

"""
A generic trigger pad.
"""

import pygame

import worldobject

class Trigger(worldobject.WorldObject):
    def __init__(self, level, x, y, links, img, trigger_objs,
                 toggling=False, signal=[0, 1],
                 setting=False, blocking=False,
                 visible=True, no_stop=False):
        self.__dict__.update(locals())
        worldobject.WorldObject.__init__(self, level, x, y, z=-48,
                                         blocking=blocking, visible=visible)

        self.frame = 0
        self.anim_speed = 15

    def trigger(self, setting, obj):
        if self.setting != setting or self.no_stop:
            self.setting = setting

            for link in self.links:
                link(self.signal[setting])

    def update(self, e, t, dt):
        for obj in self.trigger_objs:
            if self.x == obj.x and self.y == obj.y:
                self.trigger(True, obj)
                break
            if self.toggling:
                self.trigger(False, obj)

        worldobject.WorldObject.update(self, e, t, dt)

    def draw(self, window):
        if self.visible:
            window.blit(self.img, (self.x - 32 - self.level.camera_x,
                                   self.y - self.img.get_size()[1] + 24
                                   - self.level.camera_y))
