Exemple #1
0
 public void AddCapability(ItemCapability capability)
 {
     if (HasCapability(capability.GetType()))
     {
         throw new Exception($"bad duplicate capability of type {capability.GetType().Name} in '{Name}'");
     }
     Capabilities.Add(capability);
     // TODO: Container initialization?
 }
        public override void HandleExtendedParameters(XElement extendedParameters)
        {
            foreach (XElement itemcapability in extendedParameters.Descendants("ItemCapability"))
            {
                IEnumerable <XElement> Verbs      = itemcapability.Descendants("ItemCapabilityVerb");
                IEnumerable <XElement> Parameters = itemcapability.Descendants("ItemCapabilityParameter");
                ItemCapability         cap        = null;
                switch (itemcapability.Attribute("name").Value)
                {
                case "MeleeWeaponCapability":
                    cap = new MeleeWeaponCapability();
                    break;

                case "ToolCapability":
                    cap = new ToolCapability();
                    break;

                case "GunCapability":
                    cap = new GunCapability();
                    break;

                case "MedicalCapability":
                    cap = new MedicalCapability();
                    break;

                case "HealthScanCapability":
                    cap = new HealthScanCapability();
                    break;

                case "BreatherCapability":
                    cap = new BreatherCapability();
                    break;
                }

                if (cap == null)
                {
                    return;
                }
                foreach (XElement verb in Verbs)
                {
                    cap.AddVerb(int.Parse(verb.Attribute("priority").Value),
                                (ItemCapabilityVerb)
                                Enum.Parse(typeof(ItemCapabilityVerb), verb.Attribute("name").Value));
                }
                foreach (XElement parameter in Parameters)
                {
                    string name  = parameter.Attribute("name").Value;
                    Type   type  = EntityTemplate.TranslateType(parameter.Attribute("type").Value);
                    object value = Convert.ChangeType(parameter.Attribute("value").Value, type);

                    var cparam = new ComponentParameter(name, value);
                    cap.SetParameter(cparam);
                }
                AddCapability(cap);
            }
        }
        protected bool HasInternals()
        {
            List <ItemCapability> caps = GetEquipmentCapabilities();
            ItemCapability        cap  = caps.FirstOrDefault(c => c.GetType() == typeof(BreatherCapability));

            if (cap != null)
            {
                return(true);
            }
            return(false);
        }
 public void AddCapability(ItemCapability cap)
 {
     capabilities.Add(cap.capabilityName, cap);
     cap.owner = this;
 }