-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathToasterPet.py
More file actions
80 lines (61 loc) · 2.99 KB
/
ToasterPet.py
File metadata and controls
80 lines (61 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import pygame
import math
import sys
import random
import GameLib
pygame.init()
INFO = pygame.display.Info()
class ToasterPet():
"""+1 Toasting Power!!!"""
def __init__(self, renderSurface, player, position = pygame.Vector2):
self.renderSurface = renderSurface
self.idleSprite = GameLib.scaleSurfaceBy(pygame.image.load("Assets/TOASTER/Toaster.png"),5)
self.runSpriteSheet = GameLib.scaleSurfaceBy(pygame.image.load("Assets/TOASTER/ToasterRun.png").convert_alpha(),5)
self.slicedRunSheet = GameLib.stripFromSheet(self.runSpriteSheet,[0,0],[16*5,16*5],1,4)
self.currentSprite = self.idleSprite
self.player = player
self.position = position# - GameLib.getCenterOffset(self.sprite)
self.targetPosition = position
self.rotation = 0
self.smoothing = 30
self.internalAnimTimer = 0
self.animPeriod = 7
self.animNum = 0
self.safeRadius = 256
self.isMoving = False
self.startPos = pygame.Vector2(0,0)
self.lerpValue = 0
self.maxLerpValue = 0.2
self.lerpDistance = 0
self.campos = pygame.Vector2(0,0)
self.displaySprite = pygame.surface.Surface(pygame.Vector2(16*5,16*5)).convert_alpha()
def update(self):
if self.position.distance_to(self.player.worldPosition) >= self.safeRadius * 1.25 and not self.isMoving:
self.isMoving = True
self.targetPosition = self.player.worldPosition
self.startPos = self.position
self.lerpDistance = self.position.distance_to(self.targetPosition)
self.lerpValue = 0
if self.position.distance_to(self.player.worldPosition) <= self.safeRadius * 0.5 and self.isMoving:
self.isMoving = False
self.lerpValue = 0
if self.isMoving:
difference = (self.targetPosition - self.position)/self.smoothing
self.position += pygame.Vector2(max(min(difference.x,5),-5),max(min(difference.y,5),-5))
self.lerpValue += 1
self.internalAnimTimer += 1
if self.internalAnimTimer % self.animPeriod == 0:
self.animNum += 1
if self.animNum >= 4:
self.animNum = 0
if self.isMoving:
self.currentSprite = self.slicedRunSheet[self.animNum]
else:
self.currentSprite = self.idleSprite
def render(self,campos):
self.displaySprite.fill(pygame.color.Color(0,0,0,0))
self.displaySprite.blit(self.currentSprite,pygame.Vector2(0,0))
#GameLib.drawLabelBox(self.displaySprite,pygame.color.Color(0,255,0),"IsMoving: " + str(self.isMoving),15)
#pygame.draw.circle(self.renderSurface,pygame.color.Color(0,0,255),self.position - campos,self.safeRadius,1)
#pygame.draw.circle(self.renderSurface,pygame.color.Color(0,0,255),self.player.worldPosition - campos,self.safeRadius,1)
self.renderSurface.blit(self.displaySprite, (self.position - campos) - GameLib.getCenterOffset(self.displaySprite))