Mercurial > parpg-source
view systems/container.py @ 14:a9019d0ac5f8
Added system for containers
author | KarstenBock@gmx.net |
---|---|
date | Sun, 31 Jul 2011 23:47:28 +0200 |
parents | |
children | 5c587a0d9ad7 |
line wrap: on
line source
# This program 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. # # This program 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 this program. If not, see <http://www.gnu.org/licenses/>. from parpg.grease import System from parpg.components import container class Container(System): """System that controls changes to containers""" def __init__(self, drag_container, container_component="container", containable_component="containable" ): """Constructor""" self.drag_container = drag_container self.container_component = container_component self.containable_component = containable_component self.on_bulk_to_big = [] def step(self, dt): """Perform changes to containers and items""" assert self.world is not None, "Cannot run with no world set" for containable in self.world.components.join( self.containable_component ): if containable.new_container: new_container = containable.new_container new_slot = containable.new_slot bulk_add = containable.bulk if new_slot >= 0 and new_slot < len(new_container.children): bulk_add -= new_container.children[new_slot].bulk elif new_slot >= len(new_container.children): new_slot = -1 bulk = get_bulk(new_container) + bulk_add if bulk < new_container.max_bulk: if new_slot >= 0: new_container.children.insert(new_slot + 1, containable) containable.current_container = new_container old_containable = new_container.children.pop(new_slot) old_containable.current_container = drag_container drag_container.children = [old_containable] else: for listener in self.on_bulk_to_big: listener(bulk, new_container.max_bulk)