Skip to content

Commit

Permalink
Support for rendering aircraft
Browse files Browse the repository at this point in the history
- Work on #13
  • Loading branch information
layagyasz committed Mar 7, 2018
1 parent ea7b38b commit a4fa335
Show file tree
Hide file tree
Showing 10 changed files with 367 additions and 38 deletions.
1 change: 1 addition & 0 deletions GameData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ static void Load(string Path, ParseBlock Block)
Block.AddParser<UnitStatus>("unit-status", Parse.EnumBlockParser<UnitStatus>(typeof(UnitStatus)));
Block.AddParser<BlockType>("block-type", Parse.EnumBlockParser<BlockType>(typeof(BlockType)));
Block.AddParser<Front>("front", Parse.EnumBlockParser<Front>(typeof(Front)));
Block.AddParser<Weapon>("weapon", i => new Weapon(i));

Block.AddParser<MovementRule>("movement-rule", i => new MovementRule(i));
Block.AddParser<UnitMovementRules>("unit-movement-rules", i => new UnitMovementRules(i));
Expand Down
50 changes: 31 additions & 19 deletions Model/Unit/UnitConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@ enum Attribute
{
NAME,
UNIT_CLASS,

PRIMARY_WEAPON,
SECONDARY_WEAPON,
WEAPON_CLASS,
ATTACK,
RANGE,

DEFENSE,
MOVEMENT,

Expand Down Expand Up @@ -56,8 +60,7 @@ enum Attribute
DISMOUNT_AS,
CAN_REMOUNT,

CAN_SUPPORT_ARMORED,
UNLIMITED_MOVEMENT
CAN_SUPPORT_ARMORED
};

public readonly string UniqueKey;
Expand Down Expand Up @@ -181,24 +184,28 @@ public UnitConfiguration(ParseBlock Block)
Name = (string)attributes[(int)Attribute.NAME];
UnitClass = (UnitClass)attributes[(int)Attribute.UNIT_CLASS];

WeaponClass weaponClass = (WeaponClass)attributes[(int)Attribute.WEAPON_CLASS];
byte attack = (byte)attributes[(int)Attribute.ATTACK];
byte range = (byte)attributes[(int)Attribute.RANGE];
WeaponClass weaponClass = Parse.DefaultIfNull(attributes[(int)Attribute.WEAPON_CLASS], WeaponClass.NA);
byte attack = Parse.DefaultIfNull(attributes[(int)Attribute.ATTACK], (byte)0);
byte range = Parse.DefaultIfNull(attributes[(int)Attribute.RANGE], (byte)0);
bool canDoubleRange = Parse.DefaultIfNull(attributes[(int)Attribute.CAN_DOUBLE_RANGE], false);

PrimaryWeapon = new Weapon(weaponClass, attack, range, canDoubleRange);
PrimaryWeapon = Parse.DefaultIfNull(
attributes[(int)Attribute.PRIMARY_WEAPON], new Weapon(weaponClass, attack, range, canDoubleRange));
SecondaryWeapon = Parse.DefaultIfNull(attributes[(int)Attribute.SECONDARY_WEAPON], default(Weapon));
Defense = (byte)attributes[(int)Attribute.DEFENSE];
Movement = Parse.DefaultIfNull(attributes[(int)Attribute.MOVEMENT], IsAircraft() ? byte.MaxValue : (byte)0);
IsVehicle = Parse.DefaultIfNull(attributes[(int)Attribute.IS_VEHICLE],
UnitClass == UnitClass.AMPHIBIOUS_VEHICLE
|| UnitClass == UnitClass.ASSAULT_GUN
|| UnitClass == UnitClass.ENGINEER_VEHICLE
|| UnitClass == UnitClass.FLAME_TANK
|| UnitClass == UnitClass.RECONNAISSANCE_VEHICLE
|| UnitClass == UnitClass.SELF_PROPELLED_ARTILLERY
|| UnitClass == UnitClass.TANK
|| UnitClass == UnitClass.TRANSPORT
|| UnitClass == UnitClass.WRECKAGE);
IsVehicle = Parse.DefaultIfNull(
attributes[(int)Attribute.IS_VEHICLE],
IsAircraft()
|| UnitClass == UnitClass.AMPHIBIOUS_VEHICLE
|| UnitClass == UnitClass.ASSAULT_GUN
|| UnitClass == UnitClass.ENGINEER_VEHICLE
|| UnitClass == UnitClass.FLAME_TANK
|| UnitClass == UnitClass.RECONNAISSANCE_VEHICLE
|| UnitClass == UnitClass.SELF_PROPELLED_ARTILLERY
|| UnitClass == UnitClass.TANK
|| UnitClass == UnitClass.TRANSPORT
|| UnitClass == UnitClass.WRECKAGE);
IsArmored = Parse.DefaultIfNull(
attributes[(int)Attribute.IS_ARMORED],
(IsVehicle && UnitClass != UnitClass.TRANSPORT) || UnitClass == UnitClass.FORT);
Expand All @@ -212,9 +219,7 @@ public UnitConfiguration(ParseBlock Block)

