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); }
public void ActivateAttractions(ResourceActivationContext ctxt, LocationAttractionActivator activator) { if (activator.AttractionReferences != null) { foreach (var a in activator.AttractionReferences) { ActivateAttraction(ctxt, activator, a.Object); } } }
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; } }
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); } } } }
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); } } }