def loadworld(self, game):
		self.size = 500
		self.spawn = [self.size//2,self.size//2]
		file = open('world/1.data', 'rb')
		self.data = zlib.decompress(file.read())
		self.data = pickle.loads(self.data)
		file.close()
		self.rendered = {}
		for x in xrange(self.spawn[0], self.spawn[0]+game.maxxtile+1):
			for y in xrange(self.spawn[1], self.spawn[1]+game.maxytile+1):
				newx = x - self.spawn[0]
				newy = y - self.spawn[1]
				self.rendered[(newx,newy)] = helper.loadtilebyid(self.data[x][y][0], self.data[x][y][1], game, (x,y), game.dummytile.image.width*newx, game.dummytile.image.height*newy, RespawnTime=self.data[x][y][1])
		print('world loaded!')
	def genworld(self, game, seed=False):
		######WORLD FORMAT:    [id, subid, timeTakenToRespawnInSeconds, TimeChanged(datetime.now)]     #######
		dummytile = game.dummytile
		print('Now generating world...')
		if seed:
			self.seed = seed
		else:
			self.seed = int(random.getrandbits(32))
		print('World seed: '+str(self.seed))
		random.seed(self.seed)
		self.size = 500
		self.spawn = [self.size//2,self.size//2]
		self.data = []
		for rangex in xrange(0, self.size):
			self.data.append([])
			for rangey in xrange(0, self.size):
				self.data[rangex].append([])
				randnumber = random.randrange(0,1000)
				type = random.randrange(0,1000)
				if randnumber is not None:
					#grass
					id = 1
					if type >= 990:
						subid = 0
					elif type >= 975:
						subid = 1
					elif type >= 955:
						subid = 2
					else:
						subid = 7 #normal
				self.data[rangex][rangey] = self.worlditemiser(id,subid)
		self.rendered = {}
		for x in xrange(self.spawn[0]-1, self.spawn[0]+game.maxxtile+1):
			for y in xrange(self.spawn[1]-1, self.spawn[1]+game.maxytile+1):
				newx = x - self.spawn[0]-1
				newy = y - self.spawn[1]-1
				self.rendered[(newx,newy)] = helper.loadtilebyid(self.data[x][y][0], self.data[x][y][1], game, (x,y), dummytile.image.width*newx,
					dummytile.image.height*newy)
		toreplace = self.rendered[game.player.getscreenpos()]
		self.rendered[game.player.getscreenpos()] = environment.Grass(game, self.rendered[game.player.getscreenpos()].getpos(), subid=7, x=self.rendered[game.player.getscreenpos()].x, y=self.rendered[game.player.getscreenpos()].y, batch=game.batch, group=game.deepmap)
		toreplace.delete()
		print('World generated')
Example #3
0
    def move(self, dir):
        # move world
        torender = {}
        todelete = {}
        if dir == "right":
            self.player.set_direction(self, "right")
            if self.movetimer + datetime.timedelta(seconds=self.movedelay) <= datetime.datetime.now():
                # check collision
                if self.world.rendered[
                    (self.maxxtile // 2 + 1, self.maxytile // 2)
                ].solid and self.player.sprite.collide(
                    [self.world.rendered[(self.maxxtile // 2 + 1, self.maxytile // 2)]] != []
                ):
                    torender = self.world.rendered
                else:
                    self.movetimer2 = datetime.datetime.now()
                    for x in self.world.rendered:
                        self.world.rendered[x].x = self.world.rendered[x].x - 2
                        if self.world.rendered[x].right < -self.dummytile.image.width:
                            todelete[x] = self.world.rendered[x]
                        elif (
                            self.world.rendered[x].left
                            <= (x[0] * self.dummytile.image.width) - self.dummytile.image.width
                        ):
                            torender[(x[0] - 1, x[1])] = self.world.rendered[x]
                        else:
                            torender[x] = self.world.rendered[x]
                    for x in todelete:
                        xtoupdate = todelete[x].getpos()[0] + self.maxxtile + 2
                        torender[(self.maxxtile + 1, x[1])] = helper.loadtilebyid(
                            self.world.data[xtoupdate][todelete[x].getpos()[1]][0],
                            self.world.data[xtoupdate][todelete[x].getpos()[1]][1],
                            self,
                            (xtoupdate, self.world.rendered[x].getpos()[1]),
                            (self.maxxtile) * self.dummytile.image.width - 2,
                            self.world.rendered[x].bottom,
                            self.world.data[xtoupdate][todelete[x].getpos()[1]][2],
                        )
                        todelete[x].delete()
            else:
                torender = self.world.rendered

        elif dir == "left":
            self.player.set_direction(self, "left")
            if self.movetimer + datetime.timedelta(seconds=self.movedelay) <= datetime.datetime.now():
                # check collision
                if self.world.rendered[
                    (self.maxxtile // 2 - 1, self.maxytile // 2)
                ].solid and self.player.sprite.collide(
                    [self.world.rendered[(self.maxxtile // 2 - 1, self.maxytile // 2)]] != []
                ):
                    torender = self.world.rendered
                else:
                    self.movetimer2 = datetime.datetime.now()
                    for x in self.world.rendered:
                        self.world.rendered[x].x = self.world.rendered[x].x + 2
                        if self.world.rendered[x].left > self.width + self.dummytile.width:
                            todelete[x] = self.world.rendered[x]
                        elif (
                            self.world.rendered[x].left
                            >= (x[0] * self.dummytile.image.width) + self.dummytile.image.width
                        ):
                            torender[(x[0] + 1, x[1])] = self.world.rendered[x]
                        else:
                            torender[x] = self.world.rendered[x]
                    for x in todelete:
                        xtoupdate = todelete[x].getpos()[0] - (self.maxxtile + 2)
                        torender[(-1, x[1])] = helper.loadtilebyid(
                            self.world.data[xtoupdate][todelete[x].getpos()[1]][0],
                            self.world.data[xtoupdate][todelete[x].getpos()[1]][1],
                            self,
                            (xtoupdate, self.world.rendered[x].getpos()[1]),
                            -self.dummytile.width + 2,
                            self.world.rendered[x].bottom,
                            self.world.data[xtoupdate][todelete[x].getpos()[1]][2],
                        )
                        todelete[x].delete()
            else:
                torender = self.world.rendered

        elif dir == "down":
            self.player.set_direction(self, "down")
            if self.movetimer + datetime.timedelta(seconds=self.movedelay) <= datetime.datetime.now():
                # check collision
                if self.world.rendered[
                    (self.maxxtile // 2, self.maxytile // 2 - 1)
                ].solid and self.player.sprite.collide(
                    [self.world.rendered[(self.maxxtile // 2, self.maxytile // 2 - 1)]] != []
                ):
                    torender = self.world.rendered
                else:
                    self.movetimer2 = datetime.datetime.now()
                    for x in self.world.rendered:
                        self.world.rendered[x].y = self.world.rendered[x].y + 2
                        if self.world.rendered[x].bottom > self.height + self.dummytile.height:
                            todelete[x] = self.world.rendered[x]
                        elif (
                            self.world.rendered[x].bottom
                            >= (x[1] * self.dummytile.image.height) + self.dummytile.image.height
                        ):
                            torender[(x[0], x[1] + 1)] = self.world.rendered[x]
                        else:
                            torender[x] = self.world.rendered[x]
                    for x in todelete:
                        ytoupdate = todelete[x].getpos()[1] - (self.maxytile + 2)
                        torender[(x[0], -1)] = helper.loadtilebyid(
                            self.world.data[todelete[x].getpos()[0]][ytoupdate][0],
                            self.world.data[todelete[x].getpos()[0]][ytoupdate][1],
                            self,
                            (self.world.rendered[x].getpos()[0], ytoupdate),
                            self.world.rendered[x].left,
                            -self.dummytile.height + 2,
                            self.world.data[todelete[x].getpos()[0]][ytoupdate][2],
                        )
                        todelete[x].delete()
            else:
                torender = self.world.rendered

        elif dir == "up":
            self.player.set_direction(self, "up")
            if self.movetimer + datetime.timedelta(seconds=self.movedelay) <= datetime.datetime.now():
                # check collision
                if self.world.rendered[
                    (self.maxxtile // 2, self.maxytile // 2 + 1)
                ].solid and self.player.sprite.collide(
                    [self.world.rendered[(self.maxxtile // 2, self.maxytile // 2 + 1)]] != []
                ):
                    torender = self.world.rendered
                else:
                    self.movetimer2 = datetime.datetime.now()
                    for x in self.world.rendered:
                        self.world.rendered[x].y = self.world.rendered[x].y - 2
                        if self.world.rendered[x].top < -self.dummytile.height:
                            todelete[x] = self.world.rendered[x]
                        elif (
                            self.world.rendered[x].bottom
                            <= (x[1] * self.dummytile.image.height) - self.dummytile.image.height
                        ):
                            torender[(x[0], x[1] - 1)] = self.world.rendered[x]
                        else:
                            torender[x] = self.world.rendered[x]
                    for x in todelete:
                        ytoupdate = todelete[x].getpos()[1] + (self.maxytile + 2)
                        torender[(x[0], self.maxytile + 1)] = helper.loadtilebyid(
                            self.world.data[todelete[x].getpos()[0]][ytoupdate][0],
                            self.world.data[todelete[x].getpos()[0]][ytoupdate][1],
                            self,
                            (self.world.rendered[x].getpos()[0], ytoupdate),
                            self.world.rendered[x].left,
                            self.height - 2,
                            self.world.data[todelete[x].getpos()[0]][ytoupdate][2],
                        )
                        todelete[x].delete()
            else:
                torender = self.world.rendered

        if torender is not {}:
            self.world.rendered = torender