Mercurial > repos > IBBoard.WarFoundry.API
annotate API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirement.cs @ 479:f48c49b53738
Re #410: "N units per M models in parent" requirement
* Add a "context" object that will hold the parent unit (or possibly other stuff)
* Update all method signatures and calls
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Wed, 23 May 2012 20:56:27 +0100 |
parents | 680db2462e34 |
children | e0641e0eb86c |
rev | line source |
---|---|
360
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
1 // This file (UnitRequiresAtLeastNUnitsRequirement.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2011 IBBoard |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
2 // |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
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. |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
4 using System; |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
5 using System.Collections.Generic; |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
6 using IBBoard.WarFoundry.API.Objects; |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
7 |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
8 namespace IBBoard.WarFoundry.API.Objects.Requirement |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
9 { |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
10 /// <summary> |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
11 /// A requirement where a UnitType requires at least N units of one or more unit types before any number of that object can be taken in an army. |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
12 /// </summary> |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
454
diff
changeset
|
13 public class UnitRequiresAtLeastNUnitsRequirement : RequiresAtLeastNUnitsRequirement<UnitType> |
360
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
14 { |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
454
diff
changeset
|
15 public UnitRequiresAtLeastNUnitsRequirement(UnitType requirementOn) : base(requirementOn) |
360
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
16 { |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
17 } |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
18 |
479
f48c49b53738
Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents:
458
diff
changeset
|
19 protected override bool IsApplicable(IWarFoundryObject toObject, Army toArmy, AddingContext context) |
458 | 20 { |
479
f48c49b53738
Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents:
458
diff
changeset
|
21 return IsApplicable(toObject, context) || IsApplicableForRequiredType(toObject, toArmy); |
458 | 22 } |
23 | |
479
f48c49b53738
Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents:
458
diff
changeset
|
24 protected override bool IsApplicable(IWarFoundryObject toObject, AddingContext context) |
458 | 25 { |
26 return AllowedObject.Equals(toObject) || (toObject is Unit && AllowedObject.Equals(((Unit)toObject).UnitType)); | |
360
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
27 } |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
28 |
458 | 29 private bool IsApplicableForRequiredType(IWarFoundryObject toObject, Army toArmy) |
360
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
30 { |
458 | 31 bool isApplicable = false; |
32 UnitType addedType = toObject as UnitType; | |
33 | |
34 if (addedType == null) | |
35 { | |
36 addedType = (toObject is Unit) ? ((Unit)toObject).UnitType : null; | |
37 } | |
38 | |
39 if (addedType != null && toArmy.GetUnitTypeCount(AllowedObject) > 0) | |
40 { | |
41 foreach (UnitCountRequirementData limit in ConstraintTypes) | |
42 { | |
43 if (Arrays.Contains(limit.UnitTypes, addedType)) | |
44 { | |
45 isApplicable = true; | |
46 break; | |
47 } | |
48 } | |
49 } | |
50 | |
51 return isApplicable; | |
360
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
52 } |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
53 |
458 | 54 protected override int GetObjectCountFromArmy(Army toArmy, UnitType obj) |
360
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
55 { |
458 | 56 return toArmy.GetUnitTypeCount(obj); |
360
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
57 } |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
58 } |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
59 } |
777725613edb
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
350
diff
changeset
|
60 |