""" mgoal.py
 Copyright (C) 1998 Aloril
 
 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 2 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, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
"""

import whrandom
import const
from goal import goal
from house import house
from mind import *

#goals for minds

def false(me): return 0
def true(me): return 1

############################ FIND HOME ####################################

def is_suitable_place_for_home(me):
    "place is suitable is there is no homes in 100m radius"
    count=len(me.mem.recall_place(me.get_xyz(),100.0))
    return count==0

def find_place(me):
    "find place for home: wander randomly"
    (x,y,z)=me.get_xyz()
    r=lambda :whrandom.uniform(-50,50)
    return [event("move",what=me,loc=(x+r(),y+r(),z+r()))]

find_place_for_home=goal("find place for home not too near or far from others",
                         is_suitable_place_for_home,
                         [find_place])

def make_home(me):
    "Starts home building"
    me.add_knowledge("xyz","home",me.get_xyz())
    return [event("make",what="house", what_desc="home", loc=me.get_xyz())]

def have_home(me):
    "Do I have home?"
    return me.things.has_key('house')

find_home=goal("find place for home and make it",
               have_home,
               [find_place_for_home,make_home])

############################ BUILD HOME ####################################

def have_build_home(me):
    "Do I have home that is fully build?"
    t=me.things.get('house')
    if t: return t[0].status>=1.0-const.fzero

def build_house(me):
    "Build my home"
    h=me.things['house'][0]
    return [event("change",what=h,amount=0.1)]

build_home=goal("find place for home and build it",
                have_build_home,
                [find_home, build_house])

########################## MAKE LOTS OF SOMETHING #################################

class make_amount(goal):
    def __init__(self, what, amount, what_desc="some thing", place=None):
        goal.__init__(self,"make certain amount of things",
                      self.are_all_done,
                      [move_me(place),self.do_all])
        self.what=what
        self.amount=amount
        self.what_desc=what_desc
        self.vars=["what","amount"]
    def are_all_done(self, me):
        t_list=me.find_thing(self.what)
        if len(t_list)

    Source: geocities.com/siliconvalley/station/4279/src

               ( geocities.com/siliconvalley/station/4279)                   ( geocities.com/siliconvalley/station)                   ( geocities.com/siliconvalley)