diff --git a/CollisionBox.py b/CollisionBox.py new file mode 100644 index 0000000..77ce5fc --- /dev/null +++ b/CollisionBox.py @@ -0,0 +1,21 @@ +""" +CollisionBox entity class +""" + +import pygame + + +class CollisionBox(pygame.sprite.Sprite): + def __init__(self, offsetX, offsetY, width, height, center): + pygame.sprite.Sprite.__init__(self) + + self.offset = (offsetX, offsetY) + self.size = (width, height) + self.rect = pygame.Rect(0, 0, width, height) + self.rect.center = center + + self.rect.x += self.offset[0] + self.rect.y += self.offset[1] + + def setY(self, y): + self.rect.y = y + self.offset[1] diff --git a/Drakora.pyw b/Drakora.pyw index 8c44d97..ec31570 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -174,7 +174,9 @@ class Drakora(): if self.drawBoxes: for player in self.players: - pygame.draw.rect(self.screen, (255, 0, 0), player.rect, 1) + for collision in self.player.getCollisionBoxes(): + pygame.draw.rect(self.screen, (255, 0, 0), collision.rect, 1) + # pygame.draw.rect(self.screen, (255, 0, 0), player.rect, 1) for enemy in self.enemies: pygame.draw.rect(self.screen, (255, 0, 0), enemy.rect, 1) for floor in self.floors: @@ -237,7 +239,7 @@ class Drakora(): def collideCheck(self): - if pygame.sprite.spritecollideany(self.player, self.enemies): + if sum([1 if pygame.sprite.spritecollideany(i, self.enemies) else 0 for i in self.player.getCollisionBoxes()]): if not self.isGodmode: self.isGameOver = True if self.player.isOnFloor: @@ -254,6 +256,7 @@ class Drakora(): def doCheats(self): + # self.drawBoxes = True if self.isPressedKeysUpdated: pressedKeysStr = ''.join(self.pressedKeys) diff --git a/Player.py b/Player.py index ee06e49..33f7958 100644 --- a/Player.py +++ b/Player.py @@ -6,6 +6,7 @@ Player entity class import pygame import math import os +from CollisionBox import CollisionBox class Player(pygame.sprite.Sprite): @@ -40,6 +41,9 @@ class Player(pygame.sprite.Sprite): for image in array: image.set_colorkey((255,0,255)) + def getCollisionBoxes(self): + return self.collisionBoxes + def __init__(self): pygame.sprite.Sprite.__init__(self) @@ -64,18 +68,38 @@ class Player(pygame.sprite.Sprite): self.gameSpeed = 1 self.updateCount = 0 + self.collisionBoxes = [] + + collision = CollisionBox(0, 20, 60, 20, self.rect.center) + self.collisionBoxes.append(collision) + collision = CollisionBox(-10, 5, 30, 20, self.rect.center) + self.collisionBoxes.append(collision) + collision = CollisionBox(0, 35, 25, 40, self.rect.center) + self.collisionBoxes.append(collision) + # self.collisionBoxes.append(self) + # collision = pygame.sprite.Sprite() + # collision.rect = pygame.Rect(0, 0, 25, 80) + # collision.rect.center = self.rect.center + # self.collisionBoxes.append(collision) + def crouch(self): if not self.isCrouching: self.isCrouching = True self.rect = self.rect.inflate(0, -32) + for i in self.collisionBoxes: + i.rect = i.inflate(0, -32) + def standup(self): if self.isCrouching: self.isCrouching = False self.rect = self.rect.inflate(0, 32) + for i in self.collisionBoxes: + i.rect = i.inflate(0, 32) + def updateSpeed(self, newGameSpeed): self.gameSpeed = newGameSpeed @@ -134,6 +158,9 @@ class Player(pygame.sprite.Sprite): self.rect.y += self.speed + for i in self.collisionBoxes: + i.setY(self.rect.y) + if self.updateCount >= 22 - math.log2(self.gameSpeed) * 2: if self.isOnFloor: if self.isCrouching: diff --git a/leaders.txt b/leaders.txt index 3b5b210..d1a8b6c 100644 --- a/leaders.txt +++ b/leaders.txt @@ -3,3 +3,4 @@ Coolguy 1 10.75 Wow 74 185.72 Cheater 1000 0.01 New-Kolya 2 15.20 +1 1 10.02