Guest User

Untitled

a guest
Nov 16th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.50 KB | None | 0 0
  1. pub struct Block {
  2. id: i8,
  3. block_type:i8,
  4. block_rotation:f64,
  5. block_verts:[[f64;2];3],
  6. block_pos:[f64;2],
  7. side1_id:i8,
  8. side2_id:i8,
  9. side3_id:i8
  10. }
  11.  
  12.  
  13.  
  14. // position, rotation, type
  15. fn get_next_blocks_from_type( block_seq_array: &mut Vec<Block>, return_blocks:&mut Vec<Block>) {
  16. if !block_seq_array.is_empty() {
  17. let mut last_block_id:i8 = 0;
  18. let mut in_block_size:f64 = 1f64;
  19. let mut x:f64 = 0f64;
  20. let mut y:f64 = 0f64;
  21. let mut last_block_rotation:f64 = 0f64;
  22. let mut last_block_type:i8 = 0;
  23. let mut last_block_side1_id:i8 = 0;
  24. let mut last_block_side2_id:i8 = 0;
  25. let mut last_block_side3_id:i8 = 0;
  26.  
  27. if let Some(last_block) = return_blocks.last_mut() {
  28. last_block_id = last_block.id;
  29. in_block_size = 1f64;
  30. x = last_block.block_pos[0];
  31. y = last_block.block_pos[1];
  32. last_block_rotation = last_block.block_rotation;
  33. last_block_type = last_block.block_type;
  34.  
  35. if last_block_rotation == 0f64{
  36. last_block.block_verts = [[in_block_size+x, 0f64+y],[-in_block_size+x, 0f64+y],[0f64+x, in_block_size+y]];
  37. } else if last_block_rotation == 90f64{
  38. last_block.block_verts = [[0f64+x, -in_block_size+y],[0f64+x, in_block_size+y],[-in_block_size+x, 0f64+y]];
  39. }
  40. else if last_block_rotation== 180f64{
  41. last_block.block_verts = [[in_block_size+x, in_block_size+y],[-in_block_size+x, in_block_size+y],[0f64+x, 0f64+y]];
  42. }
  43. else if last_block_rotation == 270f64{
  44. last_block.block_verts = [[-in_block_size+x, -in_block_size+y],[-in_block_size+x, in_block_size+y],[0f64+x, 0f64+y]];
  45. }
  46.  
  47. }
  48. if last_block_id != 0{
  49.  
  50. let mut side1 = false;
  51. let mut side2 = false;
  52. let mut side3 = false;
  53.  
  54. if last_block_type == 1 {
  55. side1=true;
  56. };
  57. if last_block_type == 2 {
  58. side2=true;
  59. };
  60. if last_block_type == 3 {
  61. side3=true;
  62. };
  63. if last_block_type == 4 {
  64. side1=true;
  65. side2=true;
  66. };
  67. if last_block_type == 5 {
  68. side2=true;
  69. side3=true;
  70. };
  71. if last_block_type == 6 {
  72. side1=true;
  73. side3=true;
  74. };
  75. if last_block_type == 7 {
  76. side1=true;
  77. side2=true;
  78. side3=true;
  79. };
  80.  
  81.  
  82. for blc in return_blocks.iter_mut() {
  83. if blc.id == last_block_id {
  84. last_block_side1_id = blc.side1_id;
  85. }
  86. }
  87. if side1 && last_block_side1_id == 0 {
  88. let mut new_block_list:Vec<Block> = block_seq_array.drain(0..1).collect();
  89. if let Some(mut new_block) = new_block_list.pop() {
  90. new_block.block_rotation = last_block_rotation + 180f64;
  91. if new_block.block_rotation >= 360f64 {
  92. new_block.block_rotation = new_block.block_rotation - 360f64;
  93. }
  94. if new_block.block_rotation < 0f64 {
  95. new_block.block_rotation = new_block.block_rotation + 360f64;
  96. }
  97.  
  98. if last_block_rotation == 0f64 {
  99. new_block.block_pos[1] = y - in_block_size;
  100. }
  101. if last_block_rotation == 90f64 {
  102. new_block.block_pos[0] = x + in_block_size;
  103. }
  104. if last_block_rotation == 180f64 {
  105. new_block.block_pos[1] = y + in_block_size;
  106. }
  107. if last_block_rotation == 270f64 {
  108. new_block.block_pos[0] = x - in_block_size;
  109. }
  110. let new_id = new_block.id;
  111. for blc in return_blocks.iter_mut() {
  112. if blc.id == last_block_id {
  113. blc.side1_id = new_id;
  114. }
  115. }
  116. new_block.side1_id = last_block_id;
  117. return_blocks.push(new_block);
  118. get_next_blocks_from_type ( block_seq_array, return_blocks);
  119. }
  120. }
  121.  
  122. for blc in return_blocks.iter_mut() {
  123. if blc.id == last_block_id {
  124. last_block_side2_id = blc.side2_id;
  125. }
  126. }
  127. if side2 && last_block_side2_id == 0 {
  128. let mut new_block_list:Vec<Block> = block_seq_array.drain(0..1).collect();
  129. if let Some(mut new_block) = new_block_list.pop() {
  130. new_block.block_rotation = last_block_rotation + 90f64;
  131. if new_block.block_rotation >= 360f64 {
  132. new_block.block_rotation = new_block.block_rotation - 360f64;
  133. }
  134. if new_block.block_rotation < 0f64 {
  135. new_block.block_rotation = new_block.block_rotation + 360f64;
  136. }
  137.  
  138. if new_block.block_rotation == 0f64 {
  139. new_block.block_pos[1] = y - in_block_size;
  140. }
  141. if new_block.block_rotation == 90f64 {
  142. new_block.block_pos[0] = x + in_block_size;
  143. new_block.block_pos[1] = y + in_block_size;
  144. }
  145. if new_block.block_rotation == 180f64 {
  146. new_block.block_pos[0] = x - in_block_size;
  147. }
  148. let new_id = new_block.id;
  149. for blc in return_blocks.iter_mut() {
  150. if blc.id == last_block_id {
  151. blc.side2_id = new_id;
  152. }
  153. }
  154. new_block.side3_id = last_block_id;
  155. return_blocks.push(new_block);
  156. get_next_blocks_from_type ( block_seq_array, return_blocks);
  157. }
  158. }
  159.  
  160. for blc in return_blocks.iter_mut() {
  161. if blc.id == last_block_id {
  162. last_block_side3_id = blc.side3_id;
  163. }
  164. }
  165. if side3 && last_block_side3_id == 0 {
  166. let mut new_block_list:Vec<Block> = block_seq_array.drain(0..1).collect();
  167. if let Some(mut new_block) = new_block_list.pop() {
  168. new_block.block_rotation = last_block_rotation - 90f64;
  169. if new_block.block_rotation >= 360f64 {
  170. new_block.block_rotation = new_block.block_rotation - 360f64;
  171. }
  172. if new_block.block_rotation < 0f64 {
  173. new_block.block_rotation = new_block.block_rotation + 360f64;
  174. }
  175.  
  176. if new_block.block_rotation == 0f64 {
  177. new_block.block_pos[1] = y - in_block_size;
  178. new_block.block_pos[0] = x - in_block_size;
  179. }
  180. if new_block.block_rotation == 90f64 {
  181. new_block.block_pos[0] = x + in_block_size;
  182. }
  183. if new_block.block_rotation == 270f64 {
  184. new_block.block_pos[1] = y + in_block_size;
  185. }
  186. let new_id = new_block.id;
  187. for blc in return_blocks.iter_mut() {
  188. if blc.id == last_block_id {
  189. blc.side3_id = new_id;
  190. }
  191. }
  192. new_block.side2_id = last_block_id;
  193. return_blocks.push(new_block);
  194. get_next_blocks_from_type ( block_seq_array, return_blocks );
  195. }
  196. }
  197.  
  198. }
  199.  
  200.  
  201. }
  202.  
  203.  
  204. }
  205.  
  206.  
  207. fn main() {
  208.  
  209. let mut return_blocks: Vec<Block> = vec![]; //allBlocks
  210. //vec![5,2,4,5,4,5,2,4,3,8,8,8,4,5,2,4,5,2,4,5,2,4,5,2,2,8,8,8,8,8,8,8,8,1,5,2,4,2,8,8,8,8,8,8];
  211. let mut block_type_seq_array: Vec<i8> = vec![5,2,4,5,4,5,2,4,3,8,8,8,4,5,2,4,5,2,4,5,2,4,5,2,2,8,8,8,8,8,8,8,8,1,5,2,4,2,8,8,8,8,8,8];
  212. let mut block_seq_array: Vec<Block> = vec![];
  213. let mut block_id:i8 = 0;
  214. for i in 0..block_type_seq_array.len() {
  215. block_id = block_id + 1;
  216. let new_block_type: Vec<_> = block_type_seq_array.drain(0..1).collect();
  217. let new_block_type = new_block_type[0] as i8;
  218. block_seq_array.push(
  219. Block {
  220. id: block_id,
  221. block_type:new_block_type,
  222. block_rotation:0f64,
  223. block_verts:[[0f64,0f64],[0f64,0f64],[0f64,0f64]],
  224. block_pos:[0f64,0f64],
  225. side1_id:0,
  226. side2_id:0,
  227. side3_id:0
  228. })
  229. }
  230.  
  231. let mut new_block_list:Vec<Block> = block_seq_array.drain(0..1).collect();
  232. if let Some(new_block) = new_block_list.pop() {
  233. return_blocks.push(new_block);
  234. get_next_blocks_from_type ( &mut block_seq_array, &mut return_blocks );
  235. }
  236.  
  237.  
  238.  
  239. for i in 0..return_blocks.len() {
  240. println!("return - id:{}, type:{}, verts:[[{},{}],[{},{}],[{},{}]], pos:[{},{}], s:{}, s:{}, s:{} , r:{}",
  241. return_blocks[i].id, return_blocks[i].block_type
  242. , return_blocks[i].block_verts[0][0], return_blocks[i].block_verts[0][1]
  243. , return_blocks[i].block_verts[1][0], return_blocks[i].block_verts[1][1]
  244. , return_blocks[i].block_verts[2][0], return_blocks[i].block_verts[2][1]
  245. , return_blocks[i].block_pos[0]
  246. , return_blocks[i].block_pos[1]
  247. , return_blocks[i].side1_id
  248. , return_blocks[i].side2_id
  249. , return_blocks[i].side3_id
  250. , return_blocks[i].block_rotation
  251. );
  252. }
  253.  
  254. for i in 0..block_seq_array.len() {
  255. println!("left over - {}, {}, [[{},{}],[{},{}],[{},{}]]",
  256. block_seq_array[i].id, block_seq_array[i].block_type
  257. , block_seq_array[i].block_verts[0][0], block_seq_array[i].block_verts[0][1]
  258. , block_seq_array[i].block_verts[1][0], block_seq_array[i].block_verts[1][1]
  259. , block_seq_array[i].block_verts[2][0], block_seq_array[i].block_verts[2][1]
  260. );
  261. }
  262.  
  263. }
Add Comment
Please, Sign In to add comment