示例#1
0
 def enterMakeBlankHouse(self):
     self.house = DistributedHouseAI(self.mgr.air)
     self.house.setHousePos(self.index)
     self.house.setColor(self.index)
     self.house.generateWithRequired(self.estate.zoneId)
     self.estate.houses[self.index] = self.house
     self.demand('Off')
 def enterMakeBlankHouse(self):
     self.house = DistributedHouseAI(self.mgr.air)
     self.house.setHousePos(self.houseIndex)
     self.house.setColor(self.houseIndex)
     self.house.generateWithRequired(self.estate.zoneId)
     self.estate.houses[self.houseIndex] = self.house
     self.demand('Off')
示例#3
0
class LoadHouseOperation(FSM):
    def __init__(self, mgr, estate, index, avatar, callback):
        FSM.__init__(self, 'LoadHouseOperation')
        self.mgr = mgr
        self.estate = estate
        self.index = index
        self.avatar = avatar
        self.callback = callback
        self.done = False
        self.houseId = None
        self.house = None
        self.gender = None
        return

    def start(self):
        if self.avatar is None:
            taskMgr.doMethodLater(0.0,
                                  self.demand,
                                  'makeBlankHouse-%s' % id(self),
                                  extraArgs=['MakeBlankHouse'])
            return
        else:
            style = ToonDNA.ToonDNA()
            style.makeFromNetString(self.avatar.get('setDNAString')[0])
            self.houseId = self.avatar.get('setHouseId', [0])[0]
            self.gender = style.gender
            if self.houseId == 0:
                self.demand('CreateHouse')
            else:
                self.demand('LoadHouse')
            return

    def enterMakeBlankHouse(self):
        self.house = DistributedHouseAI(self.mgr.air)
        self.house.setHousePos(self.index)
        self.house.setColor(self.index)
        self.house.generateWithRequired(self.estate.zoneId)
        self.estate.houses[self.index] = self.house
        self.demand('Off')

    def enterCreateHouse(self):
        self.mgr.air.dbInterface.createObject(
            self.mgr.air.dbId,
            self.mgr.air.dclassesByName['DistributedHouseAI'], {
                'setName': [self.avatar['setName'][0]],
                'setAvatarId': [self.avatar['avId']]
            }, self.__handleHouseCreated)

    def __handleHouseCreated(self, houseId):
        if self.state != 'CreateHouse':
            return
        av = self.mgr.air.doId2do.get(self.avatar['avId'])
        if av:
            av.b_setHouseId(houseId)
        else:
            self.mgr.air.dbInterface.updateObject(
                self.mgr.air.dbId, self.avatar['avId'],
                self.mgr.air.dclassesByName['DistributedToonAI'],
                {'setHouseId': [houseId]})
        self.houseId = houseId
        self.demand('LoadHouse')

    def enterLoadHouse(self):
        self.mgr.air.sendActivate(
            self.houseId, self.mgr.air.districtId, self.estate.zoneId,
            self.mgr.air.dclassesByName['DistributedHouseAI'], {
                'setHousePos': [self.index],
                'setColor': [self.index],
                'setName': [self.avatar['setName'][0]],
                'setAvatarId': [self.avatar['avId']]
            })
        self.acceptOnce('generate-%d' % self.houseId,
                        self.__handleHouseGenerated)

    def __handleHouseGenerated(self, house):
        house.estate = self.estate
        house.interior.gender = self.gender
        house.interior.start()
        self.house = house
        self.estate.houses[self.index] = self.house
        if config.GetBool('want-gardening', False):
            self.house.createGardenManager()
        self.demand('Off')

    def exitLoadHouse(self):
        self.ignore('generate-%d' % self.houseId)

    def enterOff(self):
        self.done = True
        self.callback(self.house)
