15
|
1 // This file (ArmyCategory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard.
|
|
2 //
|
|
3 // The file and the library/program it is in are licensed under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING.LGPL for more information and the full license.
|
|
4
|
0
|
5 using System;
|
|
6 using System.Collections.Generic;
|
|
7 using IBBoard.WarFoundry.API.Requirements;
|
|
8
|
|
9 namespace IBBoard.WarFoundry.API.Objects
|
|
10 {
|
|
11 /// <summary>
|
|
12 /// Summary description for ArmyCategory.
|
|
13 /// </summary>
|
|
14 public class ArmyCategory : WarFoundryObject
|
|
15 {
|
|
16 private Category category;
|
|
17 private Army parentArmy;
|
|
18 private double pointsTotal;
|
|
19 private List<Unit> units;
|
|
20 private Dictionary<string, int> unitTypes;
|
|
21 private DoubleValChangedDelegate PointsValueChangedMethod;
|
|
22 public event DoubleValChangedDelegate PointsValueChanged;
|
|
23 public event ObjectAddDelegate UnitAdded;
|
|
24 public event ObjectRemoveDelegate UnitRemoved;
|
|
25 public event FailedUnitRequirementDelegate RequirementsFailed;
|
|
26
|
|
27 public ArmyCategory(Army army, Category cat) : base()
|
|
28 {
|
|
29 parentArmy = army;
|
|
30 category = cat;
|
|
31 cat.NameChanged+=new StringValChangedDelegate(cat_NameChanged);
|
|
32 PointsValueChangedMethod = new DoubleValChangedDelegate(PointsValueChangedHandler);
|
|
33 units = new List<Unit>();
|
|
34 unitTypes = new Dictionary<string,int>();
|
|
35 }
|
|
36
|
|
37 public Category Category
|
|
38 {
|
|
39 get { return category; }
|
|
40 }
|
|
41
|
|
42 public Army ParentArmy
|
|
43 {
|
|
44 get { return parentArmy; }
|
|
45 }
|
|
46
|
|
47 public override string ID
|
|
48 {
|
|
49 get
|
|
50 {
|
|
51 return Category.ID;
|
|
52 }
|
|
53 set
|
|
54 {
|
|
55 Category.ID = value;
|
|
56 }
|
|
57 }
|
|
58
|
|
59 public override string Name
|
|
60 {
|
|
61 get { return category.Name; }
|
|
62 set
|
|
63 {
|
|
64 category.Name = value;
|
|
65 }
|
|
66 }
|
|
67
|
|
68 public void AddUnit(Unit unit)
|
|
69 {
|
|
70 List<FailedUnitRequirement> failedReqs = ParentArmy.CanAddUnit(unit);
|
|
71
|
|
72 units.Add(unit);
|
|
73 unit.Army = ParentArmy;
|
|
74 unit.Category = this;
|
|
75 unit.PointsValueChanged+= PointsValueChangedMethod;
|
|
76 int unitTypeCount;
|
|
77 unitTypes.TryGetValue(unit.UnitType.ID, out unitTypeCount);
|
|
78 unitTypes[unit.UnitType.ID] = (int)unitTypeCount + 1;
|
|
79 TotalPoints+= unit.PointsValue;
|
|
80 OnUnitAdded(unit, failedReqs);
|
|
81 }
|
|
82
|
|
83 public void RemoveUnit(Unit unit)
|
|
84 {
|
|
85 List<FailedUnitRequirement> failedReqs = ParentArmy.CanRemoveUnit(unit);
|
|
86 units.Remove(unit);
|
|
87 unit.Army = null;
|
|
88 unitTypes[unit.UnitType.ID] = ((int)unitTypes[unit.UnitType.ID])-1;
|
|
89 TotalPoints-= unit.PointsValue;
|
|
90 unit.PointsValueChanged-= PointsValueChangedMethod;
|
|
91 OnUnitRemoved(unit, failedReqs);
|
|
92 }
|
|
93
|
|
94 public int GetUnitTypeCount(UnitType unitType)
|
|
95 {
|
|
96 return unitTypes.ContainsKey(unitType.ID) ? (int)unitTypes[unitType.ID] : 0;
|
|
97 }
|
|
98
|
|
99 public Unit[] GetUnits()
|
|
100 {
|
|
101 return units.ToArray();
|
|
102 }
|
|
103
|
|
104 private double TotalPoints
|
|
105 {
|
|
106 get { return pointsTotal; }
|
|
107 set
|
|
108 {
|
|
109 double oldVal = pointsTotal;
|
|
110 pointsTotal = value;
|
|
111
|
|
112 if (oldVal!=pointsTotal)
|
|
113 {
|
|
114 OnPointsValueChanged(oldVal, pointsTotal);
|
|
115 }
|
|
116 }
|
|
117 }
|
|
118
|
|
119 public double PointsTotal
|
|
120 {
|
|
121 get { return TotalPoints; }
|
|
122 }
|
|
123
|
|
124 private void PointsValueChangedHandler(WarFoundryObject obj, double oldVal, double newVal)
|
|
125 {
|
|
126 if (obj is Unit)
|
|
127 {
|
|
128 double diff = newVal - oldVal;
|
|
129 TotalPoints+= diff;
|
|
130 }
|
|
131 }
|
|
132
|
|
133 private void OnUnitAdded(Unit unit, List<FailedUnitRequirement> failedReqs)
|
|
134 {
|
|
135 if (UnitAdded!=null)
|
|
136 {
|
|
137 UnitAdded(unit);
|
|
138 }
|
|
139
|
|
140 if (RequirementsFailed!=null && failedReqs!=null && failedReqs.Count > 0)
|
|
141 {
|
|
142 RequirementsFailed(failedReqs);
|
|
143 }
|
|
144 }
|
|
145
|
|
146 private void OnUnitRemoved(Unit unit, List<FailedUnitRequirement> failedReqs)
|
|
147 {
|
|
148 if (UnitRemoved!=null)
|
|
149 {
|
|
150 UnitRemoved(unit);
|
|
151 }
|
|
152
|
|
153 if (RequirementsFailed!=null && failedReqs!=null && failedReqs.Count>0)
|
|
154 {
|
|
155 RequirementsFailed(failedReqs);
|
|
156 }
|
|
157 }
|
|
158
|
|
159 protected virtual void OnPointsValueChanged(double oldValue, double newValue)
|
|
160 {
|
|
161 if (PointsValueChanged!=null)
|
|
162 {
|
|
163 PointsValueChanged(this, oldValue, newValue);
|
|
164 }
|
|
165 }
|
|
166
|
|
167 protected void cat_NameChanged(WarFoundryObject obj, string oldValue, string newValue)
|
|
168 {
|
|
169 OnNameChanged(oldValue, newValue);
|
|
170 }
|
|
171
|
|
172 public int GetPointsPercentage()
|
|
173 {
|
|
174 return (int)Math.Round((PointsTotal / ParentArmy.MaxPoints) * 100, 0);
|
|
175 }
|
|
176 }
|
|
177 }
|