Mercurial > repos > IBBoard.WarFoundry.API
annotate API/Objects/Requirement/AbstractRequirement.cs @ 427:3882b533d99d
Re #27: Define unit requirements
* Add ID to requirements so that it isn't just defined in factories
* Make factory use ID from requirement class to avoid duplication and possible mismatch
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 30 Oct 2011 20:31:43 +0000 |
parents | 71fceea2725b |
children | 8f5125740316 |
rev | line source |
---|---|
358
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
1 // This file (AbstractRequirement.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2011 IBBoard |
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 // |
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
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. |
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 using System; |
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
5 |
381
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
6 |
358
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
7 namespace IBBoard.WarFoundry.API.Objects.Requirement |
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
8 { |
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
9 public abstract class AbstractRequirement : IRequirement |
381
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
10 { |
427
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
11 /// <summary> |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
12 /// Gets the ID of the requirement type. This is used by the requirement factories. |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
13 /// It may be, but is not required to be, the name of the class. |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
14 /// </summary> |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
15 /// <value> |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
16 /// The requirement I. |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
17 /// </value> |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
18 public abstract string RequirementID { get; } |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
19 |
381
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
20 public override bool Equals (object obj) |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
21 { |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
22 if (obj == null) |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
23 { |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
24 return false; |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
25 } |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
26 else if (obj.GetType().Equals(this.GetType())) |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
27 { |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
28 return TypeEquals(obj); |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
29 } |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
30 else |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
31 { |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
32 return false; |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
33 } |
358
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
34 } |
381
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
35 |
419 | 36 public override abstract int GetHashCode(); |
37 | |
381
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
38 /// <summary> |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
39 /// Type-specific equality checking - must be implemented by each class |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
40 /// </summary> |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
41 /// <returns> |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
42 /// <code>true</code> if this object is equal to <code>obj</code>, else <code>false</code> |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
43 /// </returns> |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
44 /// <param name='obj'> |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
45 /// The object to compare to |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
46 /// </param> |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
47 protected abstract bool TypeEquals(object obj); |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
48 |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
49 protected virtual bool IsApplicable(WarFoundryObject toObjectAdded, Army toArmy) |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
50 { |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
51 return IsApplicable(toArmy) || IsApplicable(toObjectAdded); |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
52 } |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
53 |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
54 protected virtual bool IsApplicable(Army toArmy) |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
55 { |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
56 return true; |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
57 } |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
58 |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
59 protected virtual bool IsApplicable(WarFoundryObject toObject) |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
60 { |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
61 return true; |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
62 } |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
63 |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
64 |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
65 public string GetValidationMessage(Army army) |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
66 { |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
67 string message = ""; |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
68 |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
69 Validation result = ValidatesArmy(army); |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
70 if (!Validates.AsOkay(result)) |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
71 { |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
72 message = GetValidationFailedMessage(army); |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
73 } |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
74 |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
75 return message; |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
76 } |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
77 |
364
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
78 protected abstract string GetValidationFailedMessage(Army army); |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
79 |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
80 public string GetAllowsAddingMessage(UnitType toAdd, Army toArmy) |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
81 { |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
82 string message = ""; |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
83 |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
84 Validation result = AllowsAdding(toAdd, toArmy); |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
85 if (!Validates.AsOkay(result)) |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
86 { |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
87 message = GetAllowsAddingFailedMessage(toAdd, toArmy); |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
88 } |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
89 |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
90 return message; |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
91 } |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
92 |
381
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
93 protected abstract string GetAllowsAddingFailedMessage(UnitType toAdd, Army toArmy); |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
94 |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
95 public abstract Validation AllowsAdding(WarFoundryObject wfObject, Army toArmy); |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
96 |
30db6669f5cd
* Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents:
364
diff
changeset
|
97 public abstract Validation ValidatesArmy(Army army); |
358
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
98 } |
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
99 } |
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
100 |