示例#4
0
class LoadHouseFSM(FSM):
    def __init__(self, mgr, estate, houseIndex, toon, callback):
        FSM.__init__(self, 'LoadHouseFSM')
        self.mgr = mgr
        self.estate = estate
        self.houseIndex = houseIndex
        self.toon = toon
        self.callback = callback

        self.done = False

    def start(self):
        # We have a few different cases here:
        if self.toon is None:
            # Case #1: There isn't a Toon in that estate slot. Make a blank house.

            # Because this state completes so fast, we'll use taskMgr to delay
            # it until the next iteration. This solves re-entrancy problems.
            taskMgr.doMethodLater(0.0,
                                  self.demand,
                                  'makeBlankHouse-%s' % id(self),
                                  extraArgs=['MakeBlankHouse'])
            return

        self.houseId = self.toon.get('setHouseId', [0])[0]
        if self.houseId == 0:
            # Case #2: There is a Toon, but no setHouseId. Gotta make one.
            self.demand('CreateHouse')
        else:
            # Case #3: Toon with a setHouseId. Load it.
            self.demand('LoadHouse')

    def enterMakeBlankHouse(self):
        self.house = DistributedHouseAI(self.mgr.air)
        self.house.setHousePos(self.houseIndex)
        self.house.setColor(self.houseIndex)
        self.house.generateWithRequired(self.estate.zoneId)
        self.estate.houses[self.houseIndex] = self.house
        self.demand('Off')

    def enterCreateHouse(self):
        self.mgr.air.dbInterface.createObject(
            self.mgr.air.dbId,
            self.mgr.air.dclassesByName['DistributedHouseAI'], {
                'setName': [self.toon['setName'][0]],
                'setAvatarId': [self.toon['ID']],
            }, self.__handleCreate)

    def __handleCreate(self, doId):
        if self.state != 'CreateHouse':
            return

        # Update the avatar's houseId:
        av = self.mgr.air.doId2do.get(self.toon['ID'])
        if av:
            av.b_setHouseId(doId)
        else:
            self.mgr.air.dbInterface.updateObject(
                self.mgr.air.dbId, self.toon['ID'],
                self.mgr.air.dclassesByName['DistributedToonAI'],
                {'setHouseId': [doId]})

        self.houseId = doId
        self.demand('LoadHouse')

    def enterLoadHouse(self):
        # Quickly parse DNA and get gender.
        dna = ToonDNA()
        dna.makeFromNetString(self.toon['setDNAString'][0])
        gender = 1 if dna.getGender() == 'm' else 0

        # Activate the house:
        self.mgr.air.sendActivate(
            self.houseId, self.mgr.air.districtId, self.estate.zoneId,
            self.mgr.air.dclassesByName['DistributedHouseAI'], {
                'setHousePos': [self.houseIndex],
                'setColor': [self.houseIndex],
                'setName': [self.toon['setName'][0]],
                'setAvatarId': [self.toon['ID']],
                'setGender': [gender]
            })

        # Now we wait for the house to show up... We do this by hanging a messenger
        # hook which the DistributedHouseAI throws once it spawns.
        self.acceptOnce('generate-%d' % self.houseId, self.__gotHouse)

    def __gotHouse(self, house):
        self.house = house

        self.estate.houses[self.houseIndex] = self.house

        self.demand('Off')

    def exitLoadHouse(self):
        self.ignore('generate-%d' % self.houseId)

    def enterOff(self):
        self.done = True
        self.callback(self.house)
