1 package nl.tudelft.pogamut.ut2004.agent.module.shooting;
2
3 import cz.cuni.amis.pogamut.base3d.worldview.object.ILocated;
4 import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.WeaponPref;
5 import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.WeaponPrefs;
6 import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemType;
7
8 /**
9 * Implementing modulus should provide a simple way to efficiently utilize the
10 * weapons in unreal tournament. This includes using charging weapons and using
11 * combos.
12 *
13 * @author mpkorstanje
14 *
15 */
16 public interface WeaponShooting {
17
18 /**
19 * Shoots a given target in an effective way. The weapon preference is only
20 * used to determine which fire mode is preferred. The weapon use is
21 * determined by {@link WeaponShooting#getWeaponType()}.
22 *
23 * Callers should make sure that the weapon used by Shoot is available and
24 * has sufficient ammo. (Generally through using {@link WeaponPrefs}).
25 *
26 * While a target is given, shooting will try to attack this target however
27 * it may smartly refuse to shoot if the target is no longer visible. It may
28 * not refuse to stop shooting at targets that are out of range, the
29 * {@link WeaponPrefs} module should make this decision.
30 *
31 * @param weaponPref
32 * the preferred firing mode to use. Weapon use is determined by
33 * module.
34 * @param target
35 * to shoot.
36 */
37 public void shoot(WeaponPref weaponPref, ILocated target);
38
39 /**
40 * Stops the shooting. This may result in the discharge when a weapon has
41 * been charging.
42 *
43 * TODO: Modules should handle this gracefully.
44 */
45 public void stopShoot();
46
47 /**
48 * The weapon type this module can do the shooting for.
49 *
50 * @return the weapon type we'll shoot with.
51 */
52 public ItemType getWeaponType();
53
54 /**
55 * True when this module has been activated and is managing a weapon.
56 *
57 * @return true when this module has been activated and is managing a
58 * weapon.
59 */
60 public boolean isActive();
61
62 /**
63 * Should return a self updating object that indicates where the owner wants
64 * to focus.
65 *
66 * @return a focus indicating where the owner wants to focus.
67 */
68 public ILocated getFocus();
69
70
71 }