added WeaponComponent and tests; all pass