class LoadHouseFSM(FSM):
    def __init__(self, mgr, estate, houseIndex, toon, callback):
        FSM.__init__(self, 'LoadHouseFSM')
        self.mgr = mgr
        self.estate = estate
        self.houseIndex = houseIndex
        self.toon = toon
        self.callback = callback

        self.done = False

    def start(self):
        # We have a few different cases here:
        if self.toon is None:
            # Case #1: There isn't a Toon in that estate slot. Make a blank house.

            # Because this state completes so fast, we'll use taskMgr to delay
            # it until the next iteration. This solves re-entrancy problems.
            taskMgr.doMethodLater(0.0, self.demand,
                                  'makeBlankHouse-%s' % id(self),
                                  extraArgs=['MakeBlankHouse'])
            return

        self.houseId = self.toon.get('setHouseId', [0])[0]
        if self.houseId  == 0:
            # Case #2: There is a Toon, but no setHouseId. Gotta make one.
            self.demand('CreateHouse')
        else:
            # Case #3: Toon with a setHouseId. Load it.
            self.demand('LoadHouse')

    def enterMakeBlankHouse(self):
        self.house = DistributedHouseAI(self.mgr.air)
        self.house.setHousePos(self.houseIndex)
        self.house.setColor(self.houseIndex)
        self.house.generateWithRequired(self.estate.zoneId)
        self.estate.houses[self.houseIndex] = self.house
        self.demand('Off')

    def enterCreateHouse(self):
        self.mgr.air.dbInterface.createObject(
            self.mgr.air.dbId,
            self.mgr.air.dclassesByName['DistributedHouseAI'],
            {
                'setName' : [self.toon['setName'][0]],
                'setAvatarId' : [self.toon['ID']],
            },
            self.__handleCreate)

    def __handleCreate(self, doId):
        if self.state != 'CreateHouse':
            return

        # Update the avatar's houseId:
        av = self.mgr.air.doId2do.get(self.toon['ID'])
        if av:
            av.b_setHouseId(doId)
        else:
            self.mgr.air.dbInterface.updateObject(
                self.mgr.air.dbId,
                self.toon['ID'],
                self.mgr.air.dclassesByName['DistributedToonAI'],
                {'setHouseId': [doId]})

        self.houseId = doId
        self.demand('LoadHouse')

    def enterLoadHouse(self):
        # Activate the house:
        self.mgr.air.sendActivate(self.houseId, self.mgr.air.districtId, self.estate.zoneId,
                                  self.mgr.air.dclassesByName['DistributedHouseAI'],
                                  {'setHousePos': [self.houseIndex],
                                   'setColor': [self.houseIndex],
                                   'setName': [self.toon['setName'][0]],
                                   'setAvatarId': [self.toon['ID']]})

        # Now we wait for the house to show up... We do this by hanging a messenger
        # hook which the DistributedHouseAI throws once it spawns.
        self.acceptOnce('generate-%d' % self.houseId, self.__gotHouse)

    def __gotHouse(self, house):
        self.house = house

        self.estate.houses[self.houseIndex] = self.house

        self.demand('Off')

    def exitLoadHouse(self):
        self.ignore('generate-%d' % self.houseId)

    def enterOff(self):
        self.done = True
        self.callback(self.house)