MovementRules = Parse.DefaultIfNull(
attributes[(int)Attribute.MOVEMENT_RULES],
IsVehicle
? Block.Get<UnitMovementRules>("unit-movement-rules.default-vehicle")
: Block.Get<UnitMovementRules>("unit-movement-rules.default-non-vehicle"));
Block.Get<UnitMovementRules>(GetDefaultMovementRules()));

IsCarrier = Parse.DefaultIfNull(
attributes[(int)Attribute.IS_CARRIER], IsVehicle || UnitClass == UnitClass.TRANSPORT);
Expand Down Expand Up @@ -271,6 +276,13 @@ public UnitConfiguration(ParseBlock Block)
CanSupportArmored = Parse.DefaultIfNull(attributes[(int)Attribute.CAN_SUPPORT_ARMORED], false);
}

string GetDefaultMovementRules()
{
if (IsAircraft()) return "unit-movement-rules.default-aircraft";
if (IsVehicle) return "unit-movement-rules.default-vehicle";
return "unit-movement-rules.default-non-vehicle";
}

public Weapon GetWeapon(bool Secondary)
{
return Secondary ? SecondaryWeapon : PrimaryWeapon;
Expand Down
4 changes: 2 additions & 2 deletions Modules/Default/Scenarios/Russia1941/Scenario_01.blk
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
var[]:deployment-configurations {
positional-deployment-configuration:_ {
tile-within:matcher {
zone:zone { 0,0 10,0 10,20 0,20 }
zone:zone { 0,0 31,0 31,20 0,20 }
}
unit-group:unit-group {
string:name { Russian Front-Line }
Expand Down Expand Up @@ -137,7 +137,7 @@
var[]:deployment-configurations {
positional-deployment-configuration:_ {
tile-within:matcher {
zone:zone { 0,22 10,22 10,33 0,33 }
zone:zone { 0,22 31,22 31,33 0,33 }
}
unit-group:unit-group {
string:name { Panzer Spearhead }
Expand Down
70 changes: 70 additions & 0 deletions Modules/Default/UnitConfigurationLinks/German.blk
Original file line number Diff line number Diff line change
Expand Up @@ -706,4 +706,74 @@ unit-configuration-link:tiger-ii {
!unit-configuration:unit-configuration { unit-configurations.tiger-ii }

int:introduce-year { 1944 }
}
unit-configuration-link:fw-190 {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.fw-190 }

int:introduce-year { 1941 }
}
unit-configuration-link:ju-87-b-early {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.ju-87-b-early }
}
unit-configuration-link:ju-87-b {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.ju-87-b }
}
unit-configuration-link:ju-87-g {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.ju-87-g }

int:introduce-year { 1943 }
}
unit-configuration-link:hs-123 {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.hs-123 }
}
unit-configuration-link:do-17-z {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.do-17-z }
}
unit-configuration-link:hs-129_r1 {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.hs-129_r1 }

int:introduce-year { 1942 }
}
unit-configuration-link:hs-129_r2-early {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.hs-129_r2-early }

int:introduce-year { 1942 }
}
unit-configuration-link:hs-129_r2 {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.hs-129_r2 }

