Beispiel #1
0
        private void ActivateAttraction(ResourceActivationContext ctxt, LocationAttractionActivator activator, LocationAttraction attraction)
        {
            ActivatedAttractionContext atctxt = null;

            if (!m_atrractionActivators.TryGetValue(attraction.Id, out atctxt))
            {
                atctxt = new ActivatedAttractionContext(attraction);

                m_atrractionActivators.Add(attraction.Id, atctxt);

                var annotation = new MapAnnotation <ActivatedAttractionContext>(attraction.Locations.First(), atctxt);

                AddAnnotation(attraction.Id, annotation);

                var handlers = m_attractionItemHandlers[attraction.Id];

                if (handlers != null)
                {
                    foreach (var handler in handlers)
                    {
                        AttachHandlerToAttraction(atctxt, handler);
                    }
                }
            }

            atctxt.AddActivator(ctxt, activator);
        }
Beispiel #2
0
 public void ActivateAttractions(ResourceActivationContext ctxt, LocationAttractionActivator activator)
 {
     if (activator.AttractionReferences != null)
     {
         foreach (var a in activator.AttractionReferences)
         {
             ActivateAttraction(ctxt, activator, a.Object);
         }
     }
 }
Beispiel #3
0
        public void AddActivator(ResourceActivationContext ctxt, LocationAttractionActivator attraction)
        {
            m_activationContexts[ctxt.InstanceId] = new ActiveResourceContainer <LocationAttractionActivator>(ctxt);

            // Shortcut: just set the range to whatever the most recent attraction has it set to.
            // We can implement a smarter policy at some point, but activating an attraction
            // multiple times doesn't have an obvious use case
            if (attraction.Range != null)
            {
                Range = attraction.Range;
            }
        }
Beispiel #4
0
        public void DeactivateAttractions(ResourceActivationContext ctxt, LocationAttractionActivator activator)
        {
            List <LocationAttraction> toDeactivate = new List <LocationAttraction>();

            lock (m_atrractionActivators)
            {
                if (activator.AttractionReferences != null)
                {
                    foreach (var a in activator.AttractionReferences)
                    {
                        DeactivateAttraction(ctxt, activator, a.Object);
                    }
                }
            }
        }
Beispiel #5
0
        private void DeactivateAttraction(ResourceActivationContext ctxt, LocationAttractionActivator activator, LocationAttraction attraction)
        {
            ActivatedAttractionContext atctxt = null;

            if (m_atrractionActivators.TryGetValue(attraction.Id, out atctxt))
            {
                atctxt.RemoveActivator(ctxt.InstanceId);

                if (!atctxt.IsActive)
                {
                    m_atrractionActivators.Remove(attraction.Id);

                    RemoveAnnotation(atctxt.Attraction.Id);
                }

                var handlers = atctxt.ItemHandlers.ToArray();

                foreach (var handler in handlers)
                {
                    DetachHandlerFromAttraction(atctxt, handler);
                }
            }
        }