From 647e65ceb2ec5bcff0ace458088f73f49c9afae9 Mon Sep 17 00:00:00 2001 From: layagyasz Date: Wed, 6 Jun 2018 18:03:57 -0600 Subject: [PATCH] More work on #52 - Scatter indirect fire --- .../ScenarioBuilderStateController.cs | 2 +- .../Orders/Attack/IndirectFireAttackOrder.cs | 38 +++++++++++++++-- Model/Sight/FogOfWarUnitTracker.cs | 39 +++++++++++++++--- Model/Sight/SightFinder.cs | 2 + Model/Unit/Unit.cs | 1 + Model/Unit/UnitConfiguration.cs | 2 +- Modules/Default/MatchSettings.blk | 16 +++++++ Modules/Default/NameGenerators.blk | 2 + Modules/Default/NameGenerators/Chinese.mkvc | Bin 0 -> 7027 bytes .../Default/NameGenerators/NorthAfrican.mkvc | Bin 0 -> 8921 bytes .../Default/Scenarios/Default/Scenario_00.blk | 4 +- .../Theme/Components/ScenarioBuilder.blk | 6 +++ Modules/Default/Theme/Components/TextPane.blk | 2 +- .../UnitConfigurationLinks/Hungarian.blk | 4 -- PanzerBlitz.csproj | 10 ++++- View/Edit/NewMapPane.cs | 5 ++- View/ScenarioBuilder/ScenarioBuilderScreen.cs | 8 +++- 17 files changed, 119 insertions(+), 22 deletions(-) create mode 100644 Modules/Default/NameGenerators/Chinese.mkvc create mode 100644 Modules/Default/NameGenerators/NorthAfrican.mkvc diff --git a/Controller/ScenarioBuilder/ScenarioBuilderStateController.cs b/Controller/ScenarioBuilder/ScenarioBuilderStateController.cs index 0f15e2f..e194e0a 100644 --- a/Controller/ScenarioBuilder/ScenarioBuilderStateController.cs +++ b/Controller/ScenarioBuilder/ScenarioBuilderStateController.cs @@ -16,7 +16,7 @@ public override Pod SetupState(ProgramContext ProgramContext, ProgramStateContex { var defaultParameters = new ScenarioParameters( - 1939, GameData.MatchSettings.Values.First(), 8, new Coordinate(33, 33), true); + 1939, GameData.MatchSettings.Values.First(), 8, new Coordinate(33, 33), false); _ScenarioBuilder = new ScenarioBuilder(defaultParameters); var screen = new ScenarioBuilderScreen(ProgramContext.ScreenResolution, _ScenarioBuilder); diff --git a/Model/Orders/Attack/IndirectFireAttackOrder.cs b/Model/Orders/Attack/IndirectFireAttackOrder.cs index a8647b3..3d290ba 100644 --- a/Model/Orders/Attack/IndirectFireAttackOrder.cs +++ b/Model/Orders/Attack/IndirectFireAttackOrder.cs @@ -33,6 +33,8 @@ public override bool AllowNoFurtherAttacks } bool _Targeted; + byte _ScatterRoll = 255; + byte _ScatterDirectionRoll = 255; public IndirectFireAttackOrder(Army Army, Tile TargetTile) : base(Army, TargetTile) { } @@ -48,6 +50,8 @@ public IndirectFireAttackOrder(SerializationInputStream Stream, List { _Attackers = Stream.ReadEnumerable(i => new IndirectFireSingleAttackOrder(Stream, Objects)).ToList(); _Targeted = Stream.ReadBoolean(); + _ScatterRoll = Stream.ReadByte(); + _ScatterDirectionRoll = Stream.ReadByte(); } public override void Serialize(SerializationOutputStream Stream) @@ -55,6 +59,8 @@ public override void Serialize(SerializationOutputStream Stream) base.Serialize(Stream); Stream.Write(_Attackers); Stream.Write(_Targeted); + Stream.Write(_ScatterRoll); + Stream.Write(_ScatterDirectionRoll); } public override bool MatchesTurnComponent(TurnComponent TurnComponent) @@ -62,24 +68,29 @@ public override bool MatchesTurnComponent(TurnComponent TurnComponent) return TurnComponent == TurnComponent.ATTACK; } - protected override void Recalculate() + void Recalculate(Tile Tile) { _OddsCalculations.Clear(); if (_Attackers.Count == 0) return; var defenders = - TargetTile.Units.Where(i => i.CanBeAttackedBy(Army, AttackMethod) == OrderInvalidReason.NONE).ToList(); + Tile.Units.Where(i => i.CanBeAttackedBy(Army, AttackMethod) == OrderInvalidReason.NONE).ToList(); if (defenders.Count == 0) return; foreach (var defender in defenders) { _OddsCalculations.Add( - new OddsCalculation(_Attackers, new Unit[] { defender }, AttackMethod, TargetTile)); + new OddsCalculation(_Attackers, new Unit[] { defender }, AttackMethod, Tile)); } // Sync TreatStackAsArmored foreach (OddsCalculation odds in _OddsCalculations) odds.AttackFactorCalculations.ForEach(i => i.Item1.TreatStackAsArmored = odds.StackArmored); } + protected override void Recalculate() + { + Recalculate(TargetTile); + } + public override Order CloneIfStateful() { return new IndirectFireAttackOrder(this); @@ -95,7 +106,26 @@ public override OrderStatus Execute(Random Random) { Recalculate(); - if (_Targeted) return DoExecute(Random); + if (_Targeted) + { + Tile tile = TargetTile; + var v = Validate(); + if (v == OrderInvalidReason.ATTACK_NO_SPOTTER) + { + if (_ScatterRoll == 255) _ScatterRoll = (byte)Random.Next(0, 6); + + if (_ScatterRoll == 5) tile = null; + else if (_ScatterRoll > 1) + { + if (_ScatterDirectionRoll == 255) _ScatterDirectionRoll = (byte)Random.Next(0, 6); + tile = TargetTile.NeighborTiles[_ScatterDirectionRoll]; + } + Recalculate(tile); + return DoExecute(Random); + } + if (v != OrderInvalidReason.NONE) return OrderStatus.ILLEGAL; + return DoExecute(Random); + } if (Validate() == OrderInvalidReason.NONE) { diff --git a/Model/Sight/FogOfWarUnitTracker.cs b/Model/Sight/FogOfWarUnitTracker.cs index bf6450a..a3b6427 100644 --- a/Model/Sight/FogOfWarUnitTracker.cs +++ b/Model/Sight/FogOfWarUnitTracker.cs @@ -30,7 +30,7 @@ public List> Update(SightFinder SightFinder, Unit Un } return new List> { - new Tuple(Unit, MergeVisibility(Unit, SightFinder.IsSighted(Unit), false)) + new Tuple(Unit, MergeVisibility(Unit, SightFinder.IsSighted(Unit))) }; } @@ -59,9 +59,22 @@ public List> ComputeDelta( new Tuple(Unit, new UnitVisibility(true, Movement.Tile)) }; } + bool visible = SightFinder.IsSighted(Unit); + Tile lastSeen = null; + if (Movement.Path != null) + { + for (int i = Movement.Path.Count - 2; i >= 0; --i) + { + if (SightFinder.IsSighted(Unit, Movement.Path[i])) + { + lastSeen = Movement.Path[i + 1]; + break; + } + } + } return new List> { - new Tuple(Unit, MergeVisibility(Unit, SightFinder.IsSighted(Unit), false)) + new Tuple(Unit, MergeVisibility(Unit, visible, OverrideLastSeen: lastSeen)) }; } @@ -75,19 +88,35 @@ public List> ComputeDelta( { deltas.Add( new Tuple( - unit, MergeVisibility(unit, SightFinder.IsSighted(unit, tileDelta.Item2), false))); + unit, MergeVisibility(unit, SightFinder.IsSighted(unit, tileDelta.Item2)))); + } + if (tileDelta.Item2 == TileSightLevel.HARD_SPOTTED + || (tileDelta.Item2 != TileSightLevel.NONE + && !tileDelta.Item1.Rules.Concealing + && !tileDelta.Item1.Rules.LowProfileConcealing)) + { + foreach (var unit in _UnitVisibilities.Where( + i => i.Value.LastSeen == tileDelta.Item1 && i.Key.Position != i.Value.LastSeen).ToList()) + { + if (tileDelta.Item2 == TileSightLevel.HARD_SPOTTED + || !SightFinder.TileConceals(unit.Key, tileDelta.Item1)) + { + deltas.Add( + new Tuple(unit.Key, MergeVisibility(unit.Key, false, true))); + } + } } } return deltas; } - UnitVisibility MergeVisibility(Unit Unit, bool Visible, bool Remove) + UnitVisibility MergeVisibility(Unit Unit, bool Visible, bool Remove = false, Tile OverrideLastSeen = null) { UnitVisibility visibility; _UnitVisibilities.TryGetValue(Unit, out visibility); if (Visible) visibility = new UnitVisibility(Visible, Unit.Position); - else visibility = new UnitVisibility(Visible, Remove ? null : visibility.LastSeen); + else visibility = new UnitVisibility(Visible, Remove ? null : (OverrideLastSeen ?? visibility.LastSeen)); _UnitVisibilities[Unit] = visibility; return visibility; diff --git a/Model/Sight/SightFinder.cs b/Model/Sight/SightFinder.cs index b4e6ace..eea5a2c 100644 --- a/Model/Sight/SightFinder.cs +++ b/Model/Sight/SightFinder.cs @@ -13,7 +13,9 @@ public interface SightFinder bool HasTileSightLevel(Tile Tile, TileSightLevel Level); UnitVisibility GetUnitVisibility(Unit Unit); + bool TileConceals(Unit Unit, Tile Tile); bool IsSighted(Unit Unit, TileSightLevel Level); + bool IsSighted(Unit Unit, Tile Tile); bool IsSighted(Unit Unit); } } diff --git a/Model/Unit/Unit.cs b/Model/Unit/Unit.cs index aaa5ed9..aeec867 100644 --- a/Model/Unit/Unit.cs +++ b/Model/Unit/Unit.cs @@ -87,6 +87,7 @@ public void UseAmmunition(bool Secondary) public OrderInvalidReason CanBeAttackedBy(Army Army, AttackMethod AttackMethod, bool IgnoreConcealment = false) { + IgnoreConcealment |= AttackMethod == AttackMethod.INDIRECT_FIRE; if (Position == null) return OrderInvalidReason.ILLEGAL; if (AttackMethod == AttackMethod.MINEFIELD) diff --git a/Model/Unit/UnitConfiguration.cs b/Model/Unit/UnitConfiguration.cs index f56bf3a..5640f33 100644 --- a/Model/Unit/UnitConfiguration.cs +++ b/Model/Unit/UnitConfiguration.cs @@ -293,7 +293,7 @@ public UnitConfiguration(ParseBlock Block) ? 30 : Math.Max(GetAdjustedRange(true), GetAdjustedRange(false))) : 0)); - SightRange = IsEmplaceable() ? (byte)0 : Math.Max((byte)20, GetAdjustedRange(false)); + SightRange = IsEmplaceable() ? (byte)0 : Math.Max((byte)20, SpotRange); DismountAs = (UnitConfiguration)attributes[(int)Attribute.DISMOUNT_AS]; CanRemount = (bool)(attributes[(int)Attribute.CAN_REMOUNT] ?? DismountAs != null); diff --git a/Modules/Default/MatchSettings.blk b/Modules/Default/MatchSettings.blk index 2fd5c23..ee6ba82 100644 --- a/Modules/Default/MatchSettings.blk +++ b/Modules/Default/MatchSettings.blk @@ -1,4 +1,12 @@ match-setting<>:match-settings { + match-setting:china-summer { + !var:environment { environments.summer-grassland } + front:front { pacific } + map-generator-configuration:map-generator { + !var:name-generator { name-generators.chinese } + !var:terrain-generator { terrain-generators.default } + } + } match-setting:france-summer { !var:environment { environments.summer-grassland } front:front { west } @@ -31,6 +39,14 @@ !var:terrain-generator { terrain-generators.default } } } + match-setting:north-africa { + !var:environment { environments.desert } + front:front { west } + map-generator-configuration:map-generator { + !var:name-generator { name-generators.north-african } + !var:terrain-generator { terrain-generators.default } + } + } match-setting:poland-summer { !var:environment { environments.summer-steppe } front:front { east } diff --git a/Modules/Default/NameGenerators.blk b/Modules/Default/NameGenerators.blk index 9c82d5b..ecb06e8 100644 --- a/Modules/Default/NameGenerators.blk +++ b/Modules/Default/NameGenerators.blk @@ -1,8 +1,10 @@ name-generator<>:name-generators { + name-generator:chinese { Chinese.mkvc } name-generator:french { French.mkvc } name-generator:german { German.mkvc } name-generator:hungarian { Hungarian.mkvc } name-generator:japanese { Japanese.mkvc } + name-generator:north-african { NorthAfrican.mkvc } name-generator:polish { Polish.mkvc } name-generator:russian { Russian.mkvc } } \ No newline at end of file diff --git a/Modules/Default/NameGenerators/Chinese.mkvc b/Modules/Default/NameGenerators/Chinese.mkvc new file mode 100644 index 0000000000000000000000000000000000000000..af4f915464050d91f8d210122bf12cbd7c8f507b GIT binary patch literal 7027 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 - + + PreserveNewest + @@ -2375,6 +2377,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + \ No newline at end of file diff --git a/View/Edit/NewMapPane.cs b/View/Edit/NewMapPane.cs index 0bf6410..803f2ca 100644 --- a/View/Edit/NewMapPane.cs +++ b/View/Edit/NewMapPane.cs @@ -15,7 +15,8 @@ public class NewMapPane : Pane readonly SingleColumnTable _Display = new SingleColumnTable("new-map-display"); readonly TextInput _HeightInput = new TextInput("new-map-text-input"); readonly TextInput _WidthInput = new TextInput("new-map-text-input"); - readonly Checkbox _GenerateRandomCheckbox = new Checkbox("new-map-checkbox") { DisplayedString = "Generate Random" }; + readonly Checkbox _GenerateRandomCheckbox = + new Checkbox("new-map-checkbox") { DisplayedString = "Generate Random" }; readonly Button _Error = new Button("new-map-error"); readonly Button _CancelButton = new Button("small-button") { DisplayedString = "Cancel" }; readonly Button _CreateButton = new Button("small-button") { DisplayedString = "Create" }; @@ -70,7 +71,7 @@ void HandleCreateClicked(object Sender, EventArgs E) if (_GenerateRandomCheckbox.Value) configuration = new RandomMapConfiguration( - width, height, GameData.MatchSettings["japan-summer"].MapGenerator); + width, height, GameData.MatchSettings["china-summer"].MapGenerator); else configuration = new BlankMapConfiguration(width, height); if (OnCreate != null) OnCreate(this, new ValuedEventArgs(configuration)); diff --git a/View/ScenarioBuilder/ScenarioBuilderScreen.cs b/View/ScenarioBuilder/ScenarioBuilderScreen.cs index 82c193d..5bde795 100644 --- a/View/ScenarioBuilder/ScenarioBuilderScreen.cs +++ b/View/ScenarioBuilder/ScenarioBuilderScreen.cs @@ -27,6 +27,8 @@ public class ScenarioBuilderScreen : ScreenBase Select _YearSelect = new Select("scenario-builder-parameters-section-select"); Select _SettingSelect = new Select("scenario-builder-parameters-section-select"); Select _TurnsSelect = new Select("scenario-builder-parameters-section-select"); + Checkbox _FogOfWarCheckbox = + new Checkbox("scenario-builder-parameters-section-checkbox") { DisplayedString = "Enable" }; TextInput _MapWidthInput = new TextInput("scenario-builder-parameters-section-text-input"); TextInput _MapHeightInput = new TextInput("scenario-builder-parameters-section-text-input"); @@ -76,6 +78,10 @@ public ScenarioBuilderScreen(Vector2f WindowSize, ScenarioBuilder ScenarioBuilde }); _TurnsSelect.SetValue(i => i.Value == ScenarioBuilder.Parameters.Turns); + MakeSection("Fog of War", _FogOfWarCheckbox, _LeftDisplay); + _FogOfWarCheckbox.OnChange += HandleParametersChanged; + _FogOfWarCheckbox.Value = ScenarioBuilder.Parameters.FogOfWar; + MakeSection("Map Width", _MapWidthInput, _LeftDisplay); _MapWidthInput.OnChange += HandleParametersChanged; _MapWidthInput.Value = ScenarioBuilder.Parameters.MapSize.X.ToString(); @@ -178,7 +184,7 @@ void HandleParametersChanged(object Sender, EventArgs E) _SettingSelect.Value.Value, _TurnsSelect.Value.Value, new Coordinate(width, height), - true); + _FogOfWarCheckbox.Value); if (OnParametersChanged != null) OnParametersChanged(this, new ValuedEventArgs(parameters)); }