-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCommandUtils.py
More file actions
164 lines (153 loc) · 5.49 KB
/
CommandUtils.py
File metadata and controls
164 lines (153 loc) · 5.49 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
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
from BasicElements import Pos, Rot
from LongCommandsUtils import rotate, vibro, script
from PresetCommandsUtils import generate
from GeneralUtils import get_param
import math
commands = {
'random': 4,
'center': -2,
'side': 2.5,
'diagf': 4,
'diagb': 4,
'top': 3,
'mirror': '-',
'zoom': 2,
'spin': 20,
'screw': 2,
'slide': 1,
'shift': .5,
'push': 1,
'turn': 30,
'stop': '-',
'dpos': '-',
'q': '-',
}
def adjust(self, transform, dollar_split) -> None:
if len(dollar_split) > 1:
adjust_command = dollar_split[1:]
for a in adjust_command:
self.logger.log(f'調整コマンド {a} を確認')
inital = a[0]
param = eval(a[1:])
if inital == 'X':
transform.pos.x = param
elif inital == 'Y':
transform.pos.y = param
elif inital == 'Z':
transform.pos.z = param
elif inital == 'F':
transform.fov = param
elif inital == 'x':
transform.rot.x = param
elif inital == 'y':
transform.rot.y = param
elif inital == 'z':
transform.rot.z = param
else:
self.logger.log('無効な調整コマンドです。調整は行われません。')
def sequential(self, transform, text, under_split) -> None:
if len(under_split) > 1:
after_under = under_split[1:]
if text[:4] == 'dpos':
for i, a in enumerate(after_under):
param = eval(a)
self.logger.log(f'dpos シーケンシャル調整_{param}')
if i == 0:
transform.pos.x = param
if i == 1:
transform.pos.y = param
if i == 2:
transform.pos.z = param
if i == 3:
transform.fov = param
transform.lookat(self.height, self.lastTransform)
elif text[0] == 'q':
for i, a in enumerate(after_under):
param = eval(a)
self.logger.log(f'q シーケンシャル調整_{param}')
if i == 0:
transform.pos.x = param
if i == 1:
transform.pos.y = param
if i == 2:
transform.pos.z = param
if i == 3:
transform.rot.x = param
if i == 4:
transform.rot.y = param
if i == 5:
transform.rot.z = param
if i == 6:
transform.fov = param
else:
self.logger.log('このコマンドはシーケンシャル調整に対応していません')
def orig_command(self, key, transform):
manu = self.manual[key]
print(manu)
pos = Pos(float(manu['px']), float(manu['py']), float(manu['pz']))
if manu['fov'] == 'env':
self.logger.log('オリジナルコマンドの fov が env になっているため、環境fovを引き継ぎます。')
fov = self.fov
else:
fov = float(manu['fov'])
transform.pos = pos
transform.fov = fov
print(manu)
rot = Rot(float(manu['rx']), float(manu['ry']), float(manu['rz']))
transform.rot = rot
def long_command(self, text, dur) -> bool:
# rotate
if text[:6] == 'rotate':
self.logger.log(text)
self.logger.log('rotate コマンドを確認')
if any([c.isalpha() for c in text[6:]]):
self.logger.log(
f'パラメータ {text[6:]} に英字を確認。セキュリティの問題上、プログラムを強制終了します。')
input()
exit()
rotate(self, text, dur)
return True
# vibro
if text[:5] == 'vibro':
self.logger.log(text)
param = get_param(self, text, 5, def_value=1/4)
self.logger.log('vibro コマンドを確認 ', param)
vibro(self, dur, param)
return True
# script
if text[:7] == 'script,':
self.logger.log(text)
self.logger.log('script コマンドを確認 ')
script(self, text, dur)
return True
return False
def parse_command(self, transform, text) -> None:
# orig_check
for key in self.manual.keys():
if text == key:
self.logger.log(f'オリジナルコマンド {key} を検出')
# command = self.manual[key]
orig_command(self, key, transform)
return
# dollar_check
dollar_split = text.split('$')
pre_dollar = dollar_split[0]
# split_check
if pre_dollar[:4] == 'dpos' and pre_dollar[4] != '_':
pre_dollar = 'dpos_' + pre_dollar[4:]
if pre_dollar[:1] == 'q' and pre_dollar[1] != '_':
pre_dollar = 'q_' + pre_dollar[1:]
under_split = pre_dollar.split('_')
text = under_split[0]
for c in commands:
if text.startswith(c):
leng = len(c)
param = get_param(self, text, leng, commands[c])
self.logger.log(f'{c} コマンドを検出 パラメータ : ', param)
transform.set(generate(self, c, param))
sequential(self, transform, text, under_split)
adjust(self, transform, dollar_split)
return
self.logger.log(f'! スクリプト {text} はコマンドに変換できません !')
self.logger.log('直前の座標を返しますが、意図しない演出になっています。')
transform.set(self.lastTransform)