示例#6
0
class LoadHouseFSM(FSM):

    def __init__(self, mgr, estate, houseIndex, toon, callback):
        FSM.__init__(self, 'LoadHouseFSM')
        self.mgr = mgr
        self.estate = estate
        self.houseIndex = houseIndex
        self.toon = toon
        self.callback = callback
        self.done = False

    def start(self):
        if self.toon is None:
            taskMgr.doMethodLater(0.0, self.demand, 'makeBlankHouse-%s' % id(self), extraArgs=['MakeBlankHouse'])
            return
        self.houseId = self.toon.get('setHouseId', [0])[0]
        if self.houseId == 0:
            self.demand('CreateHouse')
        else:
            self.demand('LoadHouse')

    def enterMakeBlankHouse(self):
        self.house = DistributedHouseAI(self.mgr.air)
        self.house.setHousePos(self.houseIndex)
        self.house.setColor(self.houseIndex)
        self.house.generateWithRequired(self.estate.zoneId)
        self.estate.houses[self.houseIndex] = self.house
        self.demand('Off')

    def enterCreateHouse(self):
        self.mgr.air.dbInterface.createObject(self.mgr.air.dbId, self.mgr.air.dclassesByName['DistributedHouseAI'], {'setName': [self.toon['setName'][0]],
         'setAvatarId': [self.toon['ID']]}, self.__handleCreate)

    def __handleCreate(self, doId):
        if self.state != 'CreateHouse':
            return
        av = self.mgr.air.doId2do.get(self.toon['ID'])
        if av:
            av.b_setHouseId(doId)
        else:
            self.mgr.air.dbInterface.updateObject(self.mgr.air.dbId, self.toon['ID'], self.mgr.air.dclassesByName['DistributedToonAI'], {'setHouseId': [doId]})
        self.houseId = doId
        self.demand('LoadHouse')

    def enterLoadHouse(self):
        self.mgr.air.sendActivate(self.houseId, self.mgr.air.districtId, self.estate.zoneId, self.mgr.air.dclassesByName['DistributedHouseAI'], {'setHousePos': [self.houseIndex],
         'setColor': [self.houseIndex],
         'setName': [self.toon['setName'][0]],
         'setAvatarId': [self.toon['ID']]})
        self.acceptOnce('generate-%d' % self.houseId, self.__gotHouse)

    def __gotHouse(self, house):
        self.house = house
        self.estate.houses[self.houseIndex] = self.house
        self.demand('Off')

    def exitLoadHouse(self):
        self.ignore('generate-%d' % self.houseId)

    def enterOff(self):
        self.done = True
        self.callback(self.house)
示例#7
0
class LoadHouseOperation(FSM):
    def __init__(self, mgr, estate, index, avatar, callback):
        FSM.__init__(self, 'LoadHouseOperation')
        self.mgr = mgr
        self.estate = estate
        self.index = index
        self.avatar = avatar
        self.callback = callback
        self.done = False
        self.houseId = None
        self.house = None
        self.gender = None

    def start(self):
        # We have a few different cases here:
        if self.avatar is None:
            # Case #1: There isn't an avatar in that estate slot. Make a blank house.
            # Because this state completes so fast, we'll use taskMgr to delay
            # it until the next iteration. This solves reentrancy problems.
            taskMgr.doMethodLater(0.0,
                                  self.demand,
                                  'makeBlankHouse-%s' % id(self),
                                  extraArgs=['MakeBlankHouse'])
            return

        style = ToonDNA.ToonDNA()
        style.makeFromNetString(self.avatar.get('setDNAString')[0])
        self.houseId = self.avatar.get('setHouseId', [0])[0]
        self.gender = style.gender
        if self.houseId == 0:
            # Case #2: There is an avatar, but no setHouseId. Make a new house:
            self.demand('CreateHouse')
        else:
            # Case #3: Avatar with a setHouseId. Load it:
            self.demand('LoadHouse')

    def enterMakeBlankHouse(self):
        self.house = DistributedHouseAI(self.mgr.air)
        self.house.setHousePos(self.index)
        self.house.setColor(self.index)
        self.house.generateWithRequired(self.estate.zoneId)
        self.estate.houses[self.index] = self.house
        self.demand('Off')

    def enterCreateHouse(self):
        self.mgr.air.dbInterface.createObject(
            self.mgr.air.dbId,
            self.mgr.air.dclassesByName['DistributedHouseAI'], {
                'setName': [self.avatar['setName'][0]],
                'setAvatarId': [self.avatar['avId']]
            }, self.__handleHouseCreated)

    def __handleHouseCreated(self, houseId):
        if self.state != 'CreateHouse':
            # This operation was likely aborted.
            return

        # Update the avatar's houseId:
        av = self.mgr.air.doId2do.get(self.avatar['avId'])
        if av:
            av.b_setHouseId(houseId)
        else:
            self.mgr.air.dbInterface.updateObject(
                self.mgr.air.dbId, self.avatar['avId'],
                self.mgr.air.dclassesByName['DistributedToonAI'],
                {'setHouseId': [houseId]})

        self.houseId = houseId
        self.demand('LoadHouse')

    def enterLoadHouse(self):
        # Activate the house:
        self.mgr.air.sendActivate(
            self.houseId, self.mgr.air.districtId, self.estate.zoneId,
            self.mgr.air.dclassesByName['DistributedHouseAI'], {
                'setHousePos': [self.index],
                'setColor': [self.index],
                'setName': [self.avatar['setName'][0]],
                'setAvatarId': [self.avatar['avId']]
            })

        # Wait for the house to generate:
        self.acceptOnce('generate-%d' % self.houseId,
                        self.__handleHouseGenerated)

    def __handleHouseGenerated(self, house):
        # The house will need to be able to reference
        # the estate for setting up gardens, so:
        house.estate = self.estate

        # Initialize our interior:
        house.interior.gender = self.gender
        house.interior.start()

        self.house = house
        self.estate.houses[self.index] = self.house
        if config.GetBool('want-gardening', False):
            # Initialize our garden:
            self.house.createGardenManager()

        self.demand('Off')

    def exitLoadHouse(self):
        self.ignore('generate-%d' % self.houseId)

    def enterOff(self):
        self.done = True
        self.callback(self.house)
