Misc fixes

This commit is contained in:
hondacrx
2024-03-13 21:10:14 -04:00
parent 4b9b81c7e2
commit b3d880c115
8 changed files with 31 additions and 18 deletions
@@ -509,6 +509,23 @@ namespace Game.Entities
return new DynamicUpdateFieldSetter<U>(updateField, index);
}
public DynamicUpdateFieldSetter<U> ModifyValue<U>(UpdateFieldArray<DynamicUpdateField<U>> updateField, int index, int dynamicIndex) where U : new()
{
if (dynamicIndex >= updateField[index].Size())
{
// fill with zeros until reaching desired slot
updateField[index]._values.Resize((uint)dynamicIndex + 1);
updateField[index]._updateMask.Resize((uint)(updateField[index]._values.Count + 31) / 32);
}
//MarkChanged(updateField, index);
_changesMask.Set(updateField.Bit);
_changesMask.Set(updateField.FirstElementBit);
updateField[index].MarkChanged(dynamicIndex);
return new DynamicUpdateFieldSetter<U>(updateField[index], dynamicIndex);
}
public void MarkChanged<U>(UpdateField<U> updateField) where U : new()
{
_changesMask.Set(updateField.BlockBit);
+4 -4
View File
@@ -858,10 +858,10 @@ namespace Game.Entities
SetUpdateFieldValue(updateField, (T)(updateField.GetValue() | (dynamic)flag));
}
public void SetUpdateFieldFlagValue<T>(DynamicUpdateField<T> updateField, int index, T flag) where T : new()
public void SetUpdateFieldFlagValue<T>(DynamicUpdateFieldSetter<T> updateField, T flag) where T : new()
{
//static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types");
InsertDynamicUpdateFieldValue(updateField, index, (T)(updateField[index] | (dynamic)flag));
SetUpdateFieldValue(updateField, (T)(updateField.GetValue() | (dynamic)flag));
}
public void SetUpdateFieldFlagValue<T>(ref T value, T flag) where T : new()
@@ -876,10 +876,10 @@ namespace Game.Entities
SetUpdateFieldValue(updateField, (T)(updateField.GetValue() & ~(dynamic)flag));
}
public void RemoveUpdateFieldFlagValue<T>(DynamicUpdateField<T> updateField, int index, T flag) where T : new()
public void RemoveUpdateFieldFlagValue<T>(DynamicUpdateFieldSetter<T> updateField, T flag) where T : new()
{
//static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types");
InsertDynamicUpdateFieldValue(updateField, index, (T)(updateField[index] & ~(dynamic)flag));
SetUpdateFieldValue(updateField, (T)(updateField.GetValue() & ~(dynamic)flag));
}
public void RemoveUpdateFieldFlagValue<T>(ref T value, T flag) where T : new()