Beispiel #1
0
        /// <summary>
        /// Subscribes a local visible actor
        /// </summary>
        /// <param name="regionobject">Object to subscribe</param>
        public void Subscribe(MapObject regionobject)
        {
            bool isalwaysVisible = false;

            foreach (RegionVisibility att in regionobject.GetType().GetCustomAttributes(typeof(RegionVisibility), true))
            {
                isalwaysVisible = att.Level == VisibilityLevel.Always;
            }

            Regiontree tree = regionobject.currentzone.Regiontree;

            if (isalwaysVisible == false)
            {
                regionobject.id = ObtainNextUniqueId(regionobject);
                if (regionobject.id > 0)
                {
                    //Calculate new regioncode
                    uint newregion = GetRegionCode(regionobject);
                    tree.Unsubscribe(regionobject, regionobject.region);
                    tree.Subscribe(regionobject, newregion);
                    regionobject.region = newregion;
                }
            }
            else
            {
                tree.AlwaysVisibleSubscribe(regionobject);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Updates the region of the character
        /// </summary>
        public static void UpdateRegion(MapObject regionobject)
        {
            //Calculate new regioncode
            uint oldregion = regionobject.region;
            uint newregion = GetRegionCode(regionobject);

            //If regioncode differs unsubsribe it
            if (newregion != oldregion)
            {
                lock (regionobject)
                {
                    Regiontree tree = regionobject.currentzone.Regiontree;
                    tree.Unsubscribe(regionobject, oldregion);
                    tree.Subscribe(regionobject, newregion);
                    regionobject.region = newregion;
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Unsubscribe a local visible actor
        /// </summary>
        /// <param name="regionobject">Object to unsubscribe</param>
        public bool Unsubscribe(MapObject regionobject)
        {
            bool isalwaysVisible = false;

            foreach (RegionVisibility att in regionobject.GetType().GetCustomAttributes(typeof(RegionVisibility), true))
            {
                isalwaysVisible = att.Level == VisibilityLevel.Always;
            }

            Regiontree tree = regionobject.currentzone.Regiontree;

            if (isalwaysVisible == false)
            {
                uint newregion = GetRegionCode(regionobject);
                bool result    = tree.Unsubscribe(regionobject, regionobject.region);
                regionobject.region = newregion;
                return(result);
            }
            else
            {
                tree.AlwaysVisibleUnsubscribe(regionobject);
                return(true);
            }
        }