28 auto insertSorted = []<
size_t N>(std::array<EntityFragment, N>& arr,
uint8& count,
EntityFragment f)
30 auto end = arr.begin() + count;
31 auto where = std::ranges::lower_bound(arr.begin(), end, f);
33 return std::pair(where,
false);
35 std::ranges::move_backward(where, end, end + 1);
38 return std::pair(where,
true);
41 if (!insertSorted(
Ids,
Count, fragment).second)
50 std::ptrdiff_t index = std::ranges::distance(
Updateable.
Ids.begin(), insertedItr);
65 auto insertAtIndex = []<
typename T,
size_t N>(std::array<T, N>& arr,
uint8 size, std::ptrdiff_t i, T value)
67 std::ranges::move_backward(arr.begin() + i, arr.begin() + size - 1, arr.begin() + size);
80 auto removeSorted = []<
size_t N>(std::array<EntityFragment, N>& arr,
uint8& count,
EntityFragment f)
82 auto end = arr.begin() + count;
83 auto where = std::ranges::find(arr.begin(), end, f);
88 return std::pair(where,
true);
90 return std::pair(where,
false);
93 if (!removeSorted(
Ids,
Count, fragment).second)
101 std::ptrdiff_t index = std::ranges::distance(
Updateable.
Ids.begin(), removedItr);
115 auto removeAtIndex = []<
typename T,
size_t N>(std::array<T, N>& arr,
uint8 oldSize, std::ptrdiff_t i, std::type_identity_t<T> value)
117 *std::ranges::move(arr.begin() + i + 1, arr.begin() + oldSize, arr.begin() + i).out = value;
135 std::size_t index =
static_cast<std::size_t
>(fragment);
138 entityFragmentInfo.
IsChanged[index] = isChanged;
bool(*)(void const *rawFragmentData) EntityFragmentIsChangedFn
EntityFragmentInfos const * EntityFragmentInfo
constexpr bool IsUpdateableFragment(EntityFragment frag)
void(*)(void const *rawFragmentData) EntityFragmentClearChangedFn
void(*)(void const *rawFragmentData, UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target, BaseEntity const *baseEntity) EntityFragmentSerializeFn
constexpr bool IsIndirectFragment(EntityFragment frag)
std::array< EntityFragmentSerializeFn, N > SerializeUpdate
std::array< EntityFragmentIsChangedFn, N > IsChanged
std::array< EntityFragmentClearChangedFn, N > ClearChanged
std::array< EntityFragmentSerializeFn, N > SerializeCreate
static void Register(EntityFragment fragment, EntityFragmentSerializeFn serializeCreate, EntityFragmentSerializeFn serializeUpdate, EntityFragmentIsChangedFn isChanged, EntityFragmentClearChangedFn clearChanged)
std::array< EntityFragment, N > Ids
std::array< uint8, N > Masks
std::array< void const *, N > Data
uint8 ContentsChangedMask
UpdateableFragments Updateable
void Remove(EntityFragment fragment)
std::array< EntityFragment, 8 > Ids
void Add(EntityFragment fragment, bool update, void const *data=nullptr)