using System; using System.Collections.Generic; using Gwen.Control; using Gwen.Extensions; namespace Gwen.Anim { public class Animation { protected Base m_Control; //private static List g_AnimationsListed = new List(); // unused private static readonly Dictionary> m_Animations = new Dictionary>(); protected virtual void Think() { } public virtual bool Finished { get { throw new InvalidOperationException("Pure virtual function call"); } } public static void Add(Base control, Animation animation) { animation.m_Control = control; if (!m_Animations.ContainsKey(control)) m_Animations[control] = new List(); m_Animations[control].Add(animation); } public static void Cancel(Base control) { if (m_Animations.ContainsKey(control)) { m_Animations[control].Clear(); m_Animations.Remove(control); } } internal static void GlobalThink() { foreach (KeyValuePair> pair in m_Animations) { var valCopy = pair.Value.FindAll(x =>true); // list copy so foreach won't break when we remove elements foreach (Animation animation in valCopy) { animation.Think(); if (animation.Finished) { pair.Value.Remove(animation); } } } } } }