Exemple #1
0
        public void GetOrderedEffectsByCapabilityTest()
        {
            CapabilityValue target = new CapabilityValue(); // TODO: Initialize to an appropriate value
            CapabilityValue.Effect ef = new CapabilityValue.Effect("Capability1", 1000.0, 10, 1);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability2", 2000.0, 20, 1);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability1", 2000.0, 20, 1);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability1", 500.0, 5, 0.5);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability2", 555.0, 6, 0.6);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability1", 5000.0, 50, 1);
            target.effects.Add(ef);

            //this shows that the function returns the correctly ordered list for Capability1
            List<CapabilityValue.Effect> actual;
            actual = target.GetOrderedEffectsByCapability("Capability1");
            Assert.AreEqual(actual.Count, 4);
            Assert.AreEqual(actual[0].range, 500.0);
            Assert.AreEqual(actual[1].range, 1000.0);
            Assert.AreEqual(actual[0].intensity, 5);
            Assert.AreEqual(actual[1].intensity, 10);

            //this shows that the function returns the correctly ordered list for Capability2
            actual = target.GetOrderedEffectsByCapability("Capability2");
            Assert.AreEqual(actual.Count, 2);
            Assert.AreEqual(actual[0].range, 555.0);
            Assert.AreEqual(actual[1].range, 2000.0);
            Assert.AreEqual(actual[0].intensity, 6);
            Assert.AreEqual(actual[1].intensity, 20);

//this shows that removal from the returned list doesn't affect the structure of the internal list.
            actual.RemoveAt(1); 

            actual = target.effects;
            Assert.AreEqual(actual.Count, 6);
            Assert.AreEqual(actual[0].range, 1000.0);
            Assert.AreEqual(actual[1].range, 2000.0);
            Assert.AreEqual(actual[0].intensity, 10);
            Assert.AreEqual(actual[1].intensity, 20);
        }
Exemple #2
0
 /// <summary>
 /// Sends an event to the server which updates a single object's Capability object.
 /// This is a complicated data structure.  It contains a series of lists, whose values are related.
 /// These lists contain a series of Capabilities, Ranges, Intensities, and Probabilities.  The index of each of these
 /// collections should correlate such that Capabilities[1], Ranges[1], Intensities[1] and Probabilities[1] are all
 /// for a single capability.  As these are TIGHTLY correlated, you cannot skip inserting any values into this collection.
 /// </summary>
 /// <param name="objectID">The object's ID</param>
 /// <param name="capabilities">The value list index relates to the other List collections passed in as parameters.</param>
 /// <param name="ranges">The value list index relates to the other List collections passed in as parameters.</param>
 /// <param name="intensities">The value list index relates to the other List collections passed in as parameters.</param>
 /// <param name="probabilities">The value list index relates to the other List collections passed in as parameters.</param>
 public void UpdateObjectCapabilities(String objectID, List<String> capabilities, List<Double> ranges, List<int> intensities, List<Double> probabilities)
 {
     CapabilityValue dv = new CapabilityValue();
     //construct list of CapName/Range/Intensity/Probability
     if ((capabilities.Count == ranges.Count) && (ranges.Count == intensities.Count) && (intensities.Count == probabilities.Count))
     {
         for (int x = 0; x < capabilities.Count; x++)
         {
             CapabilityValue.Effect ef = new CapabilityValue.Effect(capabilities[x], ranges[x], intensities[x], probabilities[x]);
             dv.effects.Add(ef);
         }
         SendObjectAttributeUpdateEvent(objectID, "Capability", dv);
     }
     else
     {
         Console.WriteLine("In UpdateObjectCapabilities: Lists of Capabilities, Ranges, Intensities and Probabilities have different counts, no event sent");
     }
 }
