forked from InfoProjekt/game
doors can now be passed through
Signed-off-by: SpagettiFisch <63868515+SpagettiFisch@users.noreply.github.com>
This commit is contained in:
parent
3883237f91
commit
76ef4f6559
3 changed files with 33 additions and 22 deletions
23
classes.py
23
classes.py
|
|
@ -196,10 +196,8 @@ class Scene(GameObjects):
|
||||||
self.current_level = 0
|
self.current_level = 0
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
def update(self, change:bool=False, objects=None):
|
def update(self, change:int=None, objects=None):
|
||||||
if change:
|
self.level[self.current_level].update(change, objects)
|
||||||
self.current_level += 1
|
|
||||||
self.level[self.current_level].update(objects)
|
|
||||||
self.background = self.level[self.current_level].background
|
self.background = self.level[self.current_level].background
|
||||||
"""if isinstance(self.objects, list):
|
"""if isinstance(self.objects, list):
|
||||||
for obj in self.objects[0] + self.objects[1] + self.objects[2]:
|
for obj in self.objects[0] + self.objects[1] + self.objects[2]:
|
||||||
|
|
@ -223,16 +221,14 @@ class Stage(GameObjects):
|
||||||
self.current = 0
|
self.current = 0
|
||||||
self.sortRooms(WIDTH)
|
self.sortRooms(WIDTH)
|
||||||
|
|
||||||
def update(self, objects):
|
def update(self, target, objects):
|
||||||
|
if target is not None:
|
||||||
|
self.current = target
|
||||||
|
|
||||||
for room in self.rooms:
|
for room in self.rooms:
|
||||||
if room.id == self.current:
|
if room.id == self.current:
|
||||||
room.update(objects)
|
room.update(objects)
|
||||||
self.background = room.background
|
self.background = room.background
|
||||||
keys = pygame.key.get_pressed()
|
|
||||||
if keys[pygame.K_RIGHT]:
|
|
||||||
self.current += 1
|
|
||||||
if self.current >= len(self.rooms):
|
|
||||||
return 1
|
|
||||||
|
|
||||||
def draw(self, screen):
|
def draw(self, screen):
|
||||||
for room in self.rooms:
|
for room in self.rooms:
|
||||||
|
|
@ -304,11 +300,15 @@ class Room(GameObjects):
|
||||||
self.doors.append(Door(f'door{self.id}', self.exits[1][1], random.randint(round(WIDTH * 0.33), round(WIDTH * 0.6)), self.exits[1][0]))
|
self.doors.append(Door(f'door{self.id}', self.exits[1][1], random.randint(round(WIDTH * 0.33), round(WIDTH * 0.6)), self.exits[1][0]))
|
||||||
self.doors.append(Door(f'door{self.id}', self.exits[2][1], random.randint(round(WIDTH * 0.63), round(WIDTH * 0.95)), self.exits[2][0]))
|
self.doors.append(Door(f'door{self.id}', self.exits[2][1], random.randint(round(WIDTH * 0.63), round(WIDTH * 0.95)), self.exits[2][0]))
|
||||||
|
|
||||||
|
self.objects.append(self.doors)
|
||||||
|
|
||||||
def update(self, objects):
|
def update(self, objects):
|
||||||
if objects is not None:
|
if objects is not None:
|
||||||
self.objects = objects
|
self.objects = objects
|
||||||
if not self.objects[1]:
|
if not self.objects[1]:
|
||||||
self.locked = False
|
self.locked = False
|
||||||
|
for door in self.doors:
|
||||||
|
door.update(False)
|
||||||
return
|
return
|
||||||
|
|
||||||
def draw(self, screen):
|
def draw(self, screen):
|
||||||
|
|
@ -339,10 +339,11 @@ class Obstacle(GameObjects):
|
||||||
screen.blit(self.background, self.rect)
|
screen.blit(self.background, self.rect)
|
||||||
|
|
||||||
class Door(GameObjects):
|
class Door(GameObjects):
|
||||||
def __init__(self, name: str, _type: str, x: int, target:int, y: int=8, objects: list=None, WIDTH=None, HEIGHT=None, islocked=True) -> None:
|
def __init__(self, name: str, _type: str, x: int, target:int, y: int=16, objects: list=None, WIDTH=None, HEIGHT=None, islocked=True) -> None:
|
||||||
super().__init__(name, _type, f'art/images/background/door_{_type}.png', objects, WIDTH, HEIGHT)
|
super().__init__(name, _type, f'art/images/background/door_{_type}.png', objects, WIDTH, HEIGHT)
|
||||||
self.rect = pygame.Rect((x, y), self.background.get_size())
|
self.rect = pygame.Rect((x, y), self.background.get_size())
|
||||||
self.locked = islocked
|
self.locked = islocked
|
||||||
|
self.target = target
|
||||||
|
|
||||||
def draw(self, screen):
|
def draw(self, screen):
|
||||||
screen.blit(self.background, self.rect)
|
screen.blit(self.background, self.rect)
|
||||||
|
|
|
||||||
16
main.py
16
main.py
|
|
@ -75,6 +75,7 @@ def play(screen, clock, running, background, isblack, WIDTH, HEIGHT):
|
||||||
if not freeze:
|
if not freeze:
|
||||||
objects = scene.getObjects()
|
objects = scene.getObjects()
|
||||||
screen.blit(scene.background, (32, 32))
|
screen.blit(scene.background, (32, 32))
|
||||||
|
target = None
|
||||||
|
|
||||||
for thing in objects[4]:
|
for thing in objects[4]:
|
||||||
thing.draw(screen)
|
thing.draw(screen)
|
||||||
|
|
@ -86,10 +87,15 @@ def play(screen, clock, running, background, isblack, WIDTH, HEIGHT):
|
||||||
for thing in objects[0]:
|
for thing in objects[0]:
|
||||||
thing.book.hidden = not freeze
|
thing.book.hidden = not freeze
|
||||||
result = thing.update(pygame.key.get_pressed(), pygame.mouse.get_pos(), objects)
|
result = thing.update(pygame.key.get_pressed(), pygame.mouse.get_pos(), objects)
|
||||||
if result == 'village':
|
if isinstance(result, str):
|
||||||
village(screen, clock, running, background, isblack, WIDTH, HEIGHT)
|
if result == 'village':
|
||||||
elif result == 'play':
|
village(screen, clock, running, background, isblack, WIDTH, HEIGHT)
|
||||||
play(screen, clock, running, background, isblack, WIDTH, HEIGHT)
|
elif result == 'play':
|
||||||
|
play(screen, clock, running, background, isblack, WIDTH, HEIGHT)
|
||||||
|
elif 'door-' in result:
|
||||||
|
target = result.split('-')[1]
|
||||||
|
else:
|
||||||
|
thing.draw(screen)
|
||||||
else:
|
else:
|
||||||
thing.draw(screen)
|
thing.draw(screen)
|
||||||
|
|
||||||
|
|
@ -102,7 +108,7 @@ def play(screen, clock, running, background, isblack, WIDTH, HEIGHT):
|
||||||
npc.draw(screen)
|
npc.draw(screen)
|
||||||
|
|
||||||
objects[0][0].book.addspell('windslash')
|
objects[0][0].book.addspell('windslash')
|
||||||
scene.update(False, objects)
|
scene.update(target, objects)
|
||||||
scene.draw(screen)
|
scene.draw(screen)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
16
viecher.py
16
viecher.py
|
|
@ -178,7 +178,9 @@ class MainCharacter(Fighter):
|
||||||
self.health.hurt(damage)
|
self.health.hurt(damage)
|
||||||
|
|
||||||
def obstacle_interaction(self, objects):
|
def obstacle_interaction(self, objects):
|
||||||
touches = pg.sprite.spritecollideany(self, objects[4])
|
if len(objects) <= 5:
|
||||||
|
objects.append([])
|
||||||
|
touches = pg.sprite.spritecollideany(self, objects[4] + objects[5])
|
||||||
if touches is not None:
|
if touches is not None:
|
||||||
if touches.name == 'fireplace':
|
if touches.name == 'fireplace':
|
||||||
self.freezing = False
|
self.freezing = False
|
||||||
|
|
@ -190,8 +192,11 @@ class MainCharacter(Fighter):
|
||||||
return 'house'
|
return 'house'
|
||||||
elif 'wall' in touches.name:
|
elif 'wall' in touches.name:
|
||||||
return 'wall'
|
return 'wall'
|
||||||
|
elif isinstance(touches, Door):
|
||||||
|
if not touches.locked:
|
||||||
|
return f'door-{touches.target}'
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def walk(self, keys, objects):
|
def walk(self, keys, objects):
|
||||||
moveto = vec(0, 0)
|
moveto = vec(0, 0)
|
||||||
|
|
@ -208,7 +213,7 @@ class MainCharacter(Fighter):
|
||||||
|
|
||||||
self.x += moveto[0] / fps
|
self.x += moveto[0] / fps
|
||||||
self.y += moveto[1] / fps
|
self.y += moveto[1] / fps
|
||||||
touches = pg.sprite.spritecollideany(self, objects[2] + objects[4])
|
touches = pg.sprite.spritecollideany(self, objects[4])
|
||||||
if touches is not None and not isinstance(touches, Weapons):
|
if touches is not None and not isinstance(touches, Weapons):
|
||||||
if isinstance(touches, Obstacle):
|
if isinstance(touches, Obstacle):
|
||||||
if not touches.collision:
|
if not touches.collision:
|
||||||
|
|
@ -224,11 +229,10 @@ class MainCharacter(Fighter):
|
||||||
elif touches.name == 'wall_b':
|
elif touches.name == 'wall_b':
|
||||||
self.y -= (2 + self.rect.height - (touches.rect.y - self.y))
|
self.y -= (2 + self.rect.height - (touches.rect.y - self.y))
|
||||||
return
|
return
|
||||||
elif isinstance(touches, NPC):
|
|
||||||
return
|
|
||||||
|
|
||||||
if self.x <= touches.rect.x: self.x -= (self.rect.width - (touches.rect.x - self.x))
|
if self.x <= touches.rect.x: self.x -= (self.rect.width - (touches.rect.x - self.x))
|
||||||
elif self.x > touches.rect.x: self.x += (self.rect.width - (self.x - touches.rect.x - touches.rect.width * 0.66))
|
elif self.x > touches.rect.x: self.x += (self.rect.width - (self.x - touches.rect.x - touches.rect.width * 0.7))
|
||||||
#if self.y <= touches.y: pass
|
#if self.y <= touches.y: pass
|
||||||
#elif self.y > touches.y: pass
|
#elif self.y > touches.y: pass
|
||||||
#self.x -= moveto[0] * 2 / fps
|
#self.x -= moveto[0] * 2 / fps
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue