Example #1
0
        protected virtual void ChangeRegion(Region from, Region to)
        {
            m_CurrentRegion = to;

            if (m_RegionSubscription != null)
            {
                m_RegionSubscription.Dispose();
            }

            var msg = new EntityRegionChangedMessage(from, to, m_AttachedEntity);

            if (from != null)
            {
                from.EntityRegionChangedChannel.Publish(msg);
            }

            if (to != null)
            {
                to.EntityRegionChangedChannel.Publish(msg);
                m_RegionSubscription = new UnsubscriberCollection(
                    //this.EventChannel.Subscribe(this.Fiber, (m) => newRegion.ItemEventChannel.Publish(m)), // route events through region to interest area

                    // region entered interest area fires message to let item notify interest area about enter
                    to.RequestInfoInRegionChannel.Subscribe(m_EntityFiber, (m) => { m.OnEntityEnter(m_AttachedEntity); }),

                    // region exited interest area fires message to let item notify interest area about exit
                    to.RequestRegionExitInfoChannel.Subscribe(m_EntityFiber, (m) => { m.OnEntityExit(m_AttachedEntity); })
                    );
            }
        }
Example #2
0
        protected void OnEntityRegionChange(EntityRegionChangedMessage message)
        {
            if (message.Entity == m_AttachedEntity)
            {
                return;
            }

            var r0 = m_Regions.Contains(message.From);
            var r1 = m_Regions.Contains(message.To);

            if (r0 && r1)
            {
                // do nothing
            }
            else if (r0) // item exits area
            {
                OnEntityExit(message.Entity);
            }
            else if (r1) // item enters area
            {
                OnEntityEnter(message.Entity);
            }
        }