Exemple #3
0
        public void TestAttackProcessorSimAttackObjectLogic()
        { 
            //SETUP
            CapabilityValue target = new CapabilityValue(); 
            CapabilityValue.Effect ef = new CapabilityValue.Effect("Capability1", 1000.0, 10, 1);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability2", 2000.0, 20, 1);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability1", 2000.0, 20, 1);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability1", 500.0, 5, 0.5);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability2", 555.0, 6, 0.6);
            target.effects.Add(ef);
            ef = new CapabilityValue.Effect("Capability1", 5000.0, 50, 1);
            target.effects.Add(ef);

            double[] ranges = { 200.0, 800.0, 1500.0, 5000.0 };
            int[] expectedIntensities = {  5, 10, 20, 50 };

            //TEST
            for (int x = 0; x < ranges.Length; x++)//double distance in ranges)
            {
                List<CapabilityValue.Effect> capabilities = target.GetOrderedEffectsByCapability("Capability1");
                bool testComplete = false;
                foreach (CapabilityValue.Effect eff in capabilities)
                {
                    if (eff.name == "Capability1" && ranges[x] <= eff.range)
                    {
                        //int r = random.Next(0, 100);
                        //if (r <= ((int)(eff.probability * 100)))
                        //{
                        //appliedIntensity = (int)(eff.intensity * newAttack.percentageApplied / 100);
                        //newAttack.appliedIntensity = appliedIntensity;
                        //targetVul.ApplyEffect(eff.name, appliedIntensity, distance, ref random);

                        //}
                        //break outside of the if because if the probability failed, you dont want a second chance with a different range.
                        Assert.AreEqual(eff.intensity, expectedIntensities[x]);
                        testComplete = true;
                        break; //break because we only want to apply the first range found that satisfied the distance restraint
                    }
                }
                Assert.IsTrue(testComplete, System.String.Format("Incorrect value when testing for range {0}", ranges[x]));
            }
            List<CapabilityValue.Effect> capability = target.GetOrderedEffectsByCapability("Capability1");
            bool testCompleted = false;
            foreach (CapabilityValue.Effect eff in capability)
            {
                if (eff.name == "Capability1" && 6000 <= eff.range)
                {
                    //int r = random.Next(0, 100);
                    //if (r <= ((int)(eff.probability * 100)))
                    //{
                    //appliedIntensity = (int)(eff.intensity * newAttack.percentageApplied / 100);
                    //newAttack.appliedIntensity = appliedIntensity;
                    //targetVul.ApplyEffect(eff.name, appliedIntensity, distance, ref random);

                    //}
                    //break outside of the if because if the probability failed, you dont want a second chance with a different range.
                    
                    testCompleted = true;
                    break; //break because we only want to apply the first range found that satisfied the distance restraint
                }
            }
            Assert.IsFalse(testCompleted, System.String.Format("Incorrect value when testing for range {0}", 6000));
        }
Exemple #4
0
        /*
         * Note: This was not being called. If it is needed later, note that after this revision it
         * is no longer in sycnh with the other 'overload.' best to create a temp variable inside this,
         * convert the input to that variable, and then pass to the other 'overload'
                private static DataValue DefineVulnerabilityValue(ObjectDictionary singletons,
                    ObjectDictionary combo)
                {
                    DataValue returnVulnerabilityValue =
                        (VulnerabilityValue)DataValueFactory.BuildValue("VulnerabilityType");
                    VulnerabilityValue.Transition t;
                    VulnerabilityValue.TransitionCondition tc;

                    string state;
                    int effect;

                    foreach (string capability in singletons.GetKeys())
                    {

                        foreach (TransitionType transType in ((SingletonVulnerabilityType)singletons[capability]).Transitions)
                        {
                            effect = transType.Effect;
                            state = transType.State;
                            tc = new VulnerabilityValue.TransitionCondition(capability, effect);

                            t = new VulnerabilityValue.Transition(state);
                            t.conditions.Add(tc);
                            ((VulnerabilityValue)returnVulnerabilityValue).transitions.Add(t);
                        }
                    }

                    foreach (object c in combo.GetDictionary().Values)
                    {
                        state = ((ComboVulnerabilityType)c).NewState;
                        t = new VulnerabilityValue.Transition(state);
                        foreach (ContributionType cont in ((ComboVulnerabilityType)c).Contributions)
                        {
                            effect = cont.Effect;
                            string capability = cont.Capability;
                            tc = new VulnerabilityValue.TransitionCondition(capability, effect);
                            t.conditions.Add(tc);
                        }
                        ((VulnerabilityValue)returnVulnerabilityValue).transitions.Add(t);
                    }

                    return returnVulnerabilityValue;
                }
        */
        private static DataValue DefineCapabilityValue(Dictionary<string, CapabilityType> capabilityList)
        {
            DataValue returnCapabilityValue = (CapabilityValue)DataValueFactory.BuildValue("CapabilityType");
            CapabilityValue.Effect effect;
            int intensity;
            double probability,
                   range;

            foreach (string name in capabilityList.Keys)
            {
                CapabilityType capability = capabilityList[name];
                capability.ProximityList.Sort();
                foreach (ProximityType prox in capability.ProximityList)
                {
                    range = prox.Range;
                    prox.EffectList.Sort();
                    foreach (EffectType e in prox.EffectList)
                    {
                        intensity = e.Intensity;
                        probability = e.Probability;
                        effect = new CapabilityValue.Effect(name, range, intensity, probability);
                        ((CapabilityValue)returnCapabilityValue).effects.Add(effect);
                    }
                }
            }
            return returnCapabilityValue;
        }