Mercurial > parpg-core
view src/parpg/systems/container.py @ 39:8b3890f17f94
FifeManager no longer subclasses ApplicationBase
PARPGApplication stores an instance of tbe manager instead
author | KarstenBock@gmx.net |
---|---|
date | Wed, 03 Aug 2011 22:57:52 +0200 |
parents | bd1e3b743518 |
children | be9a0e9e3ac2 |
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.append(old_containable) else: new_container.append(containable) containable.current_container = new_container else: for listener in self.on_bulk_to_big: listener(bulk, new_container.max_bulk)