Neodroid  0.2.0
Machine Learning Environment Prototyping Tool
SnakeSpaceFilling.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using UnityEngine;
4 
5 namespace droid.Runtime.Utilities.Misc.Procedural {
6  public static class NeodroidUtilities {
11  public static IEnumerable<Vector3> SnakeSpaceFillingGenerator(int length = 100) {
12  var x = 0;
13  var y = 0;
14  var state = GeneratorState.Expand_x_;
15 
16  var out_vectors = new Vector3[length];
17  if (length == 0) {
18  return out_vectors;
19  }
20 
21  for (var i = 0; i < length; i++) {
22  switch (state) {
23  case GeneratorState.Expand_x_:
24  x += 1;
25  state = GeneratorState.Inc_y_;
26  break;
27 
28  case GeneratorState.Inc_x_:
29  x += 1;
30  if (y == x) {
31  state = GeneratorState.Dec_y_;
32  }
33 
34  break;
35  case GeneratorState.Dec_x_:
36  x -= 1;
37  if (x == 0) {
38  state = GeneratorState.Expand_y_;
39  }
40 
41  break;
42  case GeneratorState.Expand_y_:
43  y += 1;
44  state = GeneratorState.Inc_x_;
45  break;
46  case GeneratorState.Inc_y_:
47  y += 1;
48  if (y == x) {
49  state = GeneratorState.Dec_x_;
50  }
51 
52  break;
53  case GeneratorState.Dec_y_:
54  y -= 1;
55  if (y == 0) {
56  state = GeneratorState.Expand_x_;
57  }
58 
59  break;
60  default: throw new ArgumentOutOfRangeException();
61  }
62 
63  out_vectors[i] = new Vector3(x, 0, y);
64  }
65 
66  return out_vectors;
67  }
68 
71  enum GeneratorState {
72  Expand_x_ = 0,
73  Expand_y_ = 1,
74 
75  Inc_x_ = 2,
76  Dec_x_ = 3,
77 
78  Inc_y_ = 4,
79  Dec_y_ = 5
80  }
81  }
82 }