int:introduce-year { 1944 }
}
unit-configuration-link:hs-129_r2-late {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.hs-129_r2-late }

int:introduce-year { 1945 }
}
unit-configuration-link:ju-88 {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.ju-88 }

int:introduce-year { 1939 }
}
unit-configuration-link:ju-52 {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.ju-52 }
}
unit-configuration-link:glider-german {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.glider-german }
}
unit-configuration-link:spotter-german {
!faction:faction { factions.german }
!unit-configuration:unit-configuration { unit-configurations.spotter-german }
}
179 changes: 179 additions & 0 deletions Modules/Default/UnitConfigurations/German.blk
Original file line number Diff line number Diff line change
Expand Up @@ -1095,4 +1095,183 @@ unit-configuration:tiger-ii {
byte:range { 12 }
byte:defense { 16 }
byte:movement { 6 }
}
unit-configuration:fw-190 {
string:name { FW-190 }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { high-explosive }
byte:attack { 10 }
byte:range { 1 }
}
weapon:secondary-weapon {
weapon-class:weapon-class { anti-armor }
byte:attack { 4 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:ju-87-b-early {
string:name { JU-87 B }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { high-explosive }
byte:attack { 10 }
byte:range { 1 }
}
weapon:secondary-weapon {
weapon-class:weapon-class { infantry }
byte:attack { 1 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:ju-87-b {
string:name { JU-87 B }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { high-explosive }
byte:attack { 20 }
byte:range { 1 }
}
weapon:secondary-weapon {
weapon-class:weapon-class { infantry }
byte:attack { 1 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:ju-87-g {
string:name { JU-87 G }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { anti-armor }
byte:attack { 6 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:hs-123 {
string:name { Hs-123 }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { high-explosive }
byte:attack { 8 }
byte:range { 1 }
}
weapon:secondary-weapon {
weapon-class:weapon-class { infantry }
byte:attack { 2 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:do-17-z {
string:name { Do-17 Z }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { high-explosive }
byte:attack { 10 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:hs-129_r1 {
string:name { Hs-129 (R1) }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { anti-armor }
byte:attack { 2 }
byte:range { 1 }
}
weapon:secondary-weapon {
weapon-class:weapon-class { infantry }
byte:attack { 30 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:hs-129_r2-early {
string:name { Hs-129 (R2) }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { anti-armor }
byte:attack { 3 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:hs-129_r2 {
string:name { Hs-129 (R2) }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { anti-armor }
byte:attack { 6 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:hs-129_r2-late {
string:name { Hs-129 (R2) }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { anti-armor }
byte:attack { 8 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:ju-88 {
string:name { JU-88 }
unit-class:unit-class { fighter-bomber }

weapon:primary-weapon {
weapon-class:weapon-class { high-explosive }
byte:attack { 10 }
byte:range { 1 }
}
byte:defense { 1 }
}
unit-configuration:ju-52 {
string:name { JU-52 }
unit-class:unit-class { observation-aircraft }

weapon:primary-weapon {
weapon-class:weapon-class { na }
byte:attack { 0 }
byte:range { 0 }
}
byte:defense { 1 }
}
unit-configuration:glider-german {
string:name { Glider }
unit-class:unit-class { observation-aircraft }

weapon:primary-weapon {
weapon-class:weapon-class { na }
byte:attack { 0 }
byte:range { 0 }
}
byte:defense { 1 }
}
unit-configuration:spotter-german {
string:name { Spotter }
unit-class:unit-class { observation-aircraft }

weapon:primary-weapon {
weapon-class:weapon-class { na }
byte:attack { 0 }
byte:range { 0 }
}
byte:defense { 1 }
}
1 change: 1 addition & 0 deletions Modules/Default/UnitMovementRules.blk
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
movement-rule:swamp { impassable }
movement-rule:water { impassable }
}
unit-movement-rules:default-aircraft { }
unit-movement-rules:amphibious-transport {
movement-rule:dense-edge { impassable }
movement-rule:frozen { impassable }
Expand Down
Loading

0 comments on commit a4fa335

Please sign in to comment.