Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions ElectronicObserver.Avalonia/ShipGroup/ShipGroupItemViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,27 +40,27 @@ public class ShipGroupItemViewModel(IShipData ship)
}

private int AircraftCurrent1 => Ship.Aircraft[0];
private int AircraftMax1 => Ship.MasterShip.Aircraft[0];
private int AircraftMax1 => Ship.AircraftMax?[0] ?? Ship.MasterShip.Aircraft[0];
public Fraction? Aircraft1 => GetAircraftFraction(0, AircraftCurrent1, AircraftMax1);

private int AircraftCurrent2 => Ship.Aircraft[1];
private int AircraftMax2 => Ship.MasterShip.Aircraft[1];
private int AircraftMax2 => Ship.AircraftMax?[1] ?? Ship.MasterShip.Aircraft[1];
public Fraction? Aircraft2 => GetAircraftFraction(0, AircraftCurrent2, AircraftMax2);

private int AircraftCurrent3 => Ship.Aircraft[2];
private int AircraftMax3 => Ship.MasterShip.Aircraft[2];
private int AircraftMax3 => Ship.AircraftMax?[2] ?? Ship.MasterShip.Aircraft[2];
public Fraction? Aircraft3 => GetAircraftFraction(0, AircraftCurrent3, AircraftMax3);

private int AircraftCurrent4 => Ship.Aircraft[3];
private int AircraftMax4 => Ship.MasterShip.Aircraft[3];
private int AircraftMax4 => Ship.AircraftMax?[3] ?? Ship.MasterShip.Aircraft[3];
public Fraction? Aircraft4 => GetAircraftFraction(0, AircraftCurrent4, AircraftMax4);

private int AircraftCurrent5 => Ship.Aircraft[4];
private int AircraftMax5 => Ship.MasterShip.Aircraft[4];
private int AircraftMax5 => Ship.AircraftMax?[4] ?? Ship.MasterShip.Aircraft[4];
public Fraction? Aircraft5 => GetAircraftFraction(0, AircraftCurrent5, AircraftMax5);

private int AircraftCurrentTotal => Ship.AircraftTotal;
private int AircraftMaxTotal => Ship.MasterShip.AircraftTotal;
private int AircraftMaxTotal => Ship.AircraftMaxTotal;
public Fraction? AircraftTotal => GetAircraftFraction(0, AircraftCurrentTotal, AircraftMaxTotal);

public string Fleet => Ship.FleetWithIndex;
Expand Down
7 changes: 7 additions & 0 deletions ElectronicObserver.Core/Types/IShipData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -129,11 +129,18 @@ public interface IShipData
/// </summary>
IList<int> Aircraft { get; }

/// <summary>
/// Aircraft capacity if it was increased
/// </summary>
List<int>? AircraftMax { get; }

/// <summary>
/// 現在の航空機搭載量
/// </summary>
int AircraftTotal { get; }

int AircraftMaxTotal { get; }

/// <summary>
/// 搭載燃料
/// </summary>
Expand Down
6 changes: 4 additions & 2 deletions ElectronicObserver.Core/Types/Mocks/ShipDataMock.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ public class ShipDataMock : IShipData
public IList<int> AllSlotMasterReplay { get; } = [];
public IList<IEquipmentDataMaster?> AllSlotInstanceMaster => AllSlotInstance.Select(e => e?.MasterEquipment).ToList();
public IList<int> Aircraft { get; set; }
public List<int>? AircraftMax { get; set; }
public int AircraftTotal { get; }
public int AircraftMaxTotal { get; }
public int Fuel { get; set; }
public int Ammo { get; set; }
public int SlotSize { get; }
Expand Down Expand Up @@ -184,14 +186,14 @@ public int LuckBase
public bool IsLockedByEquipment { get; }
public bool CanBeTargeted { get; set; } = true;

