private void ChangeObjectCapability(CapabilityValue newCapabilitySet, string objectID) { SimulationObjectProxy obj = objectProxies[objectID]; if (obj == null) return; CapabilityValue previousCapabilityValue = obj["Capability"].GetDataValue() as CapabilityValue; List<string> previousCapabilityNames = previousCapabilityValue.GetCapabilityNames(); List<string> newCapabilityNames = newCapabilitySet.GetCapabilityNames(); List<string> missingCapabilities = new List<string>(); foreach (string capName in previousCapabilityNames) { if (!newCapabilityNames.Contains(capName)) { if (!missingCapabilities.Contains(capName)) { missingCapabilities.Add(capName); } } } foreach (string capName in missingCapabilities) { CancelCapabilityAttack(capName, objectID); } obj["Capability"].SetDataValue(newCapabilitySet); missingCapabilities.Clear(); newCapabilityNames.Clear(); previousCapabilityNames.Clear(); }