Mercurial > parpg-core
diff src/parpg/systems/container.py @ 36:6a637c737d20
Added system for containers
author | KarstenBock@gmx.net |
---|---|
date | Sun, 31 Jul 2011 23:47:28 +0200 |
parents | |
children | bd1e3b743518 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/parpg/systems/container.py Sun Jul 31 23:47:28 2011 +0200 @@ -0,0 +1,56 @@ +# 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) + + \ No newline at end of file