public ShipDataMock(IShipDataMaster ship, List<int>? kyouka = null)
public ShipDataMock(IShipDataMaster ship, List<int>? kyouka = null, List<int>? aircraft = null)
{
MasterShip = ship;

HPCurrent = MasterShip.HPMin;

SlotSize = MasterShip.SlotSize;
Aircraft = MasterShip.Aircraft;
Aircraft = aircraft ?? MasterShip.Aircraft;
SlotInstance = [.. Enumerable.Range(0, SlotSize).Select(i => null as IEquipmentData)];

Fuel = ship.Fuel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ public class DeckBuilderEquipment
[JsonPropertyName("id")] public EquipmentId Id { get; set; }
[JsonPropertyName("rf")] public int Level { get; set; }
[JsonPropertyName("mas")] public int? AircraftLevel { get; set; }
}
[JsonPropertyName("ac")] public int? AircraftCount { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ public class FleetAnalysisShip
[JsonPropertyName("api_slot_ex")] public required int ExpansionSlot { get; set; }
[JsonPropertyName("api_sally_area")] public required int SallyArea { get; set; }
[JsonPropertyName("api_sp_effect_items")] public required List<FleetAnalysisSpecialEffectItem> SpecialEffectItems { get; set; }
[JsonPropertyName("api_onslot_max")] public required List<int>? AircraftMax { get; set; }
}
13 changes: 11 additions & 2 deletions ElectronicObserver/Data/ShipData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -156,12 +156,15 @@ public class ShipData : APIWrapper, IIdentifiable, IShipData
/// </summary>
public IList<int> Aircraft => Array.AsReadOnly(_aircraft);

public List<int>? AircraftMax { get; private set; }

/// <summary>
/// 現在の航空機搭載量
/// </summary>
public int AircraftTotal => _aircraft.Sum(a => Math.Max(a, 0));

public int AircraftMaxTotal => AircraftMax?.Sum(a => Math.Max(a, 0)) ?? MasterShip.AircraftTotal;


/// <summary>
/// 搭載燃料
Expand Down Expand Up @@ -600,7 +603,7 @@ public IList<double> AircraftRate
get
{
double[] airs = new double[_aircraft.Length];
var airmax = MasterShip.Aircraft;
var airmax = AircraftMax ?? MasterShip.Aircraft;

for (int i = 0; i < airs.Length; i++)
{
Expand All @@ -614,7 +617,7 @@ public IList<double> AircraftRate
/// <summary>
/// 搭載機残量割合
/// </summary>
public double AircraftTotalRate => (double)AircraftTotal / Math.Max(MasterShip.AircraftTotal, 1);
public double AircraftTotalRate => (double)AircraftTotal / Math.Max(AircraftMaxTotal, 1);



Expand Down Expand Up @@ -1520,6 +1523,12 @@ public override void LoadFromResponse(string apiname, dynamic data)
Evasion = i.ApiKaih,
}).ToList() ?? new();
}

if (data.api_onslot_max())
{
AircraftMax = (List<int>)RawData.api_onslot_max;
}

break;

