Example #1
0
    def save_gamestate(self, filename, player):
        print("Saveing game state...")
        data = DictMapper()
        # Save player data
        data["inventory"] = player.inventory
        data["itemscounter"] = player.itemscounter
        data["money"] = player.money
        data["watercanuses"] = player.watercanuses
        data["exp"] = player.exp
        data["nextlvlexp"] = player.nextlvlexp
        data["level"] = player.level
        # Save time
        data["gametime"] = int(time.time())
        data["gameseed"] = self.getgameseed()
        # save tiles
        data["fields"] = []

        # fill tiles
        for farmid in xrange(self.getfarmcount()):
            farm = self.getfarm(farmid)
            data["fields"].append({"tiles": []})
            for ftt in farm.farmtiles.keys():
                ft = farm.farmtiles[ftt]
                # skip when no seed
                if not ft['object']:
                    continue

                gameobject = ft['object']
                tile = {}
                tile["px"] = int(ftt.split('x')[0])
                tile["py"] = int(ftt.split('x')[1])
                tile["water"] = ft["water"]

                tile["object"] = {}
                # seed data
                tile["object"]["type"] = gameobject.type
                tile["object"]['id'] = gameobject.id

                if gameobject.type == "seed":
                    tile["object"]['growstarttime'] = gameobject.growstarttime
                    tile["object"]['growendtime'] = gameobject.growendtime
                    tile["object"]['growing'] = bool(gameobject.growing)
                    tile["object"]['to_harvest'] = bool(gameobject.to_harvest)
                    tile["object"]['harvestcount'] = gameobject.harvestcount
                # set tile
                data["fields"][farmid]["tiles"].append(tile)
        # save data
        data.save("field.json")
        return True
Example #2
0
    def load_gamestate(self, filename, player):
        if not os.path.isfile(filename):
            return False
        print("Loading game state...")
        data = DictMapper()
        data.load(filename)
        player.inventory = data["inventory"]
        player.itemscounter = data["itemscounter"]
        player.watercanuses = data.get("watercanuses", 100)
        player.exp = data.get("exp", 0.0)
        player.nextlvlexp = data.get("nextlvlexp", 100.0)
        player.money = int(data.get("money", 1))
        player.level = int(data.get("level", 1))
        # loda game time
        self.seconds_to_update = int(time.time()) - data.get("gametime",
                                                             int(time.time()))
        seed = data.get("gameseed", int(time.time()))
        self.setgameseed(seed)

        # Migrate old farm
        if "fields" not in data.keys():
            data["fields"] = []
            data['fields'].append({})
            data['fields'][0]["tiles"] = data["tiles"]
        # load tiles
        for farmid in xrange(len(data["fields"])):
            farm = self.getfarm(farmid)
            if farm is None:
                farm = self.addfarm()
            # Restore tiles
            for tile in data["fields"][farmid]["tiles"]:
                px = tile["px"]
                py = tile["py"]
                # Avoid null objects
                if not tile["object"]:
                    continue

                # Restore seed or object
                if tile["object"]["type"] == "seed":
                    objectdata = tile["object"]
                    newobject = Seed()

                    newobject.id = objectdata["id"]
                    newobject.type = objectdata["type"]

                    newobject.to_harvest = objectdata["to_harvest"]
                    newobject.growing = objectdata["growing"]
                    newobject.growendtime = objectdata["growendtime"]
                    newobject.growstarttime = objectdata["growstarttime"]

                    farmtile = FarmTile(newobject)
                    farmtile["water"] = tile["water"]

                    # Apply global object data
                    newobject.apply_dict(objects[newobject.id])

                    # Restore harvest count
                    newobject.harvestcount = objectdata.get("harvestcount", 1)
                    newobject.requiredlevel = objectdata.get(
                        "requiredlevel", 1)
                else:
                    newobject = FarmObject()

                    newobject.id = tile["object"]["id"]
                    newobject.type = tile["object"]["type"]
                    # apply dict
                    newobject.apply_dict(objects[newobject.id])
                    farmtile = FarmTile(newobject)
                # set farmtile
                farm.set_farmtile(px, py, farmtile)
        # return
        return True
    def save_gamestate(self, player):
        """Saveing game state

        :param player:
        :return:
        """
        print("Saveing game state...")
        data = DictMapper()
        # Save player data
        data["inventory"] = player.inventory
        data["itemscounter"] = player.itemscounter
        data["money"] = player.money
        data["watercanuses"] = player.watercanuses
        data["exp"] = player.exp
        data["nextlvlexp"] = player.nextlvlexp
        data["level"] = player.level
        # Save time
        data["gametime"] = int(time.time())
        data["gameseed"] = self.getgameseed()
        # save tiles
        data["fields"] = []
        try:
            dict.iteritems
        except AttributeError:
            # Python 3
            def listkeys(d):
                """listkeys

                :param d:
                :return:
                """
                return list(d)
        else:
            # Python 2
            def listkeys(d):
                """listkeys

                :param d:
                :return:
                """
                return d.keys()

        # fill tiles
        for farmid in xrange(self.getfarmcount()):
            farm = self.getfarm(farmid)
            data["fields"].append({"tiles": []})
            for ftt in listkeys(farm.farmtiles):
                ft = farm.farmtiles[ftt]
                # skip when no seed
                if not ft['object']:
                    continue

                gameobject = ft['object']
                tile = {}
                tile["px"] = int(ftt.split('x')[0])
                tile["py"] = int(ftt.split('x')[1])
                tile["water"] = ft["water"]

                tile["object"] = {}
                # seed data
                tile["object"]["type"] = gameobject.type
                tile["object"]['id'] = gameobject.id

                if isinstance(gameobject, Seed):
                    tile["object"]['growstarttime'] = gameobject.growstarttime
                    tile["object"]['growendtime'] = gameobject.growendtime
                    tile["object"]['growing'] = bool(gameobject.growing)
                    tile["object"]['to_harvest'] = bool(gameobject.to_harvest)
                    tile["object"]['harvestcount'] = gameobject.harvestcount
                # set tile
                data["fields"][farmid]["tiles"].append(tile)
        # save data
        data.save("field.json")
        return True