public void Perform(Scenario scenario, ScenarioFrame frame, SimDescription actor, SimDescription target)
        {
            if (mScenario != null)
            {
                PropagateBuffScenario propagation = mScenario.Clone() as PropagateBuffScenario;

                propagation.SetActors(actor, target);

                scenario.IncStat("Propagate");

                scenario.Add(frame, propagation, ScenarioResult.Start);
            }
        }
        public bool Parse(XmlDbRow row, Origin origin, string prefix, ref string error)
        {
            if ((!string.IsNullOrEmpty(prefix)) && (!Parse(row, origin, null, ref error)))
            {
                return(false);
            }

            if (row.Exists(prefix + "PropagateFullClassName"))
            {
                Type scenarioType = row.GetClassType(prefix + "PropagateFullClassName");
                if (scenarioType == null)
                {
                    error = prefix + "PropagateFullClassName invalid";
                    return(false);
                }

                mScenario = null;
                try
                {
                    mScenario = scenarioType.GetConstructor(new Type[0]).Invoke(new object[0]) as PropagateBuffScenario;
                }
                catch
                { }

                if (mScenario == null)
                {
                    error = prefix + "PropagateFullClassName constructor fail";
                    return(false);
                }

                mScenario.Origin = origin;

                if (!mScenario.Parse(row, prefix, true, ref error))
                {
                    return(false);
                }

                if (!mScenario.PostParse(ref error))
                {
                    return(false);
                }
            }

            return(true);
        }