1 package cz.cuni.amis.pogamut.ut2004.agent.module.sensor;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.HashSet;
6 import java.util.List;
7 import java.util.Set;
8
9 import cz.cuni.amis.pogamut.base3d.worldview.object.ILocated;
10 import cz.cuni.amis.pogamut.ut2004.agent.module.sensomotoric.Weapon;
11 import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemType;
12 import cz.cuni.amis.utils.NullCheck;
13
14 public class WeaponPrefsRange {
15
16 private double maxDistance;
17 private WeaponPrefs owner;
18 private List<WeaponPref> prefs = new ArrayList<WeaponPref>();
19
20 protected WeaponPrefsRange(WeaponPrefs owner, double maxDistance) {
21 NullCheck.check(owner, "owner");
22 this.owner = owner;
23 this.maxDistance = maxDistance;
24 }
25
26 public WeaponPrefsRange(WeaponPrefs owner, WeaponPrefsRange prefs) {
27 NullCheck.check(prefs, "prefs");
28 NullCheck.check(owner, "owner");
29 this.prefs.addAll(prefs.prefs);
30 this.owner = owner;
31 this.maxDistance = prefs.maxDistance;
32 }
33
34
35
36
37
38
39
40
41 public WeaponPrefsRange add(ItemType weapon, boolean usePrimaryMode) {
42 NullCheck.check(weapon, "weapon");
43 this.prefs.add(new WeaponPref(weapon, usePrimaryMode));
44 return this;
45 }
46
47
48
49
50
51
52
53
54
55 public WeaponPrefsRange add(Weapon weapon, boolean usePrimaryMode) {
56 NullCheck.check(weapon, "weapon");
57 add(weapon.getType(), usePrimaryMode);
58 return this;
59 }
60
61
62
63
64
65 public double getMinDistance() {
66 WeaponPrefsRange next = owner.getPreviousRange(this);
67 if (next == null) return 0;
68 return next.getMaxDistance();
69 }
70
71
72
73
74
75 public double getMaxDistance() {
76 return maxDistance;
77 }
78
79
80
81
82
83 public WeaponPref getWeaponPreference() {
84 return getWeaponPreference((ItemType[])null);
85 }
86
87
88
89
90
91
92 public WeaponPref getWeaponPreference(ItemType... forbiddenWeapons) {
93 List<ItemType> forbidden = (forbiddenWeapons == null ? new ArrayList<ItemType>(0) : Arrays.asList(forbiddenWeapons));
94 for (WeaponPref pref : prefs) {
95 if (forbidden.contains(pref.getWeapon())) continue;
96 if (pref.isPrimary()) {
97 if (owner.weaponry.hasPrimaryLoadedWeapon(pref.getWeapon())) return pref;
98 } else {
99 if (owner.weaponry.hasSecondaryLoadedWeapon(pref.getWeapon())) return pref;
100 }
101 }
102 return null;
103 }
104
105
106
107
108
109
110 public WeaponPref getWeaponPreference(WeaponPref... forbiddenWeapons) {
111 Set<WeaponPref> forbidden = new HashSet<WeaponPref>();
112 if (forbiddenWeapons != null) {
113 for (WeaponPref pref : forbiddenWeapons) {
114 forbidden.add(pref);
115 }
116 }
117 for (WeaponPref pref : prefs) {
118 if (forbidden.contains(pref)) continue;
119 if (pref.isPrimary()) {
120 if (owner.weaponry.hasPrimaryLoadedWeapon(pref.getWeapon())) return pref;
121 } else {
122 if (owner.weaponry.hasSecondaryLoadedWeapon(pref.getWeapon())) return pref;
123 }
124 }
125 return null;
126 }
127
128
129
130
131 public void clear() {
132 prefs.clear();
133 }
134
135
136
137
138
139
140 public List<WeaponPref> getPrefs() {
141 return prefs;
142 }
143
144
145
146
147
148 public void setPrefs(List<WeaponPref> prefs) {
149 this.prefs = prefs;
150 }
151
152
153
154
155
156 public WeaponPrefs getOwner() {
157 return owner;
158 }
159
160 }