Mercurial > repos > IBDev-IBBoard.WarFoundry.API
annotate api/Objects/Stats.cs @ 296:ed5e6d92ecd9
Re #323: WarFoundry.API - SystemStats cannot remove stat
Remove code didn't fully remove stat, this has been fixed and tested
author | Tsudico |
---|---|
date | Sat, 18 Dec 2010 22:34:32 +0000 |
parents | cdda78975be1 |
children |
rev | line source |
---|---|
104
2f3cafb69799
Re #121: Migrate to AGPL license
IBBoard <dev@ibboard.co.uk>
parents:
81
diff
changeset
|
1 // This file (Stats.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2007, 2008, 2009 IBBoard. |
0 | 2 // |
104
2f3cafb69799
Re #121: Migrate to AGPL license
IBBoard <dev@ibboard.co.uk>
parents:
81
diff
changeset
|
3 // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. |
0 | 4 |
5 using System; | |
6 using System.Collections.Generic; | |
7 | |
8 namespace IBBoard.WarFoundry.API.Objects | |
9 { | |
10 | 10 /// <summary> |
11 /// Stats defines the statistic/attribute values for an entity (for example a unit or any of their equipment that has a stat line) paired against a <see cref=" SystemStats"/> stat line definition. | |
12 /// </summary> | |
0 | 13 public class Stats |
14 { | |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
15 private List<Stat> stats; |
0 | 16 private SystemStats sysStats; |
17 | |
18 public Stats(SystemStats systemStats) | |
19 { | |
20 sysStats = systemStats; | |
68
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
21 int statCount = sysStats.SlotCount; |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
22 stats = new List<Stat>(statCount); |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
23 |
252
a54da5a8b5bb
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
228
diff
changeset
|
24 foreach (StatSlot slot in sysStats.StatSlots) |
68
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
25 { |
252
a54da5a8b5bb
Re #268: Restructure stats for re-use
IBBoard <dev@ibboard.co.uk>
parents:
228
diff
changeset
|
26 stats.Add(new Stat(slot, "")); |
68
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
27 } |
0 | 28 } |
29 | |
30 public Stat[] StatsArray | |
31 { | |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
32 get { return stats.ToArray(); } |
0 | 33 } |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
34 |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
35 public void SetStatValue(string statName, string statValue) |
0 | 36 { |
181
8c6f55d289b0
Fixes #200: Stats names should be case-insensitive
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
37 StatSlot slot = sysStats[statName.ToLower()]; |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
38 |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
39 if (slot!=null) |
0 | 40 { |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
41 int pos = sysStats.GetStatSlotPosition(slot); |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
42 |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
43 if (pos > -1) |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
44 { |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
45 stats[pos] = new Stat(slot, statValue); |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
46 } |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
47 } |
0 | 48 } |
49 | |
50 public Stat this[string id] | |
51 { | |
52 get | |
53 { | |
181
8c6f55d289b0
Fixes #200: Stats names should be case-insensitive
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
54 StatSlot slot = sysStats[id.ToLower()]; |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
55 int pos = sysStats.GetStatSlotPosition(slot); |
0 | 56 Stat stat = null; |
57 | |
58 try | |
59 { | |
60 stat = this[pos]; | |
61 } | |
62 catch (ArgumentException ex) | |
63 { | |
228
ece26f6a62f3
Re #223: Use translations within the API
IBBoard <dev@ibboard.co.uk>
parents:
181
diff
changeset
|
64 throw new ArgumentException(String.Format("Invalid statistic ID {0} for stats based on system stats set {1}", new object[]{id, sysStats.ID}), ex); |
0 | 65 } |
66 | |
67 return stat; | |
68 } | |
69 } | |
70 | |
71 public Stat this[int pos] | |
72 { | |
73 get | |
74 { | |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
75 if (pos < stats.Count && pos >= 0) |
0 | 76 { |
77 return stats[pos]; | |
78 } | |
79 else | |
80 { | |
228
ece26f6a62f3
Re #223: Use translations within the API
IBBoard <dev@ibboard.co.uk>
parents:
181
diff
changeset
|
81 throw new ArgumentException(String.Format("Invalid statistic position {0} for stats based on system stats set {1}", new object[]{pos, sysStats.ID})); |
0 | 82 } |
83 } | |
84 } | |
81
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
68
diff
changeset
|
85 |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
68
diff
changeset
|
86 public string GetStatValue(string id) |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
68
diff
changeset
|
87 { |
181
8c6f55d289b0
Fixes #200: Stats names should be case-insensitive
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
88 return this[id.ToLower()].SlotValueString; |
81
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
68
diff
changeset
|
89 } |
0 | 90 |
91 public int StatCount | |
92 { | |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
93 get { return stats.Count; } |
0 | 94 } |
131
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
95 |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
96 public string StatsID |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
97 { |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
98 get |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
99 { |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
100 return sysStats.ID; |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
101 } |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
102 } |
0 | 103 } |
104 } |