case "api_req_hokyu/charge":
Expand Down
18 changes: 9 additions & 9 deletions ElectronicObserver/Services/ApiFileService/ApiFileService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -327,12 +327,12 @@ private static bool ShouldIncludeFleet(IFleetData fleet, FleetType combinedFlag,
public static SortieFleetData MakeSortieFleet(IEnumerable<IFleetData?> fleets,
IEnumerable<IBaseAirCorpsData> airBases, FleetType combinedFlag, int fleetId, int nodeSupportFleetId,
int bossSupportFleetId, int world) => new()
{
FleetId = fleetId,
NodeSupportFleetId = nodeSupportFleetId,
BossSupportFleetId = bossSupportFleetId,
CombinedFlag = combinedFlag,
Fleets = fleets
{
FleetId = fleetId,
NodeSupportFleetId = nodeSupportFleetId,
BossSupportFleetId = bossSupportFleetId,
CombinedFlag = combinedFlag,
Fleets = fleets
.Select(f => f switch
{
null => null,
Expand All @@ -342,11 +342,11 @@ public static SortieFleetData MakeSortieFleet(IEnumerable<IFleetData?> fleets,
_ => null,
},
}).ToList(),
AirBases = airBases
AirBases = airBases
.Where(a => a.MapAreaID == world)
.Select(MakeSortieAirBase)
.ToList(),
};
};

private static SortieFleet MakeSortieFleet(IFleetData f) => new()
{
Expand Down Expand Up @@ -381,7 +381,7 @@ public static SortieFleetData MakeSortieFleet(IEnumerable<IFleetData?> fleets,
Luck = s.LuckTotal,
EquipmentSlots = s.SlotInstance
.Zip(s.Aircraft, (Equipment, AircraftCurrent) => (Equipment, AircraftCurrent))
.Zip(s.MasterShip.Aircraft, (slot, AircraftMax) => new SortieEquipmentSlot
.Zip(s.AircraftMax ?? s.MasterShip.Aircraft, (slot, AircraftMax) => new SortieEquipmentSlot
{
Equipment = slot.Equipment switch
{
Expand Down
25 changes: 14 additions & 11 deletions ElectronicObserver/Services/DataSerializationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -188,12 +188,12 @@ private static DeckBuilderShip? MakeDeckBuilderShip
IsExpansionSlotAvailable = s.IsExpansionSlotAvailable,
Equipment = new()
{
Equipment1 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(0).FirstOrDefault(), maxAircraftLevel),
Equipment2 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(1).FirstOrDefault(), maxAircraftLevel),
Equipment3 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(2).FirstOrDefault(), maxAircraftLevel),
Equipment4 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(3).FirstOrDefault(), maxAircraftLevel),
Equipment5 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(4).FirstOrDefault(), maxAircraftLevel),
EquipmentExpansion = MakeDeckBuilderEquipment(s.ExpansionSlotInstance, maxAircraftLevel),
Equipment1 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(0).FirstOrDefault(), maxAircraftLevel, s.Aircraft.Skip(0).FirstOrDefault()),
Equipment2 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(1).FirstOrDefault(), maxAircraftLevel, s.Aircraft.Skip(1).FirstOrDefault()),
Equipment3 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(2).FirstOrDefault(), maxAircraftLevel, s.Aircraft.Skip(2).FirstOrDefault()),
Equipment4 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(3).FirstOrDefault(), maxAircraftLevel, s.Aircraft.Skip(3).FirstOrDefault()),
Equipment5 = MakeDeckBuilderEquipment(s.AllSlotInstance.Skip(4).FirstOrDefault(), maxAircraftLevel, s.Aircraft.Skip(4).FirstOrDefault()),
EquipmentExpansion = MakeDeckBuilderEquipment(s.ExpansionSlotInstance, maxAircraftLevel, null),
},
Hp = s.HPMax,
Firepower = s.FirepowerTotal,
Expand Down Expand Up @@ -223,14 +223,16 @@ private static DeckBuilderShip? MakeDeckBuilderShip
private static DeckBuilderEquipment? MakeDeckBuilderEquipment
(
IEquipmentData? equipment,
bool maxAircraftLevel
bool maxAircraftLevel,
int? aircraftCount
) => equipment switch
{
{ } eq => new()
{
Id = eq.MasterEquipment.EquipmentId,
Level = eq.Level,
AircraftLevel = GetAircraftLevel(eq, maxAircraftLevel),
AircraftCount = aircraftCount,
},

_ => null
Expand All @@ -256,10 +258,10 @@ bool maxAircraftLevel
Name = airBase.Name,
Equipment = new()
{
Equipment1 = MakeDeckBuilderEquipment(ab.Squadrons.Values.Skip(0).FirstOrDefault()?.EquipmentInstance, maxAircraftLevel),
Equipment2 = MakeDeckBuilderEquipment(ab.Squadrons.Values.Skip(1).FirstOrDefault()?.EquipmentInstance, maxAircraftLevel),
Equipment3 = MakeDeckBuilderEquipment(ab.Squadrons.Values.Skip(2).FirstOrDefault()?.EquipmentInstance, maxAircraftLevel),
Equipment4 = MakeDeckBuilderEquipment(ab.Squadrons.Values.Skip(3).FirstOrDefault()?.EquipmentInstance, maxAircraftLevel),
Equipment1 = MakeDeckBuilderEquipment(ab.Squadrons.Values.Skip(0).FirstOrDefault()?.EquipmentInstance, maxAircraftLevel, null),
Equipment2 = MakeDeckBuilderEquipment(ab.Squadrons.Values.Skip(1).FirstOrDefault()?.EquipmentInstance, maxAircraftLevel, null),
Equipment3 = MakeDeckBuilderEquipment(ab.Squadrons.Values.Skip(2).FirstOrDefault()?.EquipmentInstance, maxAircraftLevel, null),
Equipment4 = MakeDeckBuilderEquipment(ab.Squadrons.Values.Skip(3).FirstOrDefault()?.EquipmentInstance, maxAircraftLevel, null),
},
Mode = airBase.ActionKind,
Distance = airBase.Distance,
Expand Down Expand Up @@ -375,6 +377,7 @@ private static IEnumerable<FleetAnalysisShip> MakeFleetAnalysisShips(IEnumerable
Armor = i.Armor,
Evasion = i.Evasion,
}).ToList(),
AircraftMax = ship.AircraftMax,
};

