# `QuakeServer.Edicts`
[🔗](https://github.com/jaman/quake_server/blob/v0.1.0/lib/quake_server/edicts.ex#L1)

Entities of a running level: making and freeing them, and their fields by name.

    {server, entity} = QuakeServer.Edicts.alloc(server)
    QuakeServer.Edicts.vector(server, entity, "origin")

A freed entity is reused once half a second has passed, or at once if it was freed in
the first two seconds of the level.

# `alloc`

```elixir
@spec alloc(QuakeServer.Server.t()) :: {QuakeServer.Server.t(), non_neg_integer()}
```

A fresh entity, its fields all zero, and the server holding it.

# `clear`

```elixir
@spec clear(QuakeServer.Server.t(), non_neg_integer()) :: QuakeServer.Server.t()
```

`entity` in use with every field zero except those FTE sets on a new entity
(`ED_Spawned`): `dimension_see`, `dimension_seen`, `dimension_solid` and
`dimension_hit` at `dimension_default` (255 when the program has none), `Version` and
`uniquespawnid` at the entity's version count, `drawflags` 96.

# `clear_flag`

```elixir
@spec clear_flag(QuakeServer.Server.t(), non_neg_integer(), atom()) ::
  QuakeServer.Server.t()
```

Clear flag `flag` on `entity`.

# `flag?`

```elixir
@spec flag?(QuakeServer.Server.t(), non_neg_integer(), atom()) :: boolean()
```

Whether `entity` has flag `flag` set.

# `float`

```elixir
@spec float(QuakeServer.Server.t(), non_neg_integer(), String.t()) :: float()
```

Field `name` of `entity` as a float.

# `free`

```elixir
@spec free(QuakeServer.Server.t(), non_neg_integer()) :: QuakeServer.Server.t()
```

Free `entity`: unlinked, its model, solidity, thinking, `pvsflags` and `SendEntity`
cleared (and `classname` for a QuakeWorld program), and its version counted up so a
client program is sent it whole when it is used again. The world, the players and an
entity already free are not freed; the attempt is printed.

# `free?`

```elixir
@spec free?(QuakeServer.Server.t(), non_neg_integer()) :: boolean()
```

Whether `entity` is free (or was never made).

# `get`

```elixir
@spec get(QuakeServer.Server.t(), non_neg_integer(), String.t()) :: QuakeC.value()
```

Field `name` of `entity`.

# `int`

```elixir
@spec int(QuakeServer.Server.t(), non_neg_integer(), String.t()) :: integer()
```

Field `name` of `entity` as an integer (an entity number or function index).

# `live`

```elixir
@spec live(QuakeServer.Server.t()) :: [non_neg_integer()]
```

The entities in use, world and player included, in order.

# `put`

```elixir
@spec put(
  QuakeServer.Server.t(),
  non_neg_integer(),
  String.t(),
  QuakeC.value() | QuakeC.vector()
) ::
  QuakeServer.Server.t()
```

Set field `name` of `entity`.

# `set_flag`

```elixir
@spec set_flag(QuakeServer.Server.t(), non_neg_integer(), atom()) ::
  QuakeServer.Server.t()
```

Set flag `flag` on `entity`.

# `string`

```elixir
@spec string(QuakeServer.Server.t(), non_neg_integer(), String.t()) :: String.t()
```

String field `name` of `entity` as text.

# `vector`

```elixir
@spec vector(QuakeServer.Server.t(), non_neg_integer(), String.t()) :: QuakeC.vector()
```

Vector field `name` of `entity`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
