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