class LoadHouseFSM(FSM):

    def __init__(self, mgr, estate, houseIndex, toon, callback):
        FSM.__init__(self, 'LoadHouseFSM')
        self.mgr = mgr
        self.estate = estate
        self.houseIndex = houseIndex
        self.toon = toon
        self.callback = callback
        self.done = False

    def start(self):
        if self.toon is None:
            taskMgr.doMethodLater(0.0, self.demand, 'makeBlankHouse-%s' % id(self), extraArgs=['MakeBlankHouse'])
            return
        self.houseId = self.toon.get('setHouseId', [0])[0]
        if self.houseId == 0:
            self.demand('CreateHouse')
        else:
            self.demand('LoadHouse')

    def enterMakeBlankHouse(self):
        self.house = DistributedHouseAI(self.mgr.air)
        self.house.setHousePos(self.houseIndex)
        self.house.setColor(self.houseIndex)
        self.house.generateWithRequired(self.estate.zoneId)
        self.estate.houses[self.houseIndex] = self.house
        self.demand('Off')

    def enterCreateHouse(self):
        self.mgr.air.dbInterface.createObject(self.mgr.air.dbId, self.mgr.air.dclassesByName['DistributedHouseAI'], {'setName': [self.toon['setName'][0]],
         'setAvatarId': [self.toon['ID']]}, self.__handleCreate)

    def __handleCreate(self, doId):
        if self.state != 'CreateHouse':
            return
        av = self.mgr.air.doId2do.get(self.toon['ID'])
        if av:
            av.b_setHouseId(doId)
        else:
            self.mgr.air.dbInterface.updateObject(self.mgr.air.dbId, self.toon['ID'], self.mgr.air.dclassesByName['DistributedToonAI'], {'setHouseId': [doId]})
        self.houseId = doId
        self.demand('LoadHouse')

    def enterLoadHouse(self):
        dna = ToonDNA()
        dna.makeFromNetString(self.toon['setDNAString'][0])
        gender = 1 if dna.getGender() == 'm' else 0
        self.mgr.air.sendActivate(self.houseId, self.mgr.air.districtId, self.estate.zoneId, self.mgr.air.dclassesByName['DistributedHouseAI'], {'setHousePos': [self.houseIndex],
         'setColor': [self.houseIndex],
         'setName': [self.toon['setName'][0]],
         'setAvatarId': [self.toon['ID']],
         'setGender': [gender]})
        self.acceptOnce('generate-%d' % self.houseId, self.__gotHouse)

    def __gotHouse(self, house):
        self.house = house
        self.estate.houses[self.houseIndex] = self.house
        self.demand('Off')

    def exitLoadHouse(self):
        self.ignore('generate-%d' % self.houseId)

    def enterOff(self):
        self.done = True
        self.callback(self.house)