public AppraisalRule(Name eventName, ConditionSet conditions = null) { m_id = Guid.NewGuid(); EventName = eventName; Conditions = conditions ?? new ConditionSet(); Desirability = Praiseworthiness = 0; }
public void Test_DP_Math_NoMatch(string contraints, string methodCall) { var me = (Name)"Ana"; var kb = new KB(me); var resultVariable = methodCall.Split('=')[1]; var conditions = contraints.Split(','); IEnumerable <SubstitutionSet> resultingConstraints; var condSet = new ConditionSet(); var cond = Condition.Parse(conditions[0]); // Apply conditions to RPC foreach (var c in conditions) { cond = Condition.Parse(c); condSet = condSet.Add(cond); } resultingConstraints = condSet.Unify(kb, Name.SELF_SYMBOL, null); condSet = new ConditionSet(); cond = Condition.Parse(methodCall); condSet = condSet.Add(cond); var res = condSet.Unify(kb, Name.SELF_SYMBOL, resultingConstraints); Assert.IsEmpty(res); }
//[TestCase(new[] { "Race([y])!=Race([x])", "Strength([x])>=Strength([y])", "[x]!=[y]" }, true, null)] //[TestCase(new[] { "Race([y])!=Race([x])", "Strength([x])>=Strength([y])", "[x]!=[y]", "#[x]=3" }, true, null)] //[TestCase(new[] { "Race([y])!=Race([x])", "Strength([x])>=Strength([y])", "[x]!=[y]", "Count([x])=3", "Count([y])=5" }, true, null)] //[TestCase(new[] { "Count(Like([x]))=0" }, true, null)] public void Test_ConditionSet(string[] conditions, bool result, string[] constraints) { var set = constraints != null?new[] { new SubstitutionSet(constraints.Select(c => new Substitution(c))) }:null; var conds = new ConditionSet(conditions.Select(Condition.Parse)); Assert.AreEqual(result, conds.Unify(_kb, Name.SELF_SYMBOL, set).Any()); }
protected BaseActionDefinition(Name actionTemplate, Name target, IEnumerable <Condition> activationConditions) { var terms = actionTemplate.GetTerms().ToArray(); var name = terms[0]; if (!name.IsPrimitive) { throw new ArgumentException("Invalid Action Template format", nameof(actionTemplate)); } for (int i = 1; i < terms.Length; i++) { if (terms[i].IsComposed) { throw new ArgumentException("Invalid Action Template format", nameof(actionTemplate)); } } if (target.IsComposed) { throw new ArgumentException("Action Definition Target must be a symbol definition", nameof(target)); } Id = Guid.NewGuid(); m_actionTemplate = actionTemplate; Target = target; ActivationConditions = new ConditionSet(activationConditions); }
static void GetDoneVersionDebugSpecs(ConditionSet cs, MutableConditionFlagSet l, DBlockNode m, ResolutionContext ctxt) { if (m.StaticStatements == null || m.StaticStatements.Count == 0) return; foreach(var ss in m.StaticStatements) { if(ss is VersionSpecification) { var vs = (VersionSpecification)ss; if(!_checkForMatchinSpecConditions(m,cs,ss,ctxt)) continue; if(vs.SpecifiedId==null) l.AddVersionCondition(vs.SpecifiedNumber); else l.AddVersionCondition(vs.SpecifiedId); } else if(ss is DebugSpecification) { var ds = (DebugSpecification)ss; if(!_checkForMatchinSpecConditions(m,cs,ss, ctxt)) continue; if (ds.SpecifiedId == null) l.AddDebugCondition(ds.SpecifiedDebugLevel); else l.AddDebugCondition(ds.SpecifiedId); } } }
// TODO Clean up. public IfNode(ITokenReader tokenReader, INodeReader nodeReader, string directiveName = null, Location location = null) : base(directiveName, location) { Conditions = new List<ConditionSet>(); var condition = ExpressionRewriter.Rewrite(tokenReader); var curConditionSet = new ConditionSet(condition); Conditions.Add(curConditionSet); var childrenNodes = nodeReader.TakeWhile((node) => !IsEndDirective(node, DirectiveName)); foreach(var node in childrenNodes) { bool isConditional; var newCondition = GetConditionFromNode(node, out isConditional); if(isConditional) { if(newCondition != null && curConditionSet.Condition == null) { throw new BadDataException("Can't have an elseif node after an else node", node.Location); } curConditionSet = new ConditionSet(newCondition); Conditions.Add(curConditionSet); continue; } curConditionSet.ChildrenNodes.Add(node); } }
public AppraisalRule(Name eventName, ConditionSet conditions = null) { AM.AssertEventNameValidity(eventName); EventName = eventName; Conditions = conditions ?? new ConditionSet(); Desirability = Praiseworthiness = 0; }
public void SetData(AttributionRuleDTO dto) { RuleName = dto.Description; Target = dto.Target; Value = dto.Value; Conditions = new ConditionSet(dto.Conditions); }
public InfluenceRule(InfluenceRuleDTO inf) { Id = Guid.NewGuid(); Rule = new ConditionSet(inf.Rule); Value = inf.Value; Mode = inf.Mode; }
public AppraisalRule(AppraisalRuleDTO appraisalRuleDTO) { EventName = Name.BuildName(appraisalRuleDTO.EventMatchingTemplate); Desirability = appraisalRuleDTO.Desirability; Praiseworthiness = appraisalRuleDTO.Praiseworthiness; Conditions = new ConditionSet(appraisalRuleDTO.Conditions.Select(c => Condition.Parse(c.Condition))); }
/// <summary> /// Clone Constructor /// </summary> /// <param name="other">the reaction to clone</param> public AppraisalRule(AppraisalRule other) { m_id = other.m_id; EventName = other.EventName; Conditions = new ConditionSet(other.Conditions); AppraisalVariables = other.AppraisalVariables; }
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET: //ORIGINAL LINE: @Override public java.util.List<org.camunda.bpm.engine.runtime.ProcessInstance> execute(final org.camunda.bpm.engine.impl.interceptor.CommandContext commandContext) public virtual IList <ProcessInstance> execute(CommandContext commandContext) { //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.camunda.bpm.engine.impl.runtime.ConditionHandler conditionHandler = commandContext.getProcessEngineConfiguration().getConditionHandler(); ConditionHandler conditionHandler = commandContext.ProcessEngineConfiguration.ConditionHandler; //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.camunda.bpm.engine.impl.runtime.ConditionSet conditionSet = new org.camunda.bpm.engine.impl.runtime.ConditionSet(builder); ConditionSet conditionSet = new ConditionSet(builder); IList <ConditionHandlerResult> results = conditionHandler.evaluateStartCondition(commandContext, conditionSet); foreach (ConditionHandlerResult ConditionHandlerResult in results) { checkAuthorization(commandContext, ConditionHandlerResult); } IList <ProcessInstance> processInstances = new List <ProcessInstance>(); foreach (ConditionHandlerResult ConditionHandlerResult in results) { processInstances.Add(instantiateProcess(commandContext, ConditionHandlerResult)); } return(processInstances); }
protected BaseActionDefinition(BaseActionDefinition other) { Id = other.Id; m_actionTemplate = other.m_actionTemplate; Target = other.Target; ActivationConditions = new ConditionSet(other.ActivationConditions); }
public void SetData(AttributionRuleDTO dto) { RuleName = dto.RuleName; Target = (Name)dto.Target; Value = dto.Value; Conditions = new ConditionSet(dto.Conditions); }
/// <summary> /// Deserialization constructor /// </summary> protected BaseActionDefinition(IObjectGraphNode node, object contextData) { var actionTemplate = node["Action"].RebuildObject <Name>(); var terms = actionTemplate.GetTerms().ToArray(); var name = terms[0]; if (!name.IsPrimitive) { throw new Exception("Invalid Action Template format"); } for (int i = 1; i < terms.Length; i++) { if (terms[i].IsComposed) { throw new Exception("Invalid Action Template format"); } } var target = SerializationServices.GetFieldOrDefault(node, "Target", Name.NIL_SYMBOL); if (target.IsComposed) { throw new ArgumentException("Action Definition Target must be a symbol definition", nameof(target)); } Id = Guid.NewGuid(); m_actionTemplate = actionTemplate; Target = target; ActivationConditions = node["Conditions"].RebuildObject <ConditionSet>(); }
/// <summary> /// Clone Constructor /// </summary> /// <param name="other">the reaction to clone</param> public AppraisalRule(AppraisalRule other) { m_id = other.m_id; EventName = other.EventName; Conditions = new ConditionSet(other.Conditions); Desirability = other.Desirability; Praiseworthiness = other.Praiseworthiness; }
public static void EnumConditions(ConditionSet cs, IBlockNode block, ResolutionContext ctxt, CodeLocation caret) { if (block != null && block.NodeRoot != null) { block.NodeRoot.Accept(new ConditionVisitor(cs, ctxt, caret)); } return; }
public ConditionVisitor(ConditionSet cs, ResolutionContext ctxt, CodeLocation caret) { this.caret = caret; this.cs = cs; this.ctxt = ctxt; this.l = new MutableConditionFlagSet(); cs.LocalFlags = l; }
protected void SetFromDTO <T>(T dto) where T : ActionRuleDTO { m_actionTemplate = (Name)dto.Action; Target = (Name)dto.Target; Priority = (Name)dto.Priority; Layer = (Name)dto.Layer; m_activationConditions = new ConditionSet(dto.Conditions); }
public ConditionVisitor(ConditionSet cs,ResolutionContext ctxt, CodeLocation caret) { this.caret = caret; this.cs = cs; this.ctxt = ctxt; this.l = new MutableConditionFlagSet(); cs.LocalFlags = l; }
public void Test_DP_LastEventID_ValueMatch(int eventSet, string context, string lastEventMethodCall, string expectedValue) { var rpc = BuildRPCAsset(); PopulateEventSet(eventSet); foreach (var eve in eventSets[eventSet]) { rpc.Perceive((Name)eve); rpc.Tick++; } // Build the context, parsin the conditions: var resultVariable = lastEventMethodCall.Split('=')[1]; var conditions = context.Split(','); var cond = Condition.Parse("[x] != True"); var condSet = new ConditionSet(); IEnumerable <SubstitutionSet> resultingConstraints = new List <SubstitutionSet>(); if (conditions[0] != "") { condSet = new ConditionSet(); cond = Condition.Parse(conditions[0]); // Apply conditions to RPC foreach (var res in conditions) { cond = Condition.Parse(res); condSet = condSet.Add(cond); } resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null); } condSet = new ConditionSet(); cond = Condition.Parse(lastEventMethodCall); condSet = condSet.Add(cond); var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints); var actualResult = ""; foreach (var sub in result) { if (sub.Contains((Name)resultVariable)) { actualResult = sub[(Name)resultVariable].ToString(); } } Assert.AreEqual(expectedValue, actualResult); }
public void ConditionEvaluatorSet_Test_Universal_Pass(params string[] beliefs) { var kb = new KB((Name)"Me"); foreach (var s in beliefs.Select(b => b.Split(':'))) kb.Tell((Name)s[0], (Name)s[1]); var set = new ConditionSet(LogicalQuantifier.Universal, TEST_CONDITIONS); Assert.True(set.Evaluate(kb, Name.SELF_SYMBOL, null)); }
protected ActionRule(ActionRule other) { Id = other.Id; m_actionTemplate = other.m_actionTemplate; Target = other.Target; Priority = other.Priority; Layer = other.Layer; ActivationConditions = new ConditionSet(other.ActivationConditions); }
public SocialExchange(SocialExchangeDTO s) { Id = Guid.NewGuid(); Name = s.Name; Description = s.Description; Steps = StringToSteps(s.Steps); Target = s.Target; StartingConditions = new ConditionSet(s.StartingConditions); InfluenceRules = s.InfluenceRules.Select(x => new InfluenceRule(x)).ToList(); }
public void Test_DP_Volition_Step_Match(int eventSet, string context, string MethodCall, string variable, string value) { var rpc = BuildRPCAsset3(); var cif = BuildCIFAsset(); cif.RegisterKnowledgeBase(rpc.m_kb); rpc.LoadAssociatedAssets(); PopulateEventSet(eventSet); foreach (var eve in eventSets[eventSet]) { rpc.Perceive((Name)eve); rpc.Tick++; } // conditions var conditions = context.Split(','); IEnumerable <SubstitutionSet> resultingConstraints; var condSet = new ConditionSet(); var cond = Condition.Parse(conditions[0]); // Apply conditions to RPC foreach (var res in conditions) { cond = Condition.Parse(res); condSet = condSet.Add(cond); } resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null); condSet = new ConditionSet(); cond = Condition.Parse(MethodCall); condSet = condSet.Add(cond); var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints); Assert.IsNotEmpty(result); var sub = result.FirstOrDefault().Where(x => x.Variable == (Name)variable); var ret = sub.FirstOrDefault().SubValue; Assert.AreEqual(ret.Value.ToString(), value); }
/// <summary> /// 根据主键更新字段值 /// </summary> /// <param name="updateValues">需要更新的属性名称以及值集合</param> /// <param name="keys">主键,多个主键需按主键名排序</param> /// <returns>更新是否成功</returns> public bool Update(IEnumerable <KeyValuePair <string, object> > updateValues, params object[] keys) { ThrowExceptionIfNoKeys(); ThrowExceptionIfWrongKeys(keys); ConditionSet condition = new ConditionSet(); for (int i = 0; i < keys.Length; i++) { condition.Add(new SimpleCondition(TableDefinition.Keys[i].PropertyName, keys[i])); } return(Update(updateValues, condition) > 0); }
public bool Add(Name name, ConditionSet conditionSet, T value) { ConditionMapper <T> conds; if (!m_dictionary.TryGetValue(name, out conds)) { conds = new ConditionMapper <T>(); m_dictionary[name] = conds; } return(conds.Add(conditionSet, value)); }
private static ConditionSet ReadConditions(YamlNode node) { // Expect a sequence of conditions YamlSequenceNode yamlConditions = GetYamlSequence(node); if (yamlConditions == null) { throw new RulesException($"Expected a list of conditions but conditions does not contain a sequence"); } // Default op for combining conditions is 'AND'. var conditionSet = new ConditionSet() { IsAnd = true, Conditions = new List <Condition>() }; foreach (var child in yamlConditions.Children) { var condition = ReadCondition(child); if (condition.Op == Condition.Oper.And || condition.Op == Condition.Oper.Or) { // Only allow first condition to be 'and' / 'or' (to avoid confusing rules) if (conditionSet.Conditions.Count > 0) { throw new RulesException("Only the first condition can be 'and' / 'or' (break complex conditions into separate rules)"); } conditionSet.IsAnd = (condition.Op == Condition.Oper.And); } else { if (conditionSet.IsAnd && condition.Op == Condition.Oper.Equal) { // Trap 'AND' conditions that can never be true (to detect missing use of 'OR') // e.g. country == UK AND country == US foreach (var prevCondition in conditionSet.Conditions) { if (prevCondition.Id == condition.Id && prevCondition.Op == Condition.Oper.Equal) { throw new RulesException($"Found multiple 'AND ==' conditions for '{condition.Id}' (did you forget to add '- OR')"); } } } conditionSet.Conditions.Add(condition); } } return(conditionSet); }
public void ConditionEvaluatorSet_Test_Universal_Fail(params string[] beliefs) { var kb = new KB((Name)"Me"); foreach (var s in beliefs.Select(b => b.Split(':'))) { kb.Tell((Name)s[0], PrimitiveValue.Parse(s[1])); } var set = new ConditionSet(LogicalQuantifier.Universal, TEST_CONDITIONS); Assert.False(set.Evaluate(kb, Name.SELF_SYMBOL, null)); }
/// <summary> /// Clone Constructor /// </summary> /// <param name="other">the reaction to clone</param> public AppraisalRule(AppraisalRule other) { m_id = other.m_id; EventName = other.EventName; Conditions = new ConditionSet(other.Conditions); Desirability = other.Desirability; Praiseworthiness = other.Praiseworthiness; //DesirabilityForOther = other.DesirabilityForOther; //Like = other.Like; //ReferencedEventName = (Name)other.ReferencedEventName.Clone(); //if (Other != null) // Other = (Name) other.Other.Clone(); }
public void ConditionEvaluatorSet_Test_Universal_Pass(params string[] beliefs) { var kb = new KB((Name)"Me"); foreach (var s in beliefs.Select(b => b.Split(':'))) { kb.Tell((Name)s[0], (Name)s[1]); } var set = new ConditionSet(LogicalQuantifier.Universal, TEST_CONDITIONS); Assert.True(set.Unify(kb, Name.SELF_SYMBOL, null).Any()); }
/// <summary> /// 根据主键更新数据 /// </summary> /// <param name="values">需要更新的属性及数值,key为属性名,value为数值</param> /// <param name="condition">更新的条件</param> /// <returns>更新是否成功</returns> public virtual bool UpdateValues(IEnumerable <KeyValuePair <string, object> > values, params object[] keys) { ThrowExceptionIfNoKeys(); ThrowExceptionIfWrongKeys(keys); ConditionSet condition = new ConditionSet(); int i = 0; foreach (ColumnDefinition column in TableDefinition.Keys) { condition.Add(new SimpleCondition(column.PropertyName, keys[i++])); } return(UpdateValues(values, condition) > 0); }
public void Test_DP_Math_Match(string contraints, string methodCall, float result) { var me = (Name)"Ana"; var kb = new KB(me); var resultVariable = methodCall.Split('=')[1]; var conditions = contraints.Split(','); IEnumerable <SubstitutionSet> resultingConstraints; var condSet = new ConditionSet(); var cond = Condition.Parse(conditions[0]); // Apply conditions to RPC foreach (var c in conditions) { cond = Condition.Parse(c); condSet = condSet.Add(cond); } resultingConstraints = condSet.Unify(kb, Name.SELF_SYMBOL, null); condSet = new ConditionSet(); cond = Condition.Parse(methodCall); condSet = condSet.Add(cond); var res = condSet.Unify(kb, Name.SELF_SYMBOL, resultingConstraints); Assert.IsNotEmpty(res); Name actualResult = Name.BuildName(0); foreach (var v in res.FirstOrDefault()) { if (v.Variable == (Name)resultVariable) { actualResult = v.SubValue.Value; break; } } Assert.AreEqual(actualResult, Name.BuildName(result)); }
/// <summary> /// Clone Constructor /// </summary> /// <param name="other">the reaction to clone</param> public AppraisalRule(AppraisalRule other) { m_id = other.m_id; EventName = other.EventName; if (other.Conditions == null || other.Conditions.Count == 0) { Conditions = new ConditionSet(); } else { Conditions = new ConditionSet(other.Conditions); } AppraisalVariables = other.AppraisalVariables; }
public static void EnumConditions(ConditionSet cs,IStatement stmt, IBlockNode block, ResolutionContext ctxt, CodeLocation caret) { var l = new MutableConditionFlagSet(); cs.LocalFlags = l; // If the current scope is a dedicated block.. (so NOT in a method but probably in an initializer or other static statement) if(block is DBlockNode) { // If so, get all (scoping) declaration conditions in the current block // and add them to the condition list var mblocks = ((DBlockNode)block).GetMetaBlockStack(caret, false, true); if(mblocks!=null && mblocks.Length!=0) foreach(var mb in mblocks) { var amd = mb as AttributeMetaDeclaration; if(amd!=null && amd.AttributeOrCondition!=null && amd.AttributeOrCondition.Length!=0) foreach(var attr in amd.AttributeOrCondition) if(attr is DeclarationCondition) l.Add((DeclarationCondition)attr); } } // Scan up the current statement when e.g. inside a method body while (stmt != null) { if (stmt is StatementCondition) l.Add(((StatementCondition)stmt).Condition); stmt = stmt.Parent; } // Go up the block hierarchy and add all conditions that belong to the respective nodes while (block != null) { var dn = block as DNode; if (dn!=null) { if(dn is DBlockNode) GetDoneVersionDebugSpecs(cs, l, dn as DBlockNode, ctxt); if(dn.Attributes!=null) foreach (var attr in dn.Attributes) if (attr is DeclarationCondition) l.Add(((DeclarationCondition)attr)); } block = block.Parent as IBlockNode; } }
public void Test_DP_Volition_NoMatch(int eventSet, string context, string MethodCall) { var rpc = BuildRPCAsset(); var cif = BuildCIFAsset(); cif.RegisterKnowledgeBase(rpc.m_kb); rpc.LoadAssociatedAssets(); PopulateEventSet(eventSet); foreach (var eve in eventSets[eventSet]) { rpc.Perceive((Name)eve); rpc.Tick++; } // conditions var conditions = context.Split(','); IEnumerable <SubstitutionSet> resultingConstraints; var condSet = new ConditionSet(); var cond = Condition.Parse(conditions[0]); // Apply conditions to RPC foreach (var res in conditions) { cond = Condition.Parse(res); condSet = condSet.Add(cond); } resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null); condSet = new ConditionSet(); cond = Condition.Parse(MethodCall); condSet = condSet.Add(cond); var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints); Assert.IsEmpty(result); }
static void GetDoneVersionDebugSpecs(ConditionSet cs, MutableConditionFlagSet l, DBlockNode m, ResolutionContext ctxt) { if (m.StaticStatements == null || m.StaticStatements.Count == 0) { return; } foreach (var ss in m.StaticStatements) { if (ss is VersionSpecification) { var vs = (VersionSpecification)ss; if (!_checkForMatchinSpecConditions(m, cs, ss, ctxt)) { continue; } if (vs.SpecifiedId == null) { l.AddVersionCondition(vs.SpecifiedNumber); } else { l.AddVersionCondition(vs.SpecifiedId); } } else if (ss is DebugSpecification) { var ds = (DebugSpecification)ss; if (!_checkForMatchinSpecConditions(m, cs, ss, ctxt)) { continue; } if (ds.SpecifiedId == null) { l.AddDebugCondition(ds.SpecifiedDebugLevel); } else { l.AddDebugCondition(ds.SpecifiedId); } } } }
public void Test_DP_EventID_NoMatch(int eventSet, string context, string MethodCall) { var rpc = BuildRPCAsset(); PopulateEventSet(eventSet); foreach (var eve in eventSets[eventSet]) { rpc.Perceive((Name)eve); } // Build the context, parsin the conditions: var conditions = context.Split(','); IEnumerable <SubstitutionSet> resultingConstraints; var condSet = new ConditionSet(); var cond = Condition.Parse(conditions[0]); // Apply conditions to RPC foreach (var res in conditions) { cond = Condition.Parse(res); condSet = condSet.Add(cond); } resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null); condSet = new ConditionSet(); cond = Condition.Parse(MethodCall); condSet = condSet.Add(cond); var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints); /* // what is the id I'm looking for * var wantedSub = cond.ToString().Split('='); * * foreach (var sub in result) * { * if(sub) * }*/ Assert.IsEmpty(result); }
public static void EnumConditions(ConditionSet cs,IBlockNode block, ResolutionContext ctxt, CodeLocation caret) { if(block != null && block.NodeRoot != null) block.NodeRoot.Accept(new ConditionVisitor(cs, ctxt, caret)); return; }
static bool _checkForMatchinSpecConditions(DBlockNode m,ConditionSet cs,StaticStatement ss, ResolutionContext ctxt) { return ss.Attributes == null || cs.IsMatching(ss.Attributes,ctxt); }
public ActionTendency(Name actionName, Name target, ConditionSet activationConditions) : base(actionName, target, activationConditions) { m_priority = DEFAULT_ACTION_PRIORITY; }
/// <summary> /// Creates an FFB effect, stores it at a given slot and starts its playback. /// </summary> /// <param name="data"> /// Parameters of the effect to be created. /// </param> /// <returns> /// Returns true if successful, otherwise returns false. /// </returns> public bool SendFFBEffect(DataClasses.FFBEffectData data) { //Check if the device is properly initialized if (ffbDevice == null) { MessageBox.Show("Device not initialized.", FFBInspector.Properties.Resources.errCap_devError, MessageBoxButtons.OK, MessageBoxIcon.Stop); return false; } //If there is an effect already stored in this slot, remove it StopOneEffect(data.slot); int[] axes = new Int32[actuatorsObjectTypes.Count]; int i = 0; foreach (int objt in actuatorsObjectTypes) { axes[i++] = objt; } //Set effect direction int[] dirs = data.effect.GetDirections(); //Set the general effect parameters up EffectParameters eParams = new EffectParameters(); eParams.Duration = data.effect.duration; eParams.Flags = EffectFlags.Cartesian | EffectFlags.ObjectIds; eParams.Gain = data.effect.gain; eParams.SetAxes(axes, dirs); eParams.StartDelay = data.effect.startDelay; eParams.SamplePeriod = 0; //Use the default sample period; eParams.TriggerButton = data.effect.trigButton; eParams.TriggerRepeatInterval = data.effect.trigRepInterval; //Set the type specific effect parameters up TypeSpecificParameters typeSpec = null; if (data.effect.effectGuid == EffectGuid.ConstantForce) { DataClasses.ConstantEffectTypeData cfEfd = (DataClasses.ConstantEffectTypeData)data.effect; typeSpec = new ConstantForce(); typeSpec.AsConstantForce().Magnitude = cfEfd.magnitude; } else if (data.effect.effectGuid == EffectGuid.RampForce) { DataClasses.RampEffectTypeData rfEfd = (DataClasses.RampEffectTypeData)data.effect; typeSpec = new RampForce(); typeSpec.AsRampForce().Start = rfEfd.start; typeSpec.AsRampForce().End = rfEfd.end; } else if (data.effect.effectGuid == EffectGuid.Sine || data.effect.effectGuid == EffectGuid.Triangle || data.effect.effectGuid == EffectGuid.Square || data.effect.effectGuid == EffectGuid.SawtoothUp || data.effect.effectGuid == EffectGuid.SawtoothDown) { DataClasses.PeriodicEffectTypeData pfEfd = (DataClasses.PeriodicEffectTypeData)data.effect; typeSpec = new PeriodicForce(); typeSpec.AsPeriodicForce().Magnitude = pfEfd.magnitude; typeSpec.AsPeriodicForce().Offset = pfEfd.offset; typeSpec.AsPeriodicForce().Period = pfEfd.period; typeSpec.AsPeriodicForce().Phase = pfEfd.phase; } else if (data.effect.effectGuid == EffectGuid.Friction || data.effect.effectGuid == EffectGuid.Inertia || data.effect.effectGuid == EffectGuid.Damper || data.effect.effectGuid == EffectGuid.Spring) { DataClasses.ConditionEffectTypeData cdEfd = (DataClasses.ConditionEffectTypeData)data.effect; typeSpec = new ConditionSet(); typeSpec.AsConditionSet().Conditions = new Condition[1]; typeSpec.AsConditionSet().Conditions[0].DeadBand = cdEfd.deadBand; typeSpec.AsConditionSet().Conditions[0].Offset = cdEfd.offset; typeSpec.AsConditionSet().Conditions[0].NegativeCoefficient = cdEfd.negCoeff; typeSpec.AsConditionSet().Conditions[0].NegativeSaturation = cdEfd.negSat; typeSpec.AsConditionSet().Conditions[0].PositiveCoefficient = cdEfd.posCoeff; typeSpec.AsConditionSet().Conditions[0].PositiveSaturation = cdEfd.posSat; } eParams.Parameters = typeSpec; //Create an envelope if (data.envelope != null) { Envelope envp = new Envelope(); envp.AttackLevel = data.envelope.attackLevel; envp.AttackTime = data.envelope.attackTime; envp.FadeLevel = data.envelope.fadeLevel; envp.FadeTime = data.envelope.fadeTime; eParams.Envelope = envp; } //Create an effect and add it to the list Effect ef; try { ef = new Effect(ffbDevice, data.effect.effectGuid, eParams); ffbEffects[data.slot] = ef; } catch (Exception ex) { MessageBox.Show("Cannot create effect.\n" + ex.Message + "\n" + ex.Data, FFBInspector.Properties.Resources.errCap_effError, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } return StartFFBEffect(ef); }
public void Test_ConditionSet(string[] conditions, bool result, string[] constraints) { var set = constraints!=null?new[]{new SubstitutionSet(constraints.Select(c => new Substitution(c)))}:null; var conds = new ConditionSet(conditions.Select(Condition.Parse)); Assert.AreEqual(result, conds.Evaluate(_kb, Name.SELF_SYMBOL, set)); }
public Conferral(uint conferralSI, Name actionTemplate, Name target, ConditionSet activationConditions) : base(actionTemplate, target, activationConditions) { ConferralSI = conferralSI; }