private static IEnumerable<FleetAnalysisEquipment> MakeFleetAnalysisEquipment(IEnumerable<IEquipmentData> equipment)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,16 @@ public static class Extensions
return null;
}

ShipDataMock ship = new(Db.MasterShips[(int)deckBuilderShip.Id])
List<int> aircraft =
[
deckBuilderShip.Equipment.Equipment1?.AircraftCount ?? 0,
deckBuilderShip.Equipment.Equipment2?.AircraftCount ?? 0,
deckBuilderShip.Equipment.Equipment3?.AircraftCount ?? 0,
deckBuilderShip.Equipment.Equipment4?.AircraftCount ?? 0,
deckBuilderShip.Equipment.Equipment5?.AircraftCount ?? 0,
];

ShipDataMock ship = new(Db.MasterShips[(int)deckBuilderShip.Id], null, aircraft)
{
Level = deckBuilderShip.Level,
IsExpansionSlotAvailable = deckBuilderShip.IsExpansionSlotAvailable,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public virtual ShipViewModel Initialize(IShipData? ship)

Slots = ship.SlotInstance
.Take(ship.MasterShip.SlotSize)
.Zip(ship.MasterShip.Aircraft, (eq, slot) => new EquipmentSlotViewModel(eq, slot))
.Zip(ship.Aircraft, (eq, slot) => new EquipmentSlotViewModel(eq, slot))
.ToObservableCollection();

ExpansionSlot = ship.IsExpansionSlotAvailable switch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ public void SetSlotList(IShipData ship)
{
var slots = ship.AllSlotInstance
.Zip(ship.Aircraft, (eq, s) => (Equipment: eq, CurrentAircraft: s))
.Zip(ship.MasterShip.Aircraft, (slot, t) => (slot.Equipment, slot.CurrentAircraft, Size: t))
.Zip(ship.AircraftMax ?? ship.MasterShip.Aircraft, (slot, t) => (slot.Equipment, slot.CurrentAircraft, Size: t))
.ToList();

for (int i = 0; i < Slots.Count; i++)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ private string GetEquipmentString(IShipData ship, IFleetData fleet)
IEquipmentData? eq = ship.SlotInstance[i];
if (eq is not null)
{
sb.AppendFormat("[{0}/{1}] {2}\r\n", ship.Aircraft[i], ship.MasterShip.Aircraft[i], eq.NameWithLevel);
sb.AppendFormat("[{0}/{1}] {2}\r\n", ship.Aircraft[i], ship.AircraftMax?[i] ?? ship.MasterShip.Aircraft[i], eq.NameWithLevel);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ public void UpdateFleetState(IFleetData fleet)

int fuel = members.Sum(ship => ship.SupplyFuel);
int ammo = members.Sum(ship => ship.SupplyAmmo);
int aircraft = members.SelectMany(s => s.MasterShip.Aircraft.Zip(s.Aircraft, (max, now) => max - now)).Sum();
int aircraft = members.SelectMany(s => s.AircraftMax ?? s.MasterShip.Aircraft.Zip(s.Aircraft, (max, now) => max - now)).Sum();
int bauxite = aircraft * 5;

if (fuel > 0 || ammo > 0 || bauxite > 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public void Update(int presetId)

if (e < ship.MasterShip.Aircraft.Count)
{
sb.AppendLine($"[{ship.Aircraft[e]}/{ship.MasterShip.Aircraft[e]}] {slot[e].NameWithLevel}");
sb.AppendLine($"[{ship.Aircraft[e]}/{ship.AircraftMax?[e] ?? ship.MasterShip.Aircraft[e]}] {slot[e].NameWithLevel}");
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,7 @@ private string GetConsumptionResource(dynamic data)

int fuel_supply = ships.Sum(s => s.SupplyFuel);
int ammo = ships.Sum(s => s.SupplyAmmo);
int bauxite = ships.Sum(s => s.Aircraft.Zip(s.MasterShip.Aircraft, (current, max) => new { Current = current, Max = max }).Sum(a => (a.Max - a.Current) * 5));
int bauxite = ships.Sum(s => s.Aircraft.Zip(s.AircraftMax ?? s.MasterShip.Aircraft, (current, max) => new { Current = current, Max = max }).Sum(a => (a.Max - a.Current) * 5));

int fuel_repair = ships.Sum(s => s.RepairFuel);
int steel = ships.Sum(s => s.RepairSteel);
Expand Down
Loading