/// <summary>
        /// Get runtime info according to case-insensitive key.
        /// The key is built from the Entity name (which is unique over a simulation run)
        /// </summary>
        /// <param name="key"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        public bool GetEntityData(string key, out EntityData info)
        {
            if (!EntityDataDict.TryGetValue(key.ToLower(), out info))
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Store or replace EntityData info
        /// </summary>
        /// <param name="key"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        public bool PutEntityData(string key, EntityData info)
        {
            EntityDataDict.AddOrUpdate(key.ToLower(), info, (k, v) => info);

            return(true);
        }