-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame.py
More file actions
79 lines (63 loc) · 2.12 KB
/
game.py
File metadata and controls
79 lines (63 loc) · 2.12 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
"""Contains the controller.
"""
import numpy as np
class Game(object):
"""Manipulates the world (and its interactable objects) and the view.
Parameters
----------
view : Viewport
models : iterable of Model, optional
Attributes
----------
view : Viewport
"""
def __init__(self, view, models=None):
self.view = view
self.view.models.extend(models or [])
self.is_moving_forward = False
self.is_moving_backward = False
self.is_moving_left = False
self.is_moving_right = False
self.move_distance = 2
self.rotation_scale_factor = 0.003
def tick(self):
# movement
move_dir = np.zeros(3)
if self.is_moving_forward:
move_dir += self.view.look_dir
if self.is_moving_backward:
move_dir -= self.view.look_dir
if self.is_moving_left:
move_dir -= self.view.strafe_dir
if self.is_moving_right:
move_dir += self.view.strafe_dir
dir_length = np.linalg.norm(move_dir)
if dir_length \
and (self.is_moving_forward or self.is_moving_backward
or self.is_moving_left or self.is_moving_right):
move_dir /= dir_length
self.view.translate(self.move_distance * move_dir)
self.view.repaint()
def move_camera(self, dx, dy):
theta_x = -dy * self.rotation_scale_factor
theta_y = -dx * self.rotation_scale_factor
if theta_x:
self.view.rotate_x(theta_x)
if theta_y:
self.view.rotate_y(theta_y)
def begin_move_forward(self):
self.is_moving_forward = True
def begin_move_backward(self):
self.is_moving_backward = True
def begin_move_left(self):
self.is_moving_left = True
def begin_move_right(self):
self.is_moving_right = True
def end_move_forward(self):
self.is_moving_forward = False
def end_move_backward(self):
self.is_moving_backward = False
def end_move_left(self):
self.is_moving_left = False
def end_move_right(self):
self.is_moving_right = False