Exemple #1
0
            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();
                    }
                }
            }
Exemple #2
0
            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();
                    }
                }
            }