@@ -40,11 +40,20 @@ def __init__(self):
4040
4141 self .palette = None
4242
43+ self .offset_x = 0
44+ self .offset_y = 0
45+
46+ self .occlusion_layers = 0
47+
4348 self .task = RenderTask (None )
4449
4550 def set_output_index (self , output_index ):
4651 self .output_index = output_index
4752
53+ def set_offset (self , offset_x , offset_y ):
54+ self .offset_x = offset_x
55+ self .offset_y = offset_y
56+
4857 # Adds render angles for the given number of viewing angles relative to the currently configured rotation
4958 def add_viewing_angles (self , number_of_viewing_angles , animation_frame_index = 0 , animation_frames = 1 ):
5059
@@ -58,6 +67,8 @@ def add_viewing_angles(self, number_of_viewing_angles, animation_frame_index=0,
5867 self .bank_angle , self .vertical_angle , self .mid_angle )
5968 frame .set_multi_tile_size (self .width , self .length )
6069
70+ frame .set_offset (self .offset_x , self .offset_y )
71+
6172 frame .set_recolorables (self .recolorables )
6273
6374 frame .set_layer (self .layer )
@@ -69,6 +80,15 @@ def add_viewing_angles(self, number_of_viewing_angles, animation_frame_index=0,
6980
7081 frame .animation_frame_index = animation_frame_index + j
7182
83+ frame .set_occlusion_layers (self .occlusion_layers )
84+
85+ if self .occlusion_layers > 0 :
86+ output_indices = []
87+ for k in range (self .occlusion_layers ):
88+ output_indices .append (
89+ start_output_index + k * animation_frames * number_of_viewing_angles + j * number_of_viewing_angles + i )
90+ frame .set_output_indices (output_indices )
91+
7292 if frame .oversized :
7393 output_indices = []
7494 for k in range (frame .width * frame .length ):
@@ -78,8 +98,12 @@ def add_viewing_angles(self, number_of_viewing_angles, animation_frame_index=0,
7898
7999 self .angles .append (frame )
80100
81- self . output_index + = number_of_viewing_angles * \
101+ frames = number_of_viewing_angles * \
82102 animation_frames * self .width * self .length
103+ if self .occlusion_layers > 0 :
104+ frames *= self .occlusion_layers
105+
106+ self .output_index += frames
83107
84108 # Sets the number of recolorable materials
85109 def set_recolorables (self , number_of_recolorables ):
@@ -110,7 +134,7 @@ def set_size(self, width, length):
110134 self .length = length
111135
112136 # Sets the rotation applied to future render angles
113- def set_rotation (self , view_angle , bank_angle , vertical_angle , mid_angle ):
137+ def set_rotation (self , view_angle , bank_angle = 0 , vertical_angle = 0 , mid_angle = 0 ):
114138 self .view_angle = view_angle
115139 self .bank_angle = bank_angle
116140 self .vertical_angle = vertical_angle
@@ -123,6 +147,10 @@ def reset_rotation(self):
123147 self .vertical_angle = 0
124148 self .mid_angle = 0
125149
150+ # Sets the number of occlusion layers
151+ def set_occlusion_layers (self , layers ):
152+ self .occlusion_layers = layers
153+
126154 # Creates a render task with the supplied angles. Clears the buffer for reuse of the task builder
127155 def create_task (self , context ):
128156 task = self .task
@@ -137,6 +165,10 @@ def clear(self):
137165 self .width = 1
138166 self .length = 1
139167
168+ self .set_offset (0 , 0 )
169+
170+ self .set_occlusion_layers (0 )
171+
140172 self .recolorables = 0
141173
142174 self .task = RenderTask (None )
0 commit comments