sm-blueprint-lib 0.0.11__py3-none-any.whl → 0.0.13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. sm_blueprint_lib/__init__.py +7 -0
  2. sm_blueprint_lib/bases/__init__.py +3 -0
  3. sm_blueprint_lib/bases/controllers/__init__.py +5 -0
  4. sm_blueprint_lib/bases/controllers/sensorcontroller.py +2 -2
  5. sm_blueprint_lib/bases/joints/__init__.py +6 -0
  6. sm_blueprint_lib/bases/joints/pistonjoint.py +2 -1
  7. sm_blueprint_lib/bases/joints/suspensionjoint.py +2 -1
  8. sm_blueprint_lib/bases/parts/__init__.py +4 -0
  9. sm_blueprint_lib/bases/parts/baseboundablepart.py +1 -4
  10. sm_blueprint_lib/bases/parts/baseinteractablepart.py +3 -0
  11. sm_blueprint_lib/bases/parts/baselogicpart.py +1 -3
  12. sm_blueprint_lib/bases/parts/basepart.py +22 -3
  13. sm_blueprint_lib/blueprint.py +12 -2
  14. sm_blueprint_lib/body.py +4 -0
  15. sm_blueprint_lib/constants.py +1064 -17
  16. sm_blueprint_lib/id.py +3 -0
  17. sm_blueprint_lib/parts/__init__.py +4 -0
  18. sm_blueprint_lib/parts/barrierblock.py +3 -1
  19. sm_blueprint_lib/parts/bearing.py +3 -1
  20. sm_blueprint_lib/parts/block.py +12 -0
  21. sm_blueprint_lib/parts/button.py +3 -1
  22. sm_blueprint_lib/parts/logicgate.py +3 -1
  23. sm_blueprint_lib/parts/piston.py +31 -1
  24. sm_blueprint_lib/parts/sensor.py +38 -2
  25. sm_blueprint_lib/parts/suspension.py +62 -2
  26. sm_blueprint_lib/parts/switch.py +3 -1
  27. sm_blueprint_lib/parts/timer.py +3 -1
  28. sm_blueprint_lib/rot.py +17 -0
  29. sm_blueprint_lib/utils.py +192 -0
  30. {sm_blueprint_lib-0.0.11.dist-info → sm_blueprint_lib-0.0.13.dist-info}/METADATA +7 -2
  31. sm_blueprint_lib-0.0.13.dist-info/RECORD +56 -0
  32. sm_blueprint_lib-0.0.11.dist-info/RECORD +0 -50
  33. {sm_blueprint_lib-0.0.11.dist-info → sm_blueprint_lib-0.0.13.dist-info}/WHEEL +0 -0
  34. {sm_blueprint_lib-0.0.11.dist-info → sm_blueprint_lib-0.0.13.dist-info}/licenses/LICENSE +0 -0
sm_blueprint_lib/id.py CHANGED
@@ -2,4 +2,7 @@ from dataclasses import dataclass
2
2
 
3
3
  @dataclass
4
4
  class ID:
5
+ """Class that represents an ID object that the game uses to uniquely
6
+ identify Interactables, Joints, etc.
7
+ """
5
8
  id: int
@@ -1,4 +1,8 @@
1
+ """Blocks and Parts definitions.
2
+ """
3
+
1
4
  from .barrierblock import *
5
+ from .block import *
2
6
  from .logicgate import *
3
7
  from .sensor import *
4
8
  from .switch import *
@@ -6,4 +6,6 @@ from ..constants import SHAPEID
6
6
 
7
7
  @dataclass
8
8
  class BarrierBlock(BaseBoundablePart):
9
- shapeId: str = field(kw_only=True, default=SHAPEID.BARRIER_BLOCK)
9
+ """Class that represents a Barrier Block.
10
+ """
11
+ shapeId: str = field(kw_only=True, default=SHAPEID.Barrier_Block)
@@ -6,4 +6,6 @@ from ..constants import SHAPEID
6
6
 
7
7
  @dataclass
8
8
  class Bearing(BaseJoint):
9
- shapeId: str = field(kw_only=True, default=SHAPEID.BEARING)
9
+ """Class that represents a Bearing part.
10
+ """
11
+ shapeId: str = field(kw_only=True, default=SHAPEID.Bearing)
@@ -0,0 +1,12 @@
1
+ from dataclasses import dataclass, field
2
+
3
+ from ..bases.parts.baseboundablepart import BaseBoundablePart
4
+ from ..constants import COLOR, SHAPEID
5
+ from ..pos import Pos
6
+
7
+ @dataclass
8
+ class Block(BaseBoundablePart):
9
+ """Class that represents a Barrier Block.
10
+ """
11
+ shapeId: field(kw_only=True, default=SHAPEID.Barrier_Block)
12
+ color: field(kw_only=True, default=COLOR.Barrier_Block)
@@ -6,4 +6,6 @@ from ..constants import SHAPEID
6
6
 
7
7
  @dataclass
8
8
  class Button(BaseInteractablePart):
9
- shapeId: str = field(kw_only=True, default=SHAPEID.BUTTON)
9
+ """Class that represents a Button part.
10
+ """
11
+ shapeId: str = field(kw_only=True, default=SHAPEID.Button)
@@ -7,9 +7,11 @@ from ..constants import SHAPEID
7
7
 
8
8
  @dataclass
9
9
  class LogicGate(BaseLogicPart):
10
+ """Class that represents a Logic Gate part.
11
+ """
10
12
  controller: LogicGateController = field(
11
13
  default_factory=LogicGateController)
12
- shapeId: str = field(kw_only=True, default=SHAPEID.LOGIC_GATE)
14
+ shapeId: str = field(kw_only=True, default=SHAPEID.Logic_Gate)
13
15
 
14
16
  def __post_init__(self):
15
17
  super().__post_init__()
@@ -4,6 +4,36 @@ from ..bases.joints.pistonjoint import PistonJoint
4
4
  from ..constants import SHAPEID
