public static ComponentFlag GetNextFlag() { lock (_lockObject) { ComponentFlag flag = _lastFlag; _lastFlag = _lastFlag.Bit != 0x8000_0000 ? new ComponentFlag(_lastFlag.Index, _lastFlag.Bit << 1) : new ComponentFlag(_lastFlag.Index + 1, 1u); return(flag); } }
static World() { _lockObject = new object(); _worldIdDispenser = new IntDispenser(0); Worlds = new World[2]; IsAliveFlag = ComponentFlag.GetNextFlag(); IsEnabledFlag = ComponentFlag.GetNextFlag(); }
private void WithoutEither <T>(StrongBox <ComponentEnum> components) { ComponentFlag flag = ComponentManager <T> .Flag; if (!components.Value[flag]) { components.Value[flag] = true; if (!_withoutEitherFilter[flag]) { _withoutEitherFilter[flag] = true; _nonReactSubscriptions.Add((s, w) => w.Subscribe <ComponentRemovedMessage <T> >(s.CheckedAdd)); _subscriptions.Add((s, w) => w.Subscribe <ComponentAddedMessage <T> >(s.CheckedRemove)); } } }
private EitherBuilder OrWithout <T>() { ComponentFlag flag = ComponentManager <T> .Flag; if (!_eitherFilter[flag]) { _eitherFilter[flag] = true; if (!_builder._withoutEitherFilter[flag]) { _builder._withoutEitherFilter[flag] = true; _builder._nonReactSubscriptions.Add((s, w) => w.Subscribe <ComponentRemovedMessage <T> >(s.CheckedAdd)); _builder._subscriptions.Add((s, w) => w.Subscribe <ComponentAddedMessage <T> >(s.CheckedRemove)); } } return(this); }
static ComponentFlag() { _lockObject = new object(); _lastFlag = new ComponentFlag(0, 1u); }