-
Notifications
You must be signed in to change notification settings - Fork 0
/
semaphore.py
53 lines (44 loc) · 1.74 KB
/
semaphore.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
from ursina import Ursina, Entity, color, window, camera, Text, Sky
from random import choice
lbg = color.dark_gray
red, orange, green = color.red, color.orange, color.green
states = [(red, orange, lbg), (lbg, lbg, green), (red, orange, green),
(lbg, orange, lbg), (red, lbg, lbg)]
WIDTH = 640
HEIGHT = 480
app = Ursina(size=(WIDTH, HEIGHT), title="Misfunctional Semaphore")
camera.orthographic = True
camera.fov = HEIGHT
window.borderless = False
Sky()
class Semaphore(Entity):
def __init__(self):
super().__init__()
self.time = 0
# z=0.01 ensures that lights are nearer to camera than the semrect
self.semrect = Entity(model='quad', x=0, y=0, z= 1,
scale=(WIDTH / 5, HEIGHT / 1.3),
color=color.light_gray)
r, o, g = choice(states)
self.rl = Entity(model='circle', scale=60, x = 0, y = HEIGHT / 5,
color=r)
self.ol = Entity(model='circle', scale=60, x = 0, y = 0, color=o)
self.gl = Entity(model='circle', scale=60, x = 0, y = -HEIGHT / 5,
color=g)
self.time_text = Text(text='0', scale=2, origin=(0, 0), x=0, y=-0.44,
color=color.white)
def update(self):
self.time += 1
self.time_text.text = f'{self.time // 60}'
if self.time == 4 * 60:
old_status = (self.rl.color, self.ol.color, self.gl.color)
status = choice(states)
while status == old_status:
status = choice(states)
self.rl.color, self.ol.color, self.gl.color = status
self.time = 0
def input(key):
if key == "q":
quit()
game = Semaphore()
app.run()