5
5
 
6
6
 
7
+ @dataclass
8
+ class Piston1(PistonJoint):
9
+ """Class that represents a Piston 1 part.
10
+ """
11
+ shapeId: str = field(kw_only=True, default=SHAPEID.Piston_1)
12
+
13
+
14
+ @dataclass
15
+ class Piston2(PistonJoint):
16
+ """Class that represents a Piston 2 part.
17
+ """
18
+ shapeId: str = field(kw_only=True, default=SHAPEID.Piston_2)
19
+
20
+
21
+ @dataclass
22
+ class Piston3(PistonJoint):
23
+ """Class that represents a Piston 3 part.
24
+ """
25
+ shapeId: str = field(kw_only=True, default=SHAPEID.Piston_3)
26
+
27
+
28
+ @dataclass
29
+ class Piston4(PistonJoint):
30
+ """Class that represents a Piston 4 part.
31
+ """
32
+ shapeId: str = field(kw_only=True, default=SHAPEID.Piston_4)
33
+
34
+
7
35
  @dataclass
8
36
  class Piston5(PistonJoint):
9
- shapeId: str = field(kw_only=True, default=SHAPEID.PISTON5)
37
+ """Class that represents a Piston 5 part.
38
+ """
39
+ shapeId: str = field(kw_only=True, default=SHAPEID.Piston_5)
@@ -6,10 +6,11 @@ from ..constants import SHAPEID
6
6
 
7
7
 
8
8
  @dataclass
9
- class Sensor5(BaseInteractablePart):
9
+ class BaseSensor(BaseInteractablePart):
10
+ """Base class for Sensors.
11
+ """
10
12
  controller: SensorController = field(
11
13
  default_factory=SensorController)
12
- shapeId: str = field(kw_only=True, default=SHAPEID.SENSOR5)
13
14
 
14
15
  def __post_init__(self):
15
16
  super().__post_init__()
@@ -22,3 +23,38 @@ class Sensor5(BaseInteractablePart):
22
23
  self.controller = SensorController(*self.controller)
23
24
  except TypeError:
24
25
  self.controller = SensorController(self.controller)
26
+
27
+
28
+ @dataclass
29
+ class Sensor1(BaseSensor):
30
+ """Class that represents a Sensor 5 part.
31
+ """
32
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sensor_1)
33
+
34
+
35
+ @dataclass
36
+ class Sensor2(BaseSensor):
37
+ """Class that represents a Sensor 5 part.
38
+ """
39
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sensor_2)
40
+
41
+
42
+ @dataclass
43
+ class Sensor3(BaseSensor):
44
+ """Class that represents a Sensor 5 part.
45
+ """
46
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sensor_3)
47
+
48
+
49
+ @dataclass
50
+ class Sensor4(BaseSensor):
51
+ """Class that represents a Sensor 5 part.
52
+ """
53
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sensor_4)
54
+
55
+
56
+ @dataclass
57
+ class Sensor5(BaseSensor):
58
+ """Class that represents a Sensor 5 part.
59
+ """
60
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sensor_5)
@@ -4,11 +4,71 @@ from ..bases.joints.suspensionjoint import SuspensionJoin
4
4
  from ..constants import SHAPEID
5
5
 
6
6
 
7
+ @dataclass
8
+ class SportSuspension1(SuspensionJoin):
9
+ """Class that represents a Sport Suspension 1 part.
10
+ """
11
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sport_Suspension_1)
12
+
13
+
14
+ @dataclass
15
+ class SportSuspension2(SuspensionJoin):
16
+ """Class that represents a Sport Suspension 2 part.
17
+ """
18
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sport_Suspension_2)
19
+
20
+
21
+ @dataclass
22
+ class SportSuspension3(SuspensionJoin):
23
+ """Class that represents a Sport Suspension 3 part.
24
+ """
25
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sport_Suspension_3)
26
+
27
+
28
+ @dataclass
29
+ class SportSuspension4(SuspensionJoin):
30
+ """Class that represents a Sport Suspension 4 part.
31
+ """
32
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sport_Suspension_4)
33
+
34
+
7
35
  @dataclass
8
36
  class SportSuspension5(SuspensionJoin):
9
- shapeId: str = field(kw_only=True, default=SHAPEID.SPORT_SUSPENSION5)
37
+ """Class that represents a Sport Suspension 5 part.
38
+ """
39
+ shapeId: str = field(kw_only=True, default=SHAPEID.Sport_Suspension_5)
40
+
41
+
42
+ @dataclass
43
+ class OffRoadSuspension1(SuspensionJoin):
44
+ """Class that represents a Off-Road Suspension 1 part.
45
+ """
46
+ shapeId: str = field(kw_only=True, default=SHAPEID.Off_Road_Suspension_1)
47
+
48
+
49
+ @dataclass
50
+ class OffRoadSuspension2(SuspensionJoin):
51
+ """Class that represents a Off-Road Suspension 2 part.
52
+ """
53
+ shapeId: str = field(kw_only=True, default=SHAPEID.Off_Road_Suspension_2)
54
+
55
+
56
+ @dataclass
57
+ class OffRoadSuspension3(SuspensionJoin):
58
+ """Class that represents a Off-Road Suspension 3 part.
59
+ """
60
+ shapeId: str = field(kw_only=True, default=SHAPEID.Off_Road_Suspension_3)
61
+
62
+
63
+ @dataclass
64
+ class OffRoadSuspension4(SuspensionJoin):
65
+ """Class that represents a Off-Road Suspension 4 part.
66
+ """
67
+ shapeId: str = field(kw_only=True, default=SHAPEID.Off_Road_Suspension_4)
10
68
 
11
69
 
12
70
  @dataclass
13
71
  class OffRoadSuspension5(SuspensionJoin):
