-
Notifications
You must be signed in to change notification settings - Fork 0
/
datum.py
110 lines (102 loc) · 4 KB
/
datum.py
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from __future__ import division
import env
engine = env.engine
from util import load_sound
class Datum(engine.sprite.Sprite):
images = None
masks = None
radius = None
sound = None
def __init__(self, matrix, x, y, dtype):
engine.sprite.Sprite.__init__(self)
self.matrix = matrix
self.x = float(x)
self.y = float(y)
self.dtype = dtype
if not self.images:
self.images = {}
image = engine.Surface((11,11), engine.SRCALPHA)
color1 = (0,200,0)
color2 = (0,150,0)
color3 = (200,0,0)
points = [(5,0),(10,2),(10,8),(5,10),(0,8),(0,2)]
engine.draw.polygon(image, color1, points, 0)
engine.draw.polygon(image, color1, points, 1)
self.images['hibit'] = image
image = engine.Surface((11,11), engine.SRCALPHA)
points = [(5,1),(9,3),(9,7),(5,9),(0,7),(0,3)]
engine.draw.polygon(image, color2, points, 0)
engine.draw.polygon(image, color2, points, 1)
self.images['lobit'] = image
image = engine.Surface((11,11), engine.SRCALPHA)
points = [(5,1),(9,3),(9,7),(5,9),(0,7),(0,3)]
engine.draw.polygon(image, color3, points, 0)
engine.draw.polygon(image, color3, points, 1)
self.images['lobit_corrupt'] = image
self.masks = {}
self.masks['hibit'] = engine.mask.from_surface(self.images['hibit'])
self.masks['lobit'] = engine.mask.from_surface(self.images['lobit'])
self.masks['lobit_corrupt'] = engine.mask.from_surface(self.images['lobit_corrupt'])
self.radius = (image.get_width()//2)
self.sound = {}
self.sound['blip'] = load_sound('blip.wav')
self.sound['blip'].set_volume(0.5)
self.image = self.images['hibit']
self.mask = self.masks['hibit']
self.current_image = 'hibit'
self.rect = engine.Rect(0,0,11,11)
self.rect.x = int(self.x) - (self.image.get_width()//2)
self.rect.y = int(self.y) - (self.image.get_height()//2)
if not self.matrix.adjust:
self.vel = 5
else:
self.vel = 10
self.state_changed = False
self.direction = 'd'
self.node_previous = None
def state_change(self):
if self.current_image == 'hibit':
if self.dtype == 'noncorrupt':
self.image = self.images['lobit']
self.mask = self.masks['lobit']
else:
self.image = self.images['lobit_corrupt']
self.mask = self.masks['lobit_corrupt']
self.current_image = 'lobit'
else:
self.image = self.images['hibit']
self.mask = self.masks['hibit']
self.current_image = 'hibit'
self.rect.x = int(self.x) - (self.image.get_width()//2)
self.rect.y = int(self.y) - (self.image.get_height()//2)
self.state_changed = True
def damage(self):
self.matrix.nexus.data_loss(self)
if env.sound:
self.sound['blip'].play()
def move(self):
if self.direction == 'd':
self.y += self.vel
self.rect.y = int(self.y) - (self.image.get_height()//2)
else:
if self.direction == 'l':
self.x -= self.vel
self.rect.x = int(self.x) - (self.image.get_width()//2)
elif self.direction == 'r':
self.x += self.vel
self.rect.x = int(self.x) - (self.image.get_width()//2)
def update(self):
if not self.state_changed:
node = self.matrix.node_check(self)
else:
self.state_changed = False
node = None
if node:
response = node.communicate(self)
if not response:
self.matrix.nexus.data_loss(self)
self.direction = response
self.node_previous = node.id
self.state_change()
else:
self.move()