public Effect Load(IEffectPartInfo info) { var wpn = (WeaponEffectPartInfo)info; switch (wpn.Action) { case WeaponAction.Shoot: return(entity => { WeaponComponent weaponComponent = entity.GetComponent <WeaponComponent>(); if (weaponComponent != null) { weaponComponent.Shoot(); } }); case WeaponAction.RotateForward: return(entity => { WeaponComponent weaponComponent = entity.GetComponent <WeaponComponent>(); if (weaponComponent != null) { weaponComponent.RotateForward(); } }); case WeaponAction.RotateBackward: return(entity => { WeaponComponent weaponComponent = entity.GetComponent <WeaponComponent>(); if (weaponComponent != null) { weaponComponent.RotateBackward(); } }); case WeaponAction.Change: var weaponName = wpn.ChangeName; return(entity => { WeaponComponent weaponComponent = entity.GetComponent <WeaponComponent>(); if (weaponComponent != null) { weaponComponent.SetWeapon(weaponName); } }); case WeaponAction.Ammo: if (wpn.Ammo == null) { throw new GameRunException("Weapon effect of type Ammo did not specify a value."); } int val = wpn.Ammo.Value; return(entity => { WeaponComponent weaponComponent = entity.GetComponent <WeaponComponent>(); if (weaponComponent != null) { weaponComponent.AddAmmo(val); } }); default: throw new GameRunException("Weapon effect did not specify a valid type"); } }