14
- shapeId: str = field(kw_only=True, default=SHAPEID.OFFROAD_SUSPENSION5)
72
+ """Class that represents an Off-Road Suspension 5 part.
73
+ """
74
+ shapeId: str = field(kw_only=True, default=SHAPEID.Off_Road_Suspension_5)
@@ -6,4 +6,6 @@ from ..constants import SHAPEID
6
6
 
7
7
  @dataclass
8
8
  class Switch(BaseLogicPart):
9
- shapeId: str = field(kw_only=True, default=SHAPEID.SWITCH)
9
+ """Class that represents a Switch part.
10
+ """
11
+ shapeId: str = field(kw_only=True, default=SHAPEID.Switch)
@@ -7,8 +7,10 @@ from ..constants import SHAPEID
7
7
 
8
8
  @dataclass
9
9
  class Timer(BaseLogicPart):
10
+ """Class that represents a Timer logic part.
11
+ """
10
12
  controller: TimerController = field(default_factory=TimerController)
11
- shapeId: str = field(kw_only=True, default=SHAPEID.TIMER)
13
+ shapeId: str = field(kw_only=True, default=SHAPEID.Timer)
12
14
 
13
15
  def __post_init__(self):
14
16
  super().__post_init__()
@@ -0,0 +1,17 @@
1
+ from .constants import ROTATION
2
+ from .pos import Pos
3
+ from .bases.parts.basepart import BasePart
4
+
5
+
6
+ def rotate(gates: list, center: Pos):
7
+ """Rotates a list of gate
8
+
9
+ Args:
10
+ gates (list): list of gates to rotate.
11
+ center (Pos): Center point to rotate gates.
12
+
13
+ """
14
+ for gate in gates:
15
+ temp = gate.pos
16
+ # todo everything :)
17
+ pass
sm_blueprint_lib/utils.py CHANGED
@@ -1,7 +1,12 @@
1
+ """
2
+ Utility functions for basic uses.
3
+ """
4
+
1
5
  from dataclasses import asdict
2
6
  from json import load, dump, loads, dumps
3
7
  from math import ceil, log2
4
8
  from typing import Sequence
9
+ import PIL
5
10
 
6
11
  from numpy import ndarray
7
12
 
@@ -135,3 +140,190 @@ def num_to_bit_list(number: int, bit_length: int):
135
140
  for b in range(bit_length):
136
141
  output[b] = bool((number >> b) & 1)
137
142
  return output
143
+
144
+
145
+ """
146
+
147
+ def fill_void(object,x,y,z,block, color = "000000" ,offSet = None):
148
+ def show_fill_block():
149
+ def logic_gate(image,pos,size, color):
150
+ for x in range(16):
151
+ for y in range(16):
152
+ if x <= 1 or y <= 1 or x >= 14 or y >= 14 :
153
+ image.putpixel((pos[0]+x, pos[1]+y), color)
154
+ if 1 < y < 14 and 1 < x < 14 :
155
+ image.putpixel((pos[0]+x, pos[1]+y), (128,128,128))
156
+
157
+ image.putpixel((pos[0]+4, pos[1]+4), (32, 32, 32)) # I dont even know why this is the way it its -steve
158
+ image.putpixel((pos[0]+4, pos[1]+5), (32, 32, 32))
159
+ image.putpixel((pos[0]+4, pos[1]+6), (32, 32, 32))
160
+ image.putpixel((pos[0]+4, pos[1]+7), (32, 32, 32))
161
+ image.putpixel((pos[0]+4, pos[1]+8), (32, 32, 32))
162
+ image.putpixel((pos[0]+4, pos[1]+9), (32, 32, 32))
163
+ image.putpixel((pos[0]+4, pos[1]+10), (32, 32, 32))
164
+ image.putpixel((pos[0]+4, pos[1]+11), (32, 32, 32))
165
+ image.putpixel((pos[0]+5, pos[1]+4), (32, 32, 32))
166
+ image.putpixel((pos[0]+5, pos[1]+5), (32, 32, 32))
167
+ image.putpixel((pos[0]+5, pos[1]+6), (32, 32, 32))
168
+ image.putpixel((pos[0]+5, pos[1]+7), (32, 32, 32))
169
+ image.putpixel((pos[0]+5, pos[1]+8), (32, 32, 32))
170
+ image.putpixel((pos[0]+5, pos[1]+9), (32, 32, 32))
171
+ image.putpixel((pos[0]+5, pos[1]+10), (32, 32, 32))
172
+ image.putpixel((pos[0]+5, pos[1]+11), (32, 32, 32))
173
+
174
+ image.putpixel((pos[0]+6, pos[1]+10), (32, 32, 32))
175
+ image.putpixel((pos[0]+6, pos[1]+11), (32, 32, 32))
176
+ image.putpixel((pos[0]+7, pos[1]+10), (32, 32, 32))
177
+ image.putpixel((pos[0]+7, pos[1]+11), (32, 32, 32))
178
+ image.putpixel((pos[0]+8, pos[1]+10), (32, 32, 32))
179
+ image.putpixel((pos[0]+8, pos[1]+11), (32, 32, 32))
180
+ image.putpixel((pos[0]+9, pos[1]+9), (32, 32, 32))
181
+ image.putpixel((pos[0]+9, pos[1]+10), (32, 32, 32))
182
+ image.putpixel((pos[0]+9, pos[1]+11), (32, 32, 32))
183
+ image.putpixel((pos[0]+10, pos[1]+10), (32, 32, 32))
184
+
185
+ image.putpixel((pos[0]+6, pos[1]+4), (32, 32, 32))
186
+ image.putpixel((pos[0]+6, pos[1]+5), (32, 32, 32))
187
+ image.putpixel((pos[0]+7, pos[1]+4), (32, 32, 32))
188
+ image.putpixel((pos[0]+7, pos[1]+5), (32, 32, 32))
189
+ image.putpixel((pos[0]+8, pos[1]+4), (32, 32, 32))
190
+ image.putpixel((pos[0]+8, pos[1]+5), (32, 32, 32))
191
+ image.putpixel((pos[0]+9, pos[1]+4), (32, 32, 32))
192
+ image.putpixel((pos[0]+9, pos[1]+5), (32, 32, 32))
193
+ image.putpixel((pos[0]+9, pos[1]+6), (32, 32, 32))
194
+ image.putpixel((pos[0]+10, pos[1]+5), (32, 32, 32))
195
+
196
+ image.putpixel((pos[0]+10, pos[1]+6), (32, 32, 32))
197
+ image.putpixel((pos[0]+10, pos[1]+7), (32, 32, 32))
198
+ image.putpixel((pos[0]+10, pos[1]+8), (32, 32, 32))
199
+ image.putpixel((pos[0]+10, pos[1]+9), (32, 32, 32))
200
+ image.putpixel((pos[0]+11, pos[1]+6), (32, 32, 32))
201
+ image.putpixel((pos[0]+11, pos[1]+7), (32, 32, 32))
202
+ image.putpixel((pos[0]+11, pos[1]+8), (32, 32, 32))
203
+ image.putpixel((pos[0]+11, pos[1]+9), (32, 32, 32))
204
+
205
+ def Noblock(image,pos,size):
206
+ for x in range(size[0]):
207
+ for y in range(size[1]):
208
+ if x == y or x+1 == y or x == size[1]-y or x+1 == size[1]-y or x == 0 or y == 0 or x == size[0]-1 or y == size[1]-1 :
209
+ image.putpixel((pos[0]+x, pos[1]+y), (255,0,0))
210
+ else:
211
+ image.putpixel((pos[0] + x, pos[1] + y), (0, 0, 0))
212
+
213
+ size = 16
214
+ new_image = Image.new("RGB", (int(len(filled_blocks)*size), int(len(filled_blocks[0])*size)), color=0)
215
+ for z in range(len(filled_blocks[0][0])):
216
+ for x in range(len(filled_blocks)):
217
+ for y in range(len(filled_blocks[x])):
218
+ if filled_blocks[x][y][z] is not None:
219
+ logic_gate(new_image,(x*size,-y*size),(size,size),hex_rgb(filled_blocks[x][y][z]))
220
+
221
+ else:
222
+ Noblock(new_image,(x*size,-y*size),(size,size))
223
+ new_image.show()
224
+
225
+ def fill_block(member):
226
+ if hasattr(member, "timer_pos"):
227
+ posx, posy, posz = member.timer_pos
228
+ posx -= offx
229
+ posy -= offy
230
+ posz -= offz
231
+ filled_blocks[posx][posy][posz] = member
232
+
233
+ posx, posy, posz = member.pos
234
+ posx -= offx
235
+ posy -= offy
236
+ posz -= offz
237
+ filled_blocks[posx][posy][posz] = member
238
+
239
+ def fill():
240
+ isblock = False
241
+ blocks_members = [attr for attr in dir(blocks) if not callable(getattr(blocks, attr)) and not attr.startswith("__")]
242
+ for each in blocks_members:
243
+ if block["uuid"] == blocks.__getattribute__(each)["uuid"]:
244
+ isblock = True
245
+ break
246
+
247
+
248
+ for x in range(len(filled_blocks)):
249
+ for y in range(len(filled_blocks[x])):
250
+ if filled_blocks[x][y][0] is None:
251
+ if isblock:
252
+ object.fill_block(block, (x+offx,y+offy-1,offz), (1,1,1), color)
253
+ else:
254
+ object.place_object(block,(x+offx,y+offy-1,offz),"up","up", color)
255
+
256
+ filled_blocks = [[[None for _ in range(z)] for _ in range(y)] for _ in range(x)]
257
+
258
+ if offSet is not None:
259
+ offx, offy, offz = offSet
260
+ elif hasattr(object, "pos"):
261
+ offx,offy,offz = object.pos
262
+ else:
263
+ offx, offy, offz = 0,0,0
264
+
265
+ members = [attr for attr in dir(object) if not callable(getattr(object, attr)) and not attr.startswith("__")]
266
+
267
+ for each in members:
268
+ member = object.__getattribute__(each)
269
+ if type(member) == type([]):
270
+ for each in member:
271
+ if hasattr(each, "pos"):
272
+ fill_block(each)
273
+
274
+ elif hasattr(member,"pos"):
275
+ fill_block(member)
276
+
277
+ #show_fill_block()
278
+ fill()
279
+
280
+ def border(blueprint,posx,posy,offx,offy):
281
+ offx-=1
282
+ offy-=1
283
+ posx+=1
284
+
285
+ for y in range(posy):
286
+ blueprint.place_object(objects.Small_Pipe_Tee,(offx,y + offy,0),"up","up","000000")
287
+ blueprint.place_object(objects.Duct_End,(offx,y + offy,0),"south","right","000000")
288
+ blueprint.place_object(objects.Duct_End,(offx,y + offy,0),"north","left","000000")
289
+ blueprint.place_object(objects.Duct_End,(offx,y + offy,0),"south","left","000000")
290
+
291
+ blueprint.place_object(objects.Small_Pipe_Tee,(offx+posx,y + offy,0),"up","down","000000")
292
+ blueprint.place_object(objects.Duct_End,(offx+posx,y + offy,0),"west","down","000000")
293
+ blueprint.place_object(objects.Duct_End,(offx+posx,y + offy,0),"south","right","000000")
294
+ blueprint.place_object(objects.Duct_End,(offx+posx,y + offy,0),"south","left","000000")
295
+
296
+ for x in range(posx-1):
297
+ blueprint.place_object(objects.Small_Pipe_Tee,(1+x+offx,offy-1,0),"up","left","000000")
298
+ blueprint.place_object(objects.Duct_End,(1+x+offx,offy-1,0),"west","down","000000")
299
+ blueprint.place_object(objects.Duct_End,(1+x+offx,offy-1,0),"east","left","000000")
300
+ blueprint.place_object(objects.Duct_End,(1+x+offx,offy-1,0),"west","left","000000")
301
+
302
+ blueprint.place_object(objects.Small_Pipe_Tee,(1+x+offx,offy+posy,0),"up","right","000000")
303
+ blueprint.place_object(objects.Duct_End,(1+x+offx,offy+posy,0),"west","up","000000")
304
+ blueprint.place_object(objects.Duct_End,(1+x+offx,offy+posy,0),"east","left","000000")
305
+ blueprint.place_object(objects.Duct_End,(1+x+offx,offy+posy,0),"west","left","000000")
306
+ offy-=1
307
+ blueprint.place_object(objects.Small_Pipe_Bend, (offx, offy, 0), "west", "left", "000000")
308
+ blueprint.place_object(objects.Duct_End, (offx, offy, 0), "west", "right", "000000")
309
+ blueprint.place_object(objects.Duct_End, (offx, offy, 0), "south", "left", "000000")
310
+ blueprint.place_object(objects.Duct_End, (offx, offy, 0), "west", "down", "000000")
311
+ blueprint.place_object(objects.Duct_End, (offx, offy, 0), "south", "up", "000000")
312
+ blueprint.place_object(objects.Small_Pipe_Bend, (offx, posy+offy+1, 0), "west", "right", "000000")
313
+ blueprint.place_object(objects.Duct_End, (offx, posy+offy+1, 0), "west", "right", "000000")
314
+ blueprint.place_object(objects.Duct_End, (offx, posy+offy+1, 0), "north", "left", "000000")
315
+ blueprint.place_object(objects.Duct_End, (offx, posy+offy+1, 0), "west", "up", "000000")
316
+ blueprint.place_object(objects.Duct_End, (offx, posy+offy+1, 0), "north", "right", "000000")
317
+ blueprint.place_object(objects.Small_Pipe_Bend, (posx+offx, offy, 0), "east", "left", "000000")
318
+ blueprint.place_object(objects.Duct_End, (posx+offx, offy, 0), "south", "left", "000000")
319
+ blueprint.place_object(objects.Duct_End, (posx+offx, offy, 0), "east", "left", "000000")
320
+ blueprint.place_object(objects.Duct_End, (posx+offx, offy, 0), "south", "down", "000000")
321
+ blueprint.place_object(objects.Duct_End, (posx+offx, offy, 0), "east", "up", "000000")
322
+ blueprint.place_object(objects.Small_Pipe_Bend, (posx+offx, posy+offy+1, 0), "east", "right", "000000")
323
+ blueprint.place_object(objects.Duct_End, (posx+offx, posy+offy+1, 0), "east", "down", "000000")
324
+ blueprint.place_object(objects.Duct_End, (posx+offx, posy+offy+1, 0), "north", "up", "000000")
325
+ blueprint.place_object(objects.Duct_End, (posx+offx, posy+offy+1, 0), "east", "left", "000000")
326
+ blueprint.place_object(objects.Duct_End, (posx+offx, posy+offy+1, 0), "north", "right", "000000")
327
+
328
+ """
329
+
@@ -1,10 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sm_blueprint_lib
3
- Version: 0.0.11
3
+ Version: 0.0.13
4
4
  Summary: Scrap Mechanic Library for Blueprint manipulation.
5
5
  Project-URL: Homepage, https://github.com/MauriceTZ/sm_blueprint_lib
6
6
  Project-URL: Issues, https://github.com/MauriceTZ/sm_blueprint_lib/issues
7
- Author-email: Maurice <mauriciotorrez00@gmail.com>
7
+ Author: niknal357
8
+ Author-email: Maurice <mauriciotorrez00@gmail.com>, lnventorsteve <dylanv60431@gmail.com>
8
9
  License-Expression: MIT
9
10
  License-File: LICENSE
10
11
  Classifier: Operating System :: OS Independent
@@ -20,6 +21,10 @@ Description-Content-Type: text/markdown
20
21
  ```sh
21
22
  pip install sm_blueprint_lib
22
23
  ```
24
+ ## Updating version
25
+ ```sh
26
+ pip install --upgrade sm_blueprint_lib
27
+ ```
23
28
  ## Usage
24
29
  ```python
25
30
  import numpy as np
@@ -0,0 +1,56 @@
1
+ sm_blueprint_lib/__init__.py,sha256=1i8x-XgrGJ7BzJxMNI-JDm-M0H5x8Bhjhibx8fCVYEc,296
2
+ sm_blueprint_lib/blueprint.py,sha256=C1RaOZaW5pQkLhN5jkC1KxCDieEN9LtChcqzxOy1gOk,1685
3
+ sm_blueprint_lib/body.py,sha256=FnLz27peBBlEqQ_n4wdF3GEnaP-_HkgMyceUnN7B7xU,556
4
+ sm_blueprint_lib/bounds.py,sha256=fH-i8PdlZVg8qlEd3FmIf5mbx4RKhdBOFRAe5cSWWiI,183
5
+ sm_blueprint_lib/constants.py,sha256=POtImdICEKzcB-mJIus-nYCjRBNKO1tRaDvflMDVO74,70488
6
+ sm_blueprint_lib/id.py,sha256=Xe06TaVk86J81pEB2UOZzaDmoaNS1Eu-ROsn-lnN-s0,197
7
+ sm_blueprint_lib/pos.py,sha256=5JhV4jyHZOnolo0Ecj107auLIXXnFqL7uCzPDyikI64,845
8
+ sm_blueprint_lib/rot.py,sha256=byNNO3o20CSzPXrva5bhgeKC8uBhUo0V_poeBWncfwo,387
9
+ sm_blueprint_lib/utils.py,sha256=avDho6MouYtrrF93lno_oI4GKEjbIgfAS-R22CAN63Y,14776
10
+ sm_blueprint_lib/bases/__init__.py,sha256=BxJWbYNYefugj8PLAICZVly0bNw0sOMixzvxFzLTi9c,73
11
+ sm_blueprint_lib/bases/controllers/__init__.py,sha256=EncVYYlOdfnc_igGsXYsjVoDGwrY1yAqJNkTGmtf9Fc,168
12
+ sm_blueprint_lib/bases/controllers/basecontroller.py,sha256=VFS5J7kGQ8vfWBFjiTPVfXXjyMwJ1VqA3mYuh7Z_8ak,624
13
+ sm_blueprint_lib/bases/controllers/baselogiccontroller.py,sha256=lDoDt9NKFu01CqyJE09_bq9oDeYK7T-fERO54kd-sFA,290
14
+ sm_blueprint_lib/bases/controllers/logicgatecontroller.py,sha256=wzw8kdt65Zg6ucNNy47V3-okYod_ea2NH8erfjRu7uw,223
15
+ sm_blueprint_lib/bases/controllers/sensorcontroller.py,sha256=QRiNYezoR2SDmVGBoETmM2BUF2jc8pFiiJkz5v9Uow8,713
16
+ sm_blueprint_lib/bases/controllers/timercontroller.py,sha256=GcGzSicm0oGMP3gsuOA5t6PqEhRAsUVHWaCjhClbfMI,229
17
+ sm_blueprint_lib/bases/joints/__init__.py,sha256=MPMy8D7B-9tVxpUovzveM-vnm57q3t_rvxMmK3-0R9U,202
18
+ sm_blueprint_lib/bases/joints/basejoint.py,sha256=C4IkY7yzGkEomVCf-g2mKqioqAAV5jHaSdlKsXdKnmU,628
19
+ sm_blueprint_lib/bases/joints/basejointcontroller.py,sha256=a3w_VPVp9pZuYdeaY8-fHxGYZdJhR1enCULS2SBxJ9o,133
20
+ sm_blueprint_lib/bases/joints/pistonjoint.py,sha256=0B6jSoK2Y24glpN9n6xko_5NSi9IQEmKRTeE7cJLl9E,420
21
+ sm_blueprint_lib/bases/joints/pistonjointcontroller.py,sha256=NqffDkRzcPrqZXDDPjVFls0d1vAj6pFxJhbqxLx83f4,198
22
+ sm_blueprint_lib/bases/joints/suspensionjoint.py,sha256=_uix5HpJzjqZz2ni8CKRcz5VEKGX4ktY64i7JNY3_Kw,450
23
+ sm_blueprint_lib/bases/joints/suspensionjointcontroller.py,sha256=0bS6s6rjFivz83AYfFeiBybjULHVrF-7kknoP7SJUR0,194
24
+ sm_blueprint_lib/bases/parts/__init__.py,sha256=oybBoF6JgRrInA6ac-oxC9Dv2_xKWIv2bsWYS4VYdwo,126
25
+ sm_blueprint_lib/bases/parts/baseboundablepart.py,sha256=O16iMQgcffjAiU8e1V1Y55gCK_oAP2mH7yGGmdzFvC8,620
26
+ sm_blueprint_lib/bases/parts/baseinteractablepart.py,sha256=R-4Y1r9pTfQfIkQbjChwoJQm2VXIwWJHep43hfZpr_o,763
27
+ sm_blueprint_lib/bases/parts/baselogicpart.py,sha256=2MhJJF-vOHHSdJrhmI_soU9oeAuJOfCLI1pezWmwvI0,399
28
+ sm_blueprint_lib/bases/parts/basepart.py,sha256=72eedTMCodFWRGjb7Ff-LtKYG0Kb4GU891zF8tuAWYs,2067
29
+ sm_blueprint_lib/parts/__init__.py,sha256=yEAsWyilDdeY2E1PQco2btuUgI-O3sehXZgt6lT-VlA,283
30
+ sm_blueprint_lib/parts/barrierblock.py,sha256=fCiUam_EABn81gCRZ_w0veHKmWA57bLX85lCYgJqUQE,321
31
+ sm_blueprint_lib/parts/bearing.py,sha256=sMsuA3SqBQsXJSBLX8xuFW9RQADEZ7TgvgD4CZGFtPI,288
32
+ sm_blueprint_lib/parts/block.py,sha256=-od_ijKwQQEuqfG3V9U-i_niGMIJJDDSbOdgMNVhJ58,399
33
+ sm_blueprint_lib/parts/button.py,sha256=XBDTVTkOu0zudDSKPZXq9ANA3uSSo3MLoF6DmqLnte4,317
34
+ sm_blueprint_lib/parts/logicgate.py,sha256=IBFrFIPH4lSzkU-7e8Nf3Dxn_Yh0BEN-Pf2oKeNIA5Y,1018
35
+ sm_blueprint_lib/parts/piston.py,sha256=Kuki_7eLMwDCIhOE69ICokRm69l4b3TRmUkoRRiiu3U,964
36
+ sm_blueprint_lib/parts/sensor.py,sha256=l13FJgJx8jJ0Uzyrra_5hMnpcV2OLbQk5LqzRSAov7Y,1817
37
+ sm_blueprint_lib/parts/suspension.py,sha256=60vNDV16vYQ8E439OSZ5tvDvdBjB0r8AX0IrRCVzJo0,2167
38
+ sm_blueprint_lib/parts/switch.py,sha256=hG5US41pXAUpfAxl9ZJnFQgDtEA1moThtR3dS7gFkM8,296
39
+ sm_blueprint_lib/parts/timer.py,sha256=NtKCsFMc7De5gC_fj9qpeoNcE6wyv-pIOnWcFkBvX-4,865
40
+ sm_blueprint_lib/prebuilds/__init__.py,sha256=iPrsPMiuoluIDvdLGuQmEJ-I11D5qk563ANKr3md1GM,337
41
+ sm_blueprint_lib/prebuilds/adder.py,sha256=qO1ulOBkXwZ7egJu1dmvvPDsD_DlIJP59LfwlkYbpTI,1737
42
+ sm_blueprint_lib/prebuilds/barrel_shifter.py,sha256=i2Yv5E7-saafb3GxGgIMFSDuKSiTdAykBBRP4Zb2hKE,3543
43
+ sm_blueprint_lib/prebuilds/clock40hz.py,sha256=PrAxTZHX-TiMs8BfgotPoU_0RFVMhi9SiD4cw6HorQ4,831
44
+ sm_blueprint_lib/prebuilds/comparator.py,sha256=Fp5xOqJVTz-yb7M0cczMoyOPQc1TjiSaROvSuKxrffU,2192
45
+ sm_blueprint_lib/prebuilds/counter.py,sha256=d2z9_2zeGmpAQR0V74mZnNVLtjg-FI8UGWvQM7oObXE,2535
46
+ sm_blueprint_lib/prebuilds/decoder.py,sha256=YKQVoWsrm0vF3z6piiI2FWYm-S09_WoNW2-3mJR5oaU,2064
47
+ sm_blueprint_lib/prebuilds/distance_sensor.py,sha256=8g3lZu391Kh8dpKG4Y8Tm2O6mWdwA_1Gssftxw-vDC4,1724
48
+ sm_blueprint_lib/prebuilds/ram.py,sha256=9F9sWZ-BP8F3414dD_z6WD4k073_NflH6yYoKVSu6Cc,4199
49
+ sm_blueprint_lib/prebuilds/register.py,sha256=BMU5ZG92opP4eAklI0qV4B_3CdkpI8mTv3IhCS4fyrU,2642
50
+ sm_blueprint_lib/prebuilds/rom.py,sha256=ed5WOiwt5n5A_RlLsrc9sfOmlu_tzDp-N4R6jslRZoM,3687
51
+ sm_blueprint_lib/prebuilds/timer_ram_cached.py,sha256=RSgoWsT1yogplwbOPx6qvA5eEgHpAKKwO7AgJPaUavo,19044
52
+ sm_blueprint_lib/prebuilds/timer_ram_multiclient.py,sha256=D_yuI09l0Gm5Ye1xKFnQMIrPoV4BzDBkRTVR7zSbWZY,4187
53
+ sm_blueprint_lib-0.0.13.dist-info/METADATA,sha256=F1cCWTnSv4roJhS982gbGxK7CdDLfyCphHylijX_GyQ,3505
54
+ sm_blueprint_lib-0.0.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
55
+ sm_blueprint_lib-0.0.13.dist-info/licenses/LICENSE,sha256=DWhaodryTSEv07KdWbanCMaEujOXYxnj-IEhmgTkOq0,1084
56
+ sm_blueprint_lib-0.0.13.dist-info/RECORD,,
@@ -1,50 +0,0 @@
1
- sm_blueprint_lib/__init__.py,sha256=tKJFVT4WCnexRUoVCgG59mT5FSK_eb6WjX6fDs3S09c,207
2
- sm_blueprint_lib/blueprint.py,sha256=gdupv6pNygwmoOHpZW8J16kZ3N26rdLkAc7Xq48QbvI,1261
3
- sm_blueprint_lib/body.py,sha256=sjnS0e1V0bZEhODA6XOxPH2oCt3xrFLQZ47PGhKjD_w,365
4
- sm_blueprint_lib/bounds.py,sha256=fH-i8PdlZVg8qlEd3FmIf5mbx4RKhdBOFRAe5cSWWiI,183
5
- sm_blueprint_lib/constants.py,sha256=esKPtnHBUjyMvpKhpH-VC8cCvCT_Qm0U409MrzDqYYg,1243
6
- sm_blueprint_lib/id.py,sha256=5sBHC8qZJnCaizSBs4KGS1dnZHOSdoq5wkuIpuYNRnw,71
7
- sm_blueprint_lib/pos.py,sha256=5JhV4jyHZOnolo0Ecj107auLIXXnFqL7uCzPDyikI64,845
8
- sm_blueprint_lib/utils.py,sha256=KCU9CvTYM5TN7c9ks-8scsHXr-zcwcuXDuO7ESHX4E4,4801
9
- sm_blueprint_lib/bases/controllers/basecontroller.py,sha256=VFS5J7kGQ8vfWBFjiTPVfXXjyMwJ1VqA3mYuh7Z_8ak,624
10
- sm_blueprint_lib/bases/controllers/baselogiccontroller.py,sha256=lDoDt9NKFu01CqyJE09_bq9oDeYK7T-fERO54kd-sFA,290
11
- sm_blueprint_lib/bases/controllers/logicgatecontroller.py,sha256=wzw8kdt65Zg6ucNNy47V3-okYod_ea2NH8erfjRu7uw,223
12
- sm_blueprint_lib/bases/controllers/sensorcontroller.py,sha256=Do8TJbnm7EhAMqGPprO9lTxAuNQMOFsSo-FslZZWnqk,710
13
- sm_blueprint_lib/bases/controllers/timercontroller.py,sha256=GcGzSicm0oGMP3gsuOA5t6PqEhRAsUVHWaCjhClbfMI,229
14
- sm_blueprint_lib/bases/joints/basejoint.py,sha256=C4IkY7yzGkEomVCf-g2mKqioqAAV5jHaSdlKsXdKnmU,628
15
- sm_blueprint_lib/bases/joints/basejointcontroller.py,sha256=a3w_VPVp9pZuYdeaY8-fHxGYZdJhR1enCULS2SBxJ9o,133
16
- sm_blueprint_lib/bases/joints/pistonjoint.py,sha256=2Avstib8kHuFjv2uFI5gkWsn-lWv7Lk4g1jd-pF2sgY,348
17
- sm_blueprint_lib/bases/joints/pistonjointcontroller.py,sha256=NqffDkRzcPrqZXDDPjVFls0d1vAj6pFxJhbqxLx83f4,198
18
- sm_blueprint_lib/bases/joints/suspensionjoint.py,sha256=w3ChZvaB75y2cnfdV24ib3hcD49RgJHJIcTUIMGN7rw,374
19
- sm_blueprint_lib/bases/joints/suspensionjointcontroller.py,sha256=0bS6s6rjFivz83AYfFeiBybjULHVrF-7kknoP7SJUR0,194
20
- sm_blueprint_lib/bases/parts/baseboundablepart.py,sha256=jNx_btmkCTksT6FcpHQxEVJXzN1a3DwwHS-2GdTy2CE,744
21
- sm_blueprint_lib/bases/parts/baseinteractablepart.py,sha256=VXINrObIr6Y2tFIOI59cB_-625rPwtKZdGDmaa3EgQ8,574
22
- sm_blueprint_lib/bases/parts/baselogicpart.py,sha256=al9nLCg8YiLKWd_c_ZQmq9f6sazjF6RNbuGGbYROOps,498
23
- sm_blueprint_lib/bases/parts/basepart.py,sha256=R_ZbW6MURsxH-UT-Z9DboGiBCRIWeJuBwWjleKUdBmg,1330
24
- sm_blueprint_lib/parts/__init__.py,sha256=KviKNh2cwQz39xX-tqk73t4C1RqS9eVrE3lwpch2MEc,220
25
- sm_blueprint_lib/parts/barrierblock.py,sha256=GPI8ArKKvzO6wnHfBfgmU4Ezcrw9SmtKR0p4mWczYiw,267
26
- sm_blueprint_lib/parts/bearing.py,sha256=g54yQEOLGqlFIFx_MN2RhMe9QymottLsYjMU9o2A0xc,233
27
- sm_blueprint_lib/parts/button.py,sha256=CtAFyjqXndJq3eNWMRyAC-tVALKVaFVQfDbipILtNnw,263
28
- sm_blueprint_lib/parts/logicgate.py,sha256=In7-d-lCx1zJIT-7S0Mh7s32lj7xZ6wxObJMnKJKQQ4,960
29
- sm_blueprint_lib/parts/piston.py,sha256=spKPDZ5n1qMK0NhDw1QKlfBWjYxjFwZCUQkiHXy1_Qo,239
30
- sm_blueprint_lib/parts/sensor.py,sha256=ZJY5xo0NB6wAwgzS7EO-xgsukXYbwV7ptbGOqLfeBKQ,1008
31
- sm_blueprint_lib/parts/suspension.py,sha256=GneMZcv4QCVbBOOpp400xffmbaHaWrCbOBvAoahv8cg,404
32
- sm_blueprint_lib/parts/switch.py,sha256=VkPfvux1TeLTZawmYEHMLGnXxk-lqgB6qb2hwpICjms,242
33
- sm_blueprint_lib/parts/timer.py,sha256=gw9XaWvP2yW3egT72BGowMu-CZFUY-Hke-Dwg0lsxjM,806
34
- sm_blueprint_lib/prebuilds/__init__.py,sha256=iPrsPMiuoluIDvdLGuQmEJ-I11D5qk563ANKr3md1GM,337
35
- sm_blueprint_lib/prebuilds/adder.py,sha256=qO1ulOBkXwZ7egJu1dmvvPDsD_DlIJP59LfwlkYbpTI,1737
36
- sm_blueprint_lib/prebuilds/barrel_shifter.py,sha256=i2Yv5E7-saafb3GxGgIMFSDuKSiTdAykBBRP4Zb2hKE,3543
37
- sm_blueprint_lib/prebuilds/clock40hz.py,sha256=PrAxTZHX-TiMs8BfgotPoU_0RFVMhi9SiD4cw6HorQ4,831
38
- sm_blueprint_lib/prebuilds/comparator.py,sha256=Fp5xOqJVTz-yb7M0cczMoyOPQc1TjiSaROvSuKxrffU,2192
39
- sm_blueprint_lib/prebuilds/counter.py,sha256=d2z9_2zeGmpAQR0V74mZnNVLtjg-FI8UGWvQM7oObXE,2535
40
- sm_blueprint_lib/prebuilds/decoder.py,sha256=YKQVoWsrm0vF3z6piiI2FWYm-S09_WoNW2-3mJR5oaU,2064
41
- sm_blueprint_lib/prebuilds/distance_sensor.py,sha256=8g3lZu391Kh8dpKG4Y8Tm2O6mWdwA_1Gssftxw-vDC4,1724
42
- sm_blueprint_lib/prebuilds/ram.py,sha256=9F9sWZ-BP8F3414dD_z6WD4k073_NflH6yYoKVSu6Cc,4199
43
- sm_blueprint_lib/prebuilds/register.py,sha256=BMU5ZG92opP4eAklI0qV4B_3CdkpI8mTv3IhCS4fyrU,2642
44
- sm_blueprint_lib/prebuilds/rom.py,sha256=ed5WOiwt5n5A_RlLsrc9sfOmlu_tzDp-N4R6jslRZoM,3687
45
- sm_blueprint_lib/prebuilds/timer_ram_cached.py,sha256=RSgoWsT1yogplwbOPx6qvA5eEgHpAKKwO7AgJPaUavo,19044
46
- sm_blueprint_lib/prebuilds/timer_ram_multiclient.py,sha256=D_yuI09l0Gm5Ye1xKFnQMIrPoV4BzDBkRTVR7zSbWZY,4187
47
- sm_blueprint_lib-0.0.11.dist-info/METADATA,sha256=WWym1Hiix4LeONmobSBWcUfsrBFfbhW0PgoD_G-ECr0,3379
48
- sm_blueprint_lib-0.0.11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
49
- sm_blueprint_lib-0.0.11.dist-info/licenses/LICENSE,sha256=DWhaodryTSEv07KdWbanCMaEujOXYxnj-IEhmgTkOq0,1084
50
- sm_blueprint_lib-0.0.11.dist-info/RECORD,,