Files
Drakora/Player.py
T
2021-04-02 11:45:15 +03:00

99 lines
2.8 KiB
Python

"""
Player entity class
"""
import pygame
import math
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 75))
self.image.fill((153, 151, 0))
self.rect = self.image.get_rect()
self.rect.center = (100, 400)
self.speed = 0.0
self.isJumping = False
self.isCrouching = False
self.hoverCount = 0
self.isOnFloor = False
self.isDownJump = False
self.isDownCrouch = False
self.buttonsJump = (pygame.K_UP, pygame.K_SPACE,)
self.buttonsCrouch = (pygame.K_DOWN,)
self.gameSpeed = 1
def crouch(self):
if not self.isCrouching:
self.isCrouching = True
self.rect = self.rect.inflate(0, -25)
# self.image.set_clip((50, 50))
def standup(self):
if self.isCrouching:
self.isCrouching = False
self.rect = self.rect.inflate(0, 25)
def updateSpeed(self, newGameSpeed):
self.gameSpeed = newGameSpeed
def control(self, event):
if event.type == pygame.KEYDOWN:
if event.key in self.buttonsCrouch:
self.isDownCrouch = True
elif event.key in self.buttonsJump:
self.isDownJump = True
elif event.type == pygame.KEYUP:
if event.key in self.buttonsCrouch:
self.isDownCrouch = False
elif event.key in self.buttonsJump:
self.isDownJump = False
def update(self):
if not self.speed: self.rect.y += 1
if not self.isDownJump:
self.hoverCount = 0
if self.isOnFloor:
self.speed = 0
if self.isDownJump:
self.isJumping = True
if self.isCrouching:
self.standup()
elif self.isDownCrouch:
if not self.isCrouching:
self.crouch()
elif self.isCrouching:
self.standup()
if self.isJumping:
# maxHoverCount = 30
if self.gameSpeed <= 2: maxHoverCount = 30
elif self.gameSpeed <= 4: maxHoverCount = 23
elif self.gameSpeed <= 8: maxHoverCount = 16
elif self.gameSpeed <= 16: maxHoverCount = 9
elif self.gameSpeed <= 32: maxHoverCount = 5
elif self.gameSpeed <= 64: maxHoverCount = 2
else: maxHoverCount = 1
if self.isDownJump and self.hoverCount < maxHoverCount:
self.speed -= self.gameSpeed/8 * ((math.cos(2*math.pi*self.hoverCount/(2*maxHoverCount))+1)/2.5+0.2)
self.hoverCount += 1
else:
self.isJumping = False
else:
self.speed += 0.07 * self.gameSpeed
self.rect.y += self.speed