-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathentity.py
More file actions
73 lines (62 loc) · 2.4 KB
/
Copy pathentity.py
File metadata and controls
73 lines (62 loc) · 2.4 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
import pygame
from vector import Vector2
from constants import *
class MazeRunner(object):
def __init__(self, nodes, spritesheet):
self.name = ""
self.direction = STOP
self.speed = 10.25 * TILEWIDTH
self.radius = 10
self.collideRadius = 5
self.color = WHITE
self.nodes = nodes
self.node = nodes.nodeList[0]
self.target = self.node
self.setPosition()
self.visible = True
self.image = None
self.spritesheet = spritesheet
def setPosition(self):
self.position = self.node.position.copy()
def update(self, dt):
self.position += self.direction*self.speed*dt
self.moveBySelf()
def moveBySelf(self):
if self.direction is not STOP:
if self.overshotTarget():
self.node = self.target
self.portal()
if self.node.neighbors[self.direction] is not None:
self.target = self.node.neighbors[self.direction]
else:
self.setPosition()
self.direction = STOP
def overshotTarget(self):
if self.target is not None:
vec1 = self.target.position - self.node.position
vec2 = self.position - self.node.position
node2Target = vec1.magnitudeSquared()
node2Self = vec2.magnitudeSquared()
return node2Self >= node2Target
return False
def reverseDirection(self):
if self.direction is UP: self.direction = DOWN
elif self.direction is DOWN: self.direction = UP
elif self.direction is LEFT: self.direction = RIGHT
elif self.direction is RIGHT: self.direction = LEFT
temp = self.node
self.node = self.target
self.target = temp
def portal(self):
if self.node.portalNode:
self.node = self.node.portalNode
self.setPosition()
def render(self, screen):
if self.visible:
if self.image is not None:
p = self.position.asTuple()
p = (p[0]-TILEWIDTH/2, p[1]-TILEWIDTH/2)
screen.blit(self.image, p)
else:
p = self.position.asInt()
pygame.draw.circle(screen, self.color, p, self.radius)