Mercurial > repos > snowblizz-super-API-ideas
annotate api/Objects/Stats.cs @ 68:10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
* Start to restructure loading so that we can use pre-existing objects
* Break unit loading in to methods
Also:
* Pad stats list with nulls because setting capacity doesn't let you set arbitrary indexes
* Add GameSystem property to UnitType
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 25 Apr 2009 19:18:11 +0000 |
parents | e6200220ece3 |
children | 032b174fc17a |
rev | line source |
---|---|
15 | 1 // This file (Stats.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard. |
0 | 2 // |
15 | 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. |
0 | 4 |
5 using System; | |
6 using System.Collections.Generic; | |
7 using IBBoard.Lang; | |
8 | |
9 namespace IBBoard.WarFoundry.API.Objects | |
10 { | |
10 | 11 /// <summary> |
12 /// 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. | |
13 /// </summary> | |
0 | 14 public class Stats |
15 { | |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
16 private List<Stat> stats; |
0 | 17 private SystemStats sysStats; |
18 | |
19 public Stats(SystemStats systemStats) | |
20 { | |
21 sysStats = systemStats; | |
68
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
22 int statCount = sysStats.SlotCount; |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
23 stats = new List<Stat>(statCount); |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
24 |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
25 for (int i = 0; i < statCount; i++) |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
26 { |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
27 stats.Add(null); |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
28 } |
0 | 29 } |
30 | |
31 public Stat[] StatsArray | |
32 { | |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
33 get { return stats.ToArray(); } |
0 | 34 } |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
35 |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
36 public void SetStatValue(string statName, string statValue) |
0 | 37 { |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
38 StatSlot slot = sysStats[statName]; |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
39 |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
40 if (slot!=null) |
0 | 41 { |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
42 int pos = sysStats.GetStatSlotPosition(slot); |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
43 |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
44 if (pos > -1) |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
45 { |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
46 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
|
47 } |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
48 } |
0 | 49 } |
50 | |
51 public Stat this[string id] | |
52 { | |
53 get | |
54 { | |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
55 StatSlot slot = sysStats[id]; |
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
56 int pos = sysStats.GetStatSlotPosition(slot); |
0 | 57 Stat stat = null; |
58 | |
59 try | |
60 { | |
61 stat = this[pos]; | |
62 } | |
63 catch (ArgumentException ex) | |
64 { | |
65 throw new ArgumentException(Translation.GetTranslation("InvalidStatPos", "Invalid statistic ID {0} for stats based on system stats set {1}", new object[]{id, sysStats.ID}), ex); | |
66 } | |
67 | |
68 return stat; | |
69 } | |
70 } | |
71 | |
72 public Stat this[int pos] | |
73 { | |
74 get | |
75 { | |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
76 if (pos < stats.Count && pos >= 0) |
0 | 77 { |
78 return stats[pos]; | |
79 } | |
80 else | |
81 { | |
82 throw new ArgumentException(Translation.GetTranslation("InvalidStatPos", "Invalid statistic position {0} for stats based on system stats set {1}", new object[]{pos, sysStats.ID})); | |
83 } | |
84 } | |
85 } | |
86 | |
87 public int StatCount | |
88 { | |
67
e6200220ece3
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
89 get { return stats.Count; } |
0 | 90 } |
91 } | |
92 } |