public void Execute(int index) { var tree = Keys[index]; var enumerator = Operations.GetValuesForKey(tree); while (enumerator.MoveNext()) { var op = enumerator.Current; switch (op.Type) { case TreeOperationType.Insert: { var id = tree.CreateProxy(AABB.FromRadius(op.Pos, op.Radius), op.Agent); var state = new ElementSystemStateComponent { Id = id, PreviousPosition = op.Pos, TreeEntity = op.TreeEntity, TreeRef = tree }; Ecb.AddComponent(index, op.Agent, state); break; } case TreeOperationType.Move: { tree.MoveProxy(op.Id, AABB.FromRadius(op.Pos, op.Radius), op.Displacement); break; } case TreeOperationType.Reinsert: { var id = tree.CreateProxy(AABB.FromRadius(op.Pos, op.Radius), op.Agent); var state = new ElementSystemStateComponent { Id = id, PreviousPosition = op.Pos, TreeEntity = op.TreeEntity, TreeRef = tree }; Ecb.AddComponent(index, op.Agent, state); break; } case TreeOperationType.Destroy: { tree.DestroyProxy(op.Id); break; } default: throw new ArgumentOutOfRangeException(); } } }
public void Execute(int index) { var tree = Keys[index]; var enumerator = Operations.GetValuesForKey(tree); while (enumerator.MoveNext()) { var op = enumerator.Current; switch (op.Type) { case TreeOperationType.Insert: { tree.InsertObstacle(op.Obstacle, op.Ltw, op.Vertices, op.Amount); var state = new ElementSystemStateComponent { TreeRef = tree }; Ecb.AddComponent(index, op.Obstacle, state); break; } case TreeOperationType.BulkInsert: { var offset = 0; for (int i = 0; i < op.Amount; i++) { var amount = op.Amounts[i]; tree.InsertObstacle(op.Obstacle, op.Ltw, op.Vertices + offset, amount); offset += amount; } break; } case TreeOperationType.Destroy: { tree.RemoveObstacle(op.Obstacle); Ecb.RemoveComponent <ElementSystemStateComponent>(index, op.Obstacle); break; } default: throw new ArgumentOutOfRangeException(); } } }