diff --git a/project/data/levels/1-1.csv b/project/data/levels/1-1.csv index 034e812..48a8ae0 100644 --- a/project/data/levels/1-1.csv +++ b/project/data/levels/1-1.csv @@ -26,17 +26,18 @@ #,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# -#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,x,x,x,x,x,x,x,x,x,,,,,,,,,,,P,,,,,,,,,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# -3,3,id=HEBEL \ No newline at end of file +#,,,,,,,,,,,,,,,,P,,,,,,,,,,,,,,,,,,,,,,,,,,x,x,x,x,x,x,x,x,x,,,,,,,,,,,,,,,,,D,,,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,r,,,,,,,,,,,,,,l,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +16,28,id=HEBEL,emitter_state=false,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/project/data/sprites/missing.png b/project/data/sprites/missing.png new file mode 100644 index 0000000..afb2d03 Binary files /dev/null and b/project/data/sprites/missing.png differ diff --git a/project/data/sprites/pressureplate.png b/project/data/sprites/pressureplate.png index 412d9f4..14f4e02 100644 Binary files a/project/data/sprites/pressureplate.png and b/project/data/sprites/pressureplate.png differ diff --git a/project/data/sprites/sprites.json b/project/data/sprites/sprites.json index d441470..1fb33d3 100644 --- a/project/data/sprites/sprites.json +++ b/project/data/sprites/sprites.json @@ -1,4 +1,18 @@ [ + { + "id": "missing", + "subsheets": [ + { + "id": "1", + "delays": [ + 60, + 60 + ], + "width": 12, + "height": 12 + } + ] + }, { "id": "goal_door", "subsheets": [ diff --git a/project/level/Level.py b/project/level/Level.py index a0a531d..bce45c8 100644 --- a/project/level/Level.py +++ b/project/level/Level.py @@ -39,6 +39,8 @@ class Level: tile[split_item[0]] = split_item[1] elif split_item[0] == 'requires': tile[split_item[0]] = split_item[1].split(';') + elif split_item[0] == 'emitter_state': + tile[split_item[0]] = split_item[1].split(';') else: raise ValueError('Incorrect attribute name: ' + split_item[0]) tiles[x][y] = tile diff --git a/project/level/elements/ButtonInputLevelElement.py b/project/level/elements/ButtonInputLevelElement.py index d1fa61d..09ce073 100644 --- a/project/level/elements/ButtonInputLevelElement.py +++ b/project/level/elements/ButtonInputLevelElement.py @@ -8,15 +8,12 @@ from sprite.SpritesheetManager import SpritesheetManager class ButtonInputLevelElement(InputLevelElement): def load(self, sprite_manager: SpriteManager, spritesheet_manager: SpritesheetManager, level: Level): - name = self.tile['name'] - position = self.tile['position'] - self.spritesheet = spritesheet_manager.get_sheet('pressureplate') self.set_animation_state('on' if self.emitter_state else 'off') - self.position_scale.position = position + self.position_scale.position = self.tile['position'] def tick(self, tick_data: TickData): super().tick(tick_data) collisions = self.get_collides_with() - print(collisions) + # print(collisions) diff --git a/project/level/elements/LoadedLevel.py b/project/level/elements/LoadedLevel.py index 2e08c01..947f1b0 100644 --- a/project/level/elements/LoadedLevel.py +++ b/project/level/elements/LoadedLevel.py @@ -1,13 +1,20 @@ - from level.Level import Level from level.elements.ButtonInputLevelElement import ButtonInputLevelElement from level.elements.SimpleBlockLevelElement import SimpleBlockLevelElement +from level.elements.UnknownTileLevelElement import UnknownTileLevelElement from physics import ConstantsParser from physics.SpriteManager import SpriteManager, DrawLayers from sprite.SpritesheetManager import SpritesheetManager TILES = { '#': SimpleBlockLevelElement, + '+': SimpleBlockLevelElement, + '-': SimpleBlockLevelElement, + 'l': SimpleBlockLevelElement, + 'r': SimpleBlockLevelElement, + '~': SimpleBlockLevelElement, + '|': SimpleBlockLevelElement, + 'L': ButtonInputLevelElement, # TODO 'P': ButtonInputLevelElement } @@ -25,17 +32,21 @@ class LoadedLevel: position = (tile_number * ConstantsParser.CONFIG.block_size[0], row_number * ConstantsParser.CONFIG.block_size[1]) tile['position'] = position - name = tile['name'] + + element = None + if name in TILES: element = TILES[name](tile, self) + elif not name == '': + print(f"Unknown tile at {position}: {name}") + element = UnknownTileLevelElement(tile, self) + + if element: self.blocks.append(element) self.sprite_manager.add_ui_element(DrawLayers.OBJECTS, element) element.load(self.sprite_manager, self.spritesheet_manager, level) - elif not name == '': - print(f"Unknown tile: {name}") - def destroy_level(self): for block in self.blocks: self.sprite_manager.remove_ui_element(block) diff --git a/project/level/elements/SimpleBlockLevelElement.py b/project/level/elements/SimpleBlockLevelElement.py index 22dd14f..b151222 100644 --- a/project/level/elements/SimpleBlockLevelElement.py +++ b/project/level/elements/SimpleBlockLevelElement.py @@ -6,7 +6,13 @@ from physics.SpriteManager import SpriteManager from sprite.SpritesheetManager import SpritesheetManager BLOCK_TYPES = { - '#': 'block_full' + '#': 'block_full', + '+': 'block_top', + '-': 'block_bottom', + 'l': 'block_left', + 'r': 'block_right', + '~': 'block_top_left', + '|': 'block_top_right' } @@ -15,10 +21,12 @@ class SimpleBlockLevelElement(StaticLevelElement): super().__init__(tile, loaded_level) def load(self, sprite_manager: SpriteManager, spritesheet_manager: SpritesheetManager, level: Level): - name = self.tile['name'] - position = self.tile['position'] - block_type = BLOCK_TYPES[name] + if self.tile['name'] in BLOCK_TYPES: + block_type = BLOCK_TYPES[self.tile['name']] + else: + block_type = 'block_full' + print(f"Unknown block type: {self.tile['name']} {self.tile['position']}") self.spritesheet = spritesheet_manager.get_sheet(level.theme + '_' + block_type) self.set_animation_state(str(random.randint(1, 3))) - self.position_scale.position = position + self.position_scale.position = self.tile['position'] diff --git a/project/level/elements/UnknownTileLevelElement.py b/project/level/elements/UnknownTileLevelElement.py new file mode 100644 index 0000000..1ea4fbe --- /dev/null +++ b/project/level/elements/UnknownTileLevelElement.py @@ -0,0 +1,11 @@ +from level.Level import Level +from level.elements.StaticLevelElement import StaticLevelElement +from physics.SpriteManager import SpriteManager +from sprite.SpritesheetManager import SpritesheetManager + + +class UnknownTileLevelElement(StaticLevelElement): + def load(self, sprite_manager: SpriteManager, spritesheet_manager: SpritesheetManager, level: Level): + self.spritesheet = spritesheet_manager.get_sheet('missing') + self.set_animation_state('1') + self.position_scale.position = self.tile['position']