diff --git a/registry/registry.go b/registry/registry.go index 07aeae1..eadcaf8 100755 --- a/registry/registry.go +++ b/registry/registry.go @@ -77,6 +77,10 @@ func (r *Registry[T]) New() (*T, Handle) { func (r *Registry[T]) Get(id Handle) *T { + if id.IsZero() { + return nil + } + index := id.Index() assert.T(index < uint64(len(r.Handles)), "Failed to get entity because of invalid entity handle. Handle index is %d while registry only has %d slots. Handle: %+v", index, r.ItemCount, id) diff --git a/registry/registry_handle.go b/registry/registry_handle.go index a67cb79..ad094de 100755 --- a/registry/registry_handle.go +++ b/registry/registry_handle.go @@ -16,6 +16,12 @@ const ( // Byte 1: Generation; Byte 2: Flags; Bytes 3-8: Index type Handle uint64 +// IsZero reports whether the handle is in its default 'zero' state. +// A zero handle is an invalid handle that does NOT point to any entity +func (h Handle) IsZero() bool { + return h == 0 +} + func (h Handle) HasFlag(ef HandleFlag) bool { return h.Flags()&ef > 0 }