示例#1
0
        private void InterestTriggerExit([NotNull] object sender, [NotNull] PhysicsTriggerEventArgs args)
        {
            if (sender == null)
            {
                throw new ArgumentNullException(nameof(sender));
            }
            if (args == null)
            {
                throw new ArgumentNullException(nameof(args));
            }

            GameObject rootObject = args.ColliderThatTriggered.GetRootGameObject();

            NetworkEntityGuid me = ObjectToEntityMapper.ObjectToEntityMap[args.GameObjectTriggered.transform.GetRootGameObject()];

            if (!ObjectToEntityMapper.ObjectToEntityMap.ContainsKey(rootObject))
            {
                if (Logger.IsWarnEnabled)
                {
                    Logger.Warn($"Tried to remove Entity: {rootObject.name} from Entity interest ID: {me} but does not exist. Is not owned.");
                }

                return;
            }

            OnEntityInterestChanged?.Invoke(this, new EntityInterestChangeEventArgs(me, ObjectToEntityMapper.ObjectToEntityMap[rootObject], EntityInterestChangeEventArgs.ChangeType.Exit));
        }
示例#2
0
        private void InterestTriggerEnter([NotNull] object sender, [NotNull] PhysicsTriggerEventArgs args)
        {
            if (sender == null)
            {
                throw new ArgumentNullException(nameof(sender));
            }
            if (args == null)
            {
                throw new ArgumentNullException(nameof(args));
            }

            GameObject rootObject = args.ColliderThatTriggered.GetRootGameObject();

            //TODO: This WON'T work if you parent the object. We NEED a better way to handle looking up the guid from collision
            //TODO: Should entites be interested in themselves?
            //Right now the way this is set up we don't check if this is the entity itself.
            //Which means an entity is always interested in itself, unless manually removed
            //because when it enters the world it will enter its own interest radius
            //This behavior MAY change.
            NetworkEntityGuid me = ObjectToEntityMapper.ObjectToEntityMap[args.GameObjectTriggered.transform.GetRootGameObject()];

            if (!ObjectToEntityMapper.ObjectToEntityMap.ContainsKey(rootObject))
            {
                if (Logger.IsWarnEnabled)
                {
                    Logger.Warn($"Tried to enter Entity: {rootObject.name} to Entity interest ID: {me} but does not exist. Is not owned.");
                }

                return;
            }

            OnEntityInterestChanged?.Invoke(this, new EntityInterestChangeEventArgs(me, ObjectToEntityMapper.ObjectToEntityMap[rootObject], EntityInterestChangeEventArgs.ChangeType.Enter));
        }
示例#3
0
        /// <inheritdoc />
        public void SpoofEnterInterest(EntityInterestChangeEventArgs args)
        {
            if (args.ChangingType != EntityInterestChangeEventArgs.ChangeType.Enter)
            {
                throw new InvalidOperationException($"Called: {nameof(SpoofEnterInterest)} with args: {args.ChangingType}. Must be Enter.");
            }

            OnEntityInterestChanged?.Invoke(this, args);
        }