+import os
+
+import numpy as np
import pygame.mouse
-from Setup import *
from Function.createText import createText
-import numpy as np
-import os
+from Setup import *
class LevelCreator:
Button((0, 0), f"{self.collision_layer=}", self.toggle_collidable),
Button((0, 0), "Toggle Hitboxes", self.toggle_show_hitboxes),
Button((0, 0), "Export", self.export)]
-
+
self.level = -2
def export(self):
+ # for layer in out:
+ # for i,block in enumerate(layer):
+ # layer[i] = Block(block.position,block.collision_layer,block.texture_name)
+
counter = 1
+
+ def get_key(mask):
+ for key, value in self.blocks.items():
+ if mask == value:
+ return key
+
while True:
try:
- with open(os.path.join("Levels",f'Level{counter}.txt'), 'x') as f:
- f.write(str(self.get_canvas_layers()))
+ with open(os.path.join("Levels", f'Level{counter}.txt'), 'x') as f:
+ out = ""
+ for layer in self.get_canvas_layers():
+ t = ""
+ pos = ""
+ texture = ""
+ for block in layer:
+ t += f"{get_key(block.collision_layer)}|"
+ pos += f"{block.position.x},{block.position.y}|"
+ texture += f"{block.texture_name}|"
+ out += f"{t[:-1]}\n{pos[:-1]}\n{texture[:-1]}\n"
+ f.write(out)
+
print(f"File saved as Level{counter} in folder Levels")
break
except FileExistsError:
counter += 1
-
def toggle_collidable(self):
if self.collision_layer == "none":
self.collision_layer = "world"
if self.show_hitboxes:
block.show_hitbox(surf, self.blocks["world"])
+ pg.draw.line(surf, (255, 0, 0), self.apply_transformations((self.reverse_transformations((0, 0)).x, 0)),
+ self.apply_transformations((self.reverse_transformations((SCREEN_WIDTH, 0)).x, 0)),
+ math.ceil(self.zoom * 5))
+ pg.draw.line(surf, (255, 0, 0), self.apply_transformations((0, self.reverse_transformations((0, 0)).y)),
+ self.apply_transformations((0, self.reverse_transformations((0, SCREEN_HEIGHT)).y)),
+ math.ceil(self.zoom * 5))
+
display_img = EditorBlock.textures[self.textures[self.current_texture]].copy()
display_img.set_alpha(100)
surf.blit(pg.transform.scale(display_img, self.apply_rect_transformations(display_img.get_rect()).size),
def __init__(self, pos, collision_layer, texture="PLACEHOLDER"):
self.position = pg.Vector2(pos)
self.texture = self.textures[texture]
+ self.texture_name = texture
self.collision_layer = collision_layer
-[[<LevelCreator.EditorBlock object at 0x000001691CD28B80>, <LevelCreator.EditorBlock object at 0x000001691CD28BE0>, <LevelCreator.EditorBlock object at 0x000001691CD28E50>, <LevelCreator.EditorBlock object at 0x000001691CD28D90>, <LevelCreator.EditorBlock object at 0x000001691CD28EB0>, <LevelCreator.EditorBlock object at 0x000001691CD28DF0>, <LevelCreator.EditorBlock object at 0x000001691CD29090>, <LevelCreator.EditorBlock object at 0x000001691CD28FD0>, <LevelCreator.EditorBlock object at 0x000001691CD28E20>, <LevelCreator.EditorBlock object at 0x000001691CD28DC0>, <LevelCreator.EditorBlock object at 0x000001691CD290C0>, <LevelCreator.EditorBlock object at 0x000001691CD28CD0>, <LevelCreator.EditorBlock object at 0x000001691CD29000>, <LevelCreator.EditorBlock object at 0x000001691CD28EE0>, <LevelCreator.EditorBlock object at 0x000001691CD292A0>, <LevelCreator.EditorBlock object at 0x000001691CD28D30>, <LevelCreator.EditorBlock object at 0x000001691CD29240>, <LevelCreator.EditorBlock object at 0x000001691CD28F70>], [], [], [], []]
\ No newline at end of file
+none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world
+1400.0,750.0|1300.0,800.0|1350.0,750.0|1300.0,750.0|1250.0,750.0|1250.0,800.0|1200.0,750.0|1050.0,750.0|1000.0,750.0|950.0,750.0|900.0,750.0|850.0,750.0|800.0,750.0|750.0,750.0|700.0,750.0|650.0,750.0|600.0,750.0|550.0,750.0|500.0,750.0|450.0,750.0|400.0,750.0|350.0,750.0|300.0,750.0|250.0,750.0|200.0,750.0|150.0,750.0|100.0,750.0|50.0,750.0|0.0,750.0|0.0,800.0|50.0,800.0|100.0,800.0|1100.0,750.0|1150.0,750.0|1200.0,800.0|1150.0,800.0|1100.0,800.0|1050.0,800.0|1000.0,800.0|800.0,800.0|750.0,800.0|700.0,800.0|650.0,800.0|600.0,800.0|250.0,800.0|200.0,800.0|150.0,800.0|1450.0,700.0|1500.0,700.0|1750.0,700.0|1800.0,700.0|1850.0,700.0|1900.0,700.0|1950.0,700.0|2000.0,700.0|2050.0,700.0|2050.0,750.0|2000.0,750.0|1950.0,750.0|1900.0,750.0|1850.0,750.0|1800.0,750.0|1700.0,700.0|1650.0,700.0|1600.0,700.0|1550.0,700.0|1750.0,750.0|1700.0,750.0|1650.0,750.0|1600.0,750.0|1550.0,750.0|1500.0,750.0|1450.0,750.0|2100.0,750.0|2450.0,700.0|2450.0,650.0|2450.0,750.0|2500.0,750.0|2500.0,700.0|2500.0,650.0|2500.0,600.0|2550.0,600.0|2550.0,650.0|2550.0,700.0|2550.0,750.0|2600.0,750.0|2600.0,700.0|2600.0,650.0|2600.0,600.0|2400.0,800.0|2450.0,800.0|2650.0,800.0|2600.0,800.0|2550.0,800.0|2500.0,800.0|2300.0,850.0|2350.0,850.0|2400.0,850.0|2450.0,850.0|2500.0,850.0|2550.0,850.0|2600.0,850.0|2650.0,850.0|2650.0,900.0|2600.0,900.0|2250.0,850.0|2250.0,900.0|2300.0,900.0|2350.0,900.0|2400.0,900.0|2450.0,900.0|2500.0,900.0|2550.0,900.0|2650.0,950.0|2600.0,950.0|2550.0,950.0|2500.0,950.0|2450.0,950.0|2400.0,950.0|2350.0,950.0|2300.0,950.0|2250.0,950.0|2200.0,950.0|2150.0,950.0|2100.0,950.0|2050.0,950.0|2000.0,950.0|1950.0,950.0|1900.0,950.0|1850.0,950.0|1800.0,950.0|1750.0,950.0|1700.0,950.0|1650.0,950.0|1600.0,950.0|1550.0,950.0|1500.0,950.0|1450.0,950.0|1400.0,950.0|1350.0,950.0|1300.0,950.0|1250.0,950.0|1200.0,950.0|1150.0,950.0|1100.0,950.0|1050.0,950.0|1000.0,950.0|950.0,950.0|900.0,950.0|850.0,950.0|800.0,950.0|750.0,950.0|700.0,950.0|650.0,950.0|600.0,950.0|550.0,950.0|450.0,900.0|400.0,900.0|350.0,900.0|300.0,900.0|250.0,900.0|200.0,900.0|150.0,900.0|100.0,900.0|50.0,900.0|0.0,900.0|0.0,950.0|50.0,950.0|100.0,950.0|150.0,950.0|200.0,950.0|250.0,950.0|300.0,950.0|350.0,950.0|400.0,950.0|450.0,950.0|500.0,950.0|500.0,900.0|550.0,900.0|600.0,900.0|650.0,900.0|700.0,900.0|750.0,900.0|800.0,900.0|850.0,900.0|900.0,900.0|1000.0,900.0|1050.0,900.0|1100.0,900.0|1150.0,900.0|1200.0,900.0|1250.0,900.0|1300.0,900.0|1350.0,900.0|1400.0,900.0|1450.0,900.0|1500.0,900.0|1400.0,850.0|1450.0,850.0|1500.0,850.0|1550.0,850.0|950.0,900.0|1600.0,850.0|1650.0,850.0|1700.0,850.0|1750.0,850.0|1800.0,850.0|1850.0,850.0|1900.0,850.0|1950.0,850.0|2000.0,850.0|2050.0,850.0|2100.0,850.0|2150.0,850.0|2200.0,850.0|2200.0,900.0|2150.0,900.0|2100.0,900.0|2050.0,900.0|2000.0,900.0|1950.0,900.0|1900.0,900.0|1850.0,900.0|1800.0,900.0|1750.0,900.0|1700.0,900.0|1650.0,900.0|1600.0,900.0|1550.0,900.0|1300.0,850.0|1250.0,850.0|1200.0,850.0|1150.0,850.0|1100.0,850.0|1050.0,850.0|1000.0,850.0|750.0,850.0|700.0,850.0|650.0,850.0|600.0,850.0|250.0,850.0|200.0,850.0|150.0,850.0|100.0,850.0|50.0,850.0|0.0,850.0|300.0,800.0|350.0,800.0|400.0,800.0|450.0,800.0|500.0,800.0|550.0,800.0|850.0,800.0|900.0,800.0|950.0,800.0|1350.0,800.0|1400.0,800.0|1450.0,800.0|1500.0,800.0|1550.0,800.0|1600.0,800.0|1650.0,800.0|1700.0,800.0|1750.0,800.0|1800.0,800.0|1850.0,800.0|1900.0,800.0|1950.0,800.0|2000.0,800.0|2050.0,800.0|2100.0,800.0|2150.0,800.0|1350.0,850.0|2100.0,700.0|950.0,850.0|900.0,850.0|850.0,850.0|800.0,850.0|550.0,850.0|500.0,850.0|450.0,850.0|400.0,850.0|350.0,850.0|300.0,850.0|800.0,550.0|800.0,600.0|750.0,600.0|750.0,650.0|800.0,650.0|850.0,650.0|0.0,700.0|50.0,700.0|100.0,700.0|150.0,700.0|200.0,700.0|250.0,700.0|300.0,700.0|350.0,700.0|400.0,700.0|450.0,700.0|500.0,700.0|550.0,700.0|600.0,700.0|650.0,700.0|700.0,700.0|750.0,700.0|800.0,700.0|850.0,700.0|900.0,700.0|950.0,700.0|1000.0,700.0|1050.0,700.0|1100.0,700.0|1150.0,700.0|1200.0,700.0|1250.0,700.0|1300.0,700.0|1350.0,700.0|1400.0,700.0|1450.0,650.0|1500.0,650.0|1550.0,650.0|1600.0,650.0|1650.0,650.0|1700.0,650.0|1750.0,650.0|1800.0,650.0|1850.0,650.0|1900.0,650.0|1950.0,650.0|2000.0,650.0|2050.0,650.0|2100.0,650.0|2150.0,700.0|2150.0,750.0|2200.0,800.0|2250.0,800.0|2300.0,800.0|2350.0,800.0|2500.0,550.0|2550.0,550.0|2600.0,550.0|2650.0,600.0|2450.0,600.0|2400.0,650.0|2400.0,700.0|2400.0,750.0|2650.0,650.0|2650.0,700.0|2650.0,750.0
+DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONE|DIRT|STONE|STONE|STONE|STONEDIRT|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|DIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONE|STONE|STONE|STONE|STONE|STONE|STONE
+
+
+
+
+
+
+
+
+
+
+
+
from Setup import *
from Block import Block
+from os import path
+
class World:
def __init__(self, collision_layer):
self.collision_layer = collision_layer
self.blocks = []
- self.add_world()
-
- def add_world(self):
- for i in range(25):
- self.blocks.append(Block((i * Block.width,SCREEN_HEIGHT*3/4),self.collision_layer["world"],"GRASS"))
- self.blocks.append(Block((i * Block.width,SCREEN_HEIGHT*3/4 + Block.height),self.collision_layer["world"],"DIRT"))
- if random.random() < 0.5:
- self.blocks.append(
- Block((i * Block.width, SCREEN_HEIGHT * 3 / 4 + Block.height * 2), self.collision_layer["world"],
- "STONE"))
- else:
- self.blocks.append(
- Block((i * Block.width, SCREEN_HEIGHT * 3 / 4 + Block.height * 2), self.collision_layer["world"],
- "DIRT"))
- self.blocks.append(Block((i * Block.width,SCREEN_HEIGHT*3/4 + Block.height * 3),self.collision_layer["world"],"STONE"))
- self.blocks.append(Block((i * Block.width,SCREEN_HEIGHT*3/4 + Block.height * 4),self.collision_layer["world"],"STONE"))
-
- self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -1),self.collision_layer["none"],"TREEBARK"))
- self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -2),self.collision_layer["none"],"TREEBARK"))
- self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"TREEBARK"))
- self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"TREEBARK"))
-
- self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS"))
- self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAFS"))
- self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS"))
- # self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -6),self.collision_layer["none"],"LEAFS"))
-
- self.blocks.append(Block((Block.width * 9,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS"))
- self.blocks.append(Block((Block.width * 9,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAFS"))
- self.blocks.append(Block((Block.width * 9,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS"))
- # self.blocks.append(Block((Block.width * 9,SCREEN_HEIGHT*3/4 + Block.height * -6),self.collision_layer["none"],"LEAFS"))
-
- self.blocks.append(Block((Block.width * 11,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS"))
- self.blocks.append(Block((Block.width * 11,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAF"))
- self.blocks.append(Block((Block.width * 11,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS"))
- # self.blocks.append(Block((Block.width * 11,SCREEN_HEIGHT*3/4 + Block.height * -6),self.collision_layer["none"],"LEAFS"))
-
-
- # self.blocks.append(Block((Block.width * 12,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS"))
- # self.blocks.append(Block((Block.width * 12,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAFS"))
- # self.blocks.append(Block((Block.width * 12,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS"))
- # self.blocks.append(Block((Block.width * 8,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS"))
- # self.blocks.append(Block((Block.width * 8,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAFS"))
- # self.blocks.append(Block((Block.width * 8,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS"))
+ self.level = 1
+ self.add_world(self.level)
+
+ def add_world(self, level):
+ with open(path.join("Levels", f'Level{level}.txt'), 'r') as f:
+ file_contents = f.read().split("\n")
+
+
+ for i in range(0,len(file_contents)-1,3):
+ layer = file_contents[i].split("|")
+ pos = file_contents[i+1].split("|")
+ texture = file_contents[i+2].split("|")
+ for l,p,t in zip(layer,pos,texture):
+ if p == "":
+ break
+ x,y = p.split(',')
+ self.blocks.append(Block((float(x),float(y)),self.collision_layer[l],t))
def update(self, delta